Николай

Николай

С нами с 09 ноября 2013; Место в рейтинге пользователей: #57
Николай
19 марта 2019, 15:27
+1
Ставите пробел после { и fenom игнорирует всё что после скобки. Нужно просто пробелы выставить в скриптах после {. Также все что внутри {ignore}{/ignore} тоже будет проигнорировано.
Николай
19 марта 2019, 13:26
0
Иногда даже с феном не очень удобно, когда слишком много логики на странице. Тогда в помощь плагины на события типа OnLoadWebDocument, OnWebPagePrerender. Там можно получить и переназначить все поля ресурса. А можно установить плейсхолдеры $modx->setPlaceholder('name', value); И в чанке или шаблоне уже не городить конструкции из if'ов, а вывести [[+my_placeholder]], или {$_pls['my_placeholder']} который будет содержать результат обработки данных плагином.
Николай
13 марта 2019, 14:49
0
Короче, дискриминация высшим сословием простых Николаев, неприметных, без аватарки, громкого имени, личного бренда, обычных рабов божьих, в лаптях и с крестом на груди))
Николай
13 марта 2019, 14:41
0
Не то чтобы я настаиваю) Но Николаев высветилось куча, чтобы узнать какой правильный, нужно в любом случае найти ссылку на его профиль, или зайти в профиль, и подсмотреть ещё и логин) Хорошо если имя и фамилия указаны, и логин читабельный, тогда ок, а если безфамильный, или, скажем, от балды часто указывают Николай Николаев, или Иван Иванович, то таких пруд пруди со временем будет в списке. А в перемешку с кривыми логинами ещё сложнее)
Николай
13 марта 2019, 14:19
0
Просто не у всех логин в адресе стоит. По ID можно упоминать? @Николай
Круто, но придётся постоянно вырезать из ссылки логин или id, лишние манипуляции. Если удобное копирование сделать, как вот тут напротив заголовков якорь, то будет вообще отлично. А если ещё по клику js-скриптом, чтобы нажал нажал на якорь и скопировал хештег, то ещё оперативнее)
Николай
12 марта 2019, 18:02
0
Скажи сразу, заметку не читал, да?
Читал, перечитал ещё раз, и вспомнилось видео про девочку и грибы))

У каждого юзера есть прямая ссылка, и она легко копируется.
Ну вот её же недостаточно вставить как хештег, а было бы удобно. Допустим, у одного логин abcd1 и имя Николай, а у другого abcd11 и тоже имя Николай, их может быть 10 человек, проблематично будет выбрать правильный, если ещё в попыхах это делаешь. А ссылку скопировал и 100% всё ок. И можно от списка вообще избавиться. Тем более логичнее, видишь юзера в комменте — копируешь ссылку. А тут получается видишь юзера, ищешь его в списке всех 100500 юзеров.
Николай
12 марта 2019, 17:22
0
А, чем ближе @ к началу строки, тем адекватнее список пользователей отображается. Я пробовал после длинного абзаца вставить, и аж скролл появился.
Николай
12 марта 2019, 17:14
0
Может быть будет удобнее в профиле пользователя, и рядом со ссылкой на его профиль в комменте, сделать якорь на его «хештег», т.е. просто скопировал-вставил ссылку без долгого листания списка пользователей (тем более логин можешь и не знать, не запоминающийся например). А при ответе как в ВК можно автоматом подставлять хештег в форму. А в дальнейшем можно выводить кучей ответы данному юзеру от других в профиле. Т.е. можно будет посмотреть кто что кому отвечает)

p.s. Кстати, что-то с позиционированием списка у меня в мозилле. Кеш обновлял Ctrl+F5:

Николай
10 марта 2019, 17:59
+1
Насчёт 1000 чанков такой пример. Допустим, нам нужно вывести один код если переменная, скажем TV, равна одному значению, и другой код, если равна другому значению. А условий может быть множество и не очень простых. И мы в итоге создадим в довесок к чанку с выводом TV-переменной сниппет, и ещё несколько чанков к нему в придачу, на каждый вариант нашего условия. И всё это будет раскидано по сайту. Поди потом разберись что где вызывается и как взаимосвязано. А с феномом можно всё в одном месте прописать, открыл исходный чанк и понимаешь логику. Это я только самый простой пример описал. А часто бывает гораздо запутаннее. При стандартном парсере как раз и придётся написать 1000 сниппетов и чанков. Даже в таких случаях где надо тупо телефон превратить из 7 (920) 987-65-43 в 79209876543 придётся написать целый сниппет. Получится множество чанков и сниппетов, или запутанные нечитаемые конструкции phx, которые ещё и томозные, т.к. все теги прописанные в них, будут обработаны, даже если не попадают под условие.

Конечно, с феномом читаемость html-кода пострадает. Но как ещё по-другому описать логику вывода html? У нас же динамический сайт, а не голая вёрстка. Я думаю больше никак. Хотя, не, можно ещё как в вордпрессе вставлять <?php ?> в шаблон)
Николай
10 марта 2019, 17:34
+2
Лично я настолько привык к феному, что если вернуться в то время когда его не было, на MODX вообще глаза бы смотреть отказались) Удивляюсь тому, что кто-то до сих пор использует стандартный парсер, особенно убогими кажутся конструкции типа фильров phx. Если вижу такое на каких-то сайтах, то понимаю, что разработчик сайта сильно застрял в MODX из 90-х первых версий Revo. А насчёт 1000 чанков это фигня какая-то, с помощью фенома можно очень сильно облегчить множество задач, упростить структуру, особенно круто, что можно наследовать шаблоны и чанки. В голове только всплывает фраза из рекламы: «ты просто не умеешь их готовить»)
Николай
03 марта 2019, 14:21
0
Грубый способ сделать это, если там нет каких-то настроек и удобных возможностей для этого, написать плагин, который обработает исходный код страницы перед отправкой его в браузер клиента. По событию OnWebPagePrerender исходный код страницы можно получить так:

switch ($modx->event->name) {
    case 'OnWebPagePrerender':
        $output = &$modx->resource->_output;
        break;
}

В $output хранится код. Переопределив переменную, мы изменим исходный код страницы. Можно регулярками удалить вызовы скриптов, и добавить их в footer. Правда если компоненты, скрипты которых мы ходим удалить, тоже используют это событие, то может не сработать.

Попробовал написать плагин, работает для Tickets:

<?php

if($modx->event->name == "OnWebPagePrerender") {
    $output = &$modx->resource->_output;
    
    preg_match('#<script type="text/javascript">if \(typeof TicketsConfig == "undefined"\).+?</script>#s', $output, $matches);      // находим первый вызов js-скрипта Tickets
    $script1 = $matches[0];                                                                                                         // помещаем его в переменную            
    $output = str_replace($script1, '', $output);                                                                                   // удаляем его со страницы
    
    preg_match('#<script type="text/javascript">TicketsConfig\.editor.+?</script>#s', $output, $matches);                           // вызов 2-го скрипта
    $script2 = $matches[0];
    $output = str_replace($script2, '', $output);
    
    preg_match('#<script type="text/javascript">TicketsConfig.formBefore.+?</script>#s', $output, $matches);                        // 3-го скрипта
    $script3 = $matches[0];
    $output = str_replace($script3, '', $output);   
    
    $output = str_replace('</body>', "$script1\r\n$script2\r\n$script3\r\n</body>", $output);                                                  // все 3 вызова помещаем перед закрывающим тегом body
}

Для других компонентов по тому же принципу.
Николай
03 марта 2019, 13:31
+1
Изначально в файле
assets/components/minishop2/js/mgr/category/product.grid.js
в методе getColumns определяются все дефолтные поля. Можно по событию msOnManagerCustomCssJs переопределить этот метод, включая все поля таблицы товаров в админке.
Николай
03 марта 2019, 13:25
+1
Так там же можно отсортировать поле практически любое итак, скажем pagetitle, favorit, price, и в следующий раз страница откроется с сортировкой по этому полю. А если нужно кастомное поле, то сделать это можно через плагины. В частности там есть кусок кода про расширение админки:

miniShop2.plugin.color = {
    // Изменение полей для панели товара
    getFields: function () {
        return {
            color: {
                xtype: 'minishop2-combo-autocomplete',
                description: '<b>[[+color]]</b><br />' + _('ms2_product_color_help')
            }
        }
    },
    // Изменение колонок таблицы товаров в категории
    getColumns: function () {
        return {
            color: {
                width: 50,
                sortable: false,
                editor: {
                    xtype: 'minishop2-combo-autocomplete',
                    name: 'color'
                }
            }
        }
    }
};

Если нужно добавить много полей быстро и удобно, то поможет компонент msFieldsManager.
Николай
18 февраля 2019, 17:48
0
В $filename месяц и день только местами поменять)
Николай
18 февраля 2019, 17:34
0
Часто сталкиваюсь с тем, что лог забивается спустя несколько месяцев. Сделал сайт, а потом тебе пишут, типа: «что-то случилось с админкой, что делать??». Когда сервер не может его открыть для записи из-за нехватки памяти. Надоело, написал небольшой плагин, может кому пригодится:

<?php

if( in_array($modx->event->name, ['OnManagerPageInit','OnBeforeManagerLogin']) ) {
    $logpath = MODX_CORE_PATH . 'cache/logs/error.log';

    if(filesize($logpath) > 5000000) {
        $logcontent = file_get_contents($logpath);
        $filename = 'error-'. date("Y-d-m_H:i:s");
        
        $zip = new ZipArchive();
        $zip->open(MODX_CORE_PATH . 'cache/logs/'. $filename . '.zip', ZipArchive::CREATE);
        $zip->addFromString($filename . '.txt', $logcontent);
        $zip->close();        
        
        $modx->runProcessor('system/errorlog/clear');
    }
}

Должно быть включено расширение php_zip на сервере. При достижении размера в 5 мб рядом с логом ошибок создаётся архив с его копией, а основной лог затирается.

Николай
18 февраля 2019, 14:48
0
Ну а ценообразование — это совсем отдельный разговор. Марк не в России живет, он ставит цену исходя из платежеспособности своего рынка и своих потребностей, то, что в СНГ и окрестностях это дорого, так это вопрос СНГи окрестностей, а не Марка.
Так если сравнить с западными рынками дополнений, то там за эту цену предлагают часто нафаршированные модули для электронной коммерции. А билдеры контента идут в подарок)

А MIGX хоть и корявенький местами, зато работает и бесплатен. А вот с ContentBlocks даже опытный разработчик не сразу разберётся, что уж говорить о менеджере, который будет им пользоваться.
Николай
18 февраля 2019, 13:12
+1
На MIGX, как писал выше, очень неплохо решаются несложные задачи) Пусть это может как-то корявенько выглядит, зато довольно удобно и просто наполнять, и после настройки ничего лишнего. MIGX'ом тоже решается куча задач, этой целый комбайн, но он почему-то вообще бесплатен.

А насчёт билдера, так он скорее для популяризации движка. Иначе бы и на Wordpress его сделали платным, или Evolution. Он же там тоже очень функциональный. А тут, выходит, в таком узком месте компания хочет навариться. Не зря, наверное, при разработке MODX3 MODX LLC первым делом бросилась делать редактор контента к нему) Я в принципе не то чтобы выражаю негатив, просто мне кажется излишний коммерческий интерес губит любой интерес к продукту, и показывает сообществу ориентированность в первую очередь на прибыль, а не на развитие. Как вариант, в таких случаях обычно делают бесплатную упрощённую версию, и платную версию со всякими плюшками. И овцы целы, и волки сыты.
Николай
17 февраля 2019, 21:49
+2
Ну и как то всегда интересно читать про сложные проекты, для которых нельзя выделить аж целых 6000 рублей, без обид =))
Сложные проекты и сложные страницы разница большая. Часто вёрстка подразумевает несколько типов страниц в которых используются различные текстовые блоки по-разному оформленные. Нужно иметь возможность менять порядок следования блоков и забивать туда информацию. Сайт при этом самый обычный, просто наполнить такую страницу в редакторе менеджеру не по силам. Отваливать 6 тыс. за эту возможность как-то накладно… Особенно если знаешь, что в Wordpress, Evolution, October и других движках Builder'ы бесплатные. Если себестоимость сайта на MODX без учёта работы будет по цене как лицензия на Битрикс, то потребуется долго объяснять потенциальному заказчику чем MODX лучше любой другой системы где много всяких тем, дополнений и всего всего и ещё и бесплатно. Такого заказчика нужно будет ещё и найти. По моему ИМХО цена за дополнение сильно завышена. Да и само дополнение перегружено функционалом, который в большинстве случаев и не нужен вовсе. Получается, покупаешь дорогой комбайн ради того, чтобы пару грядок обработать.

Лично я под каждый блок завожу категорию TV полей и там размещаю TV-поля и таблицы MIGX, а потом всё это собираю в одной таблице MIGX:





В поле тип — тип блока со своей уникальной вёрсткой. Строки таблицы можно перетаскивать меняя порядок следования блоков. Как говорится, дёшево и сердито.
Николай
16 февраля 2019, 17:24
+1
Я обновился, и не работал клик по колесу мыши. А потом Ctrl+F5 всё исправил. На случай если у кого-то будет подобная проблема.