Николай

Николай

С нами с 09 ноября 2013; Место в рейтинге пользователей: #57
Николай
26 ноября 2019, 19:33
0
Можно вот так:
$resources = $modx->getIterator('modResource', [
    'template' => 8
]);

foreach ($resources as $resource) {
    $resource->remove();
    echo "Ресурс {$resource->pagetitle}({$resource->id}) удалён\r\n";
}
Запускать лучше в modalConsole, это компонент такой.
Николай
26 ноября 2019, 18:34
0
getIterator работает также как и getCollection, но не загружает все объекты в память, а только по одному когда в цикле перебор идёт. Память жрёт существенно меньше.
Николай
21 ноября 2019, 11:17
+1
Лично я на MODX3 не перешёл бы только потому, что там перестанет работать основная масса дополнений и функций к которым я привык (когда пробовал, они не работали). Тогда возникает вопрос: а зачем мне голый движок? Судя по отзывам, не я один такой. Был бы новый MODX3 какой-то реально прорывной, ещё можно было подумать. Но там существенно ничего не изменилось. Да и похоже вряд ли изменится. Так что в этом плане на мой взгляд у EVO правильный подход. Стабильность это немаловажный критерий для оценки надёжности системы. Если нужно что-то совсем новенькое, то полно других систем, движков. Было бы время копаться в них, изучать. Ведь на это могут уйти месяцы)
Николай
20 ноября 2019, 20:01
+1
Во дельцы опупевшие)) Зачем заморачиваться рекламные сети городить, тыж провайдер, даёшь рекламу какую захочешь на любом сайте. И с таргетингом никаких проблем, знаешь каждую «овцу» в лицо, где живёт и чем дышит.
Николай
14 ноября 2019, 18:47
+1
Простой плагин на событие OnLoadWebDocument

<?php

$pagetitle = $modx->resource->pagetitle;

$pagetitle = str_replace('{', '&# 123;', $pagetitle);
$pagetitle = str_replace('}', '&# 125;', $pagetitle);

$modx->resource->set('pagetitle', $pagetitle);

Срабатывает до парсинга тегов. Получаем любое поле ресурса, и заменяем скобки на спецсимволы. Пробел после &# добавил, иначе они преобразуются в скобку здесь на сайте. Так можно прогнать все поля, которые заполняет контент-менеджер. Причём плагин заменяет скобки только в момент открытия страницы. Исходники по факту остаются не тронутыми.
Николай
11 ноября 2019, 12:30
0
Исходя из этой логики тогда он склеит и обычные страницы категорий… в одну)
Николай
27 октября 2019, 22:46
+1
Где-то в чанке походу используется параметр price, который при выводе имеет формат, допустим, 3 450, то есть с пробелом. Если привести такую строку в число то должно получиться 3. Короче, нужно очистить пробел
Николай
25 октября 2019, 13:59
+4
Расскажу одну историю связанную с этим скриптом, поучительную, и со счастливым концом)) Короче, доделал сайт, замотался с ним, недели на 3 растянулось, сроки уже к критической отметке приближаются. Вчера договорился, что перенесу. Ну и вспомнил старую идею насчёт этого скрипта, типа сейчас напишу, и как раз опробую в деле. Дело уже ночью было, голова с трудом соображала. В попыхах в строке про чистку кеша:

RDir( $params['core_path'] . 'cache/' );

забыл дописать 'cache/', запускаю скрипт… И тут на моих глазах все папки в core по очереди куда-то исчезают, а там лежит 80% работы. Всё на файлах было)) Сразу не понял, а потом когда дошло, спохватился, но было поздно… У меня аж адреналин подскочил как в момент опасности. Я уже трясущимися руками метаюсь в корзину, но… там ничего, оно и понятно, ведь папки удалил скрипт работающий в linux (подсистема винды), а не сама винда. Одна часть меня говорит: да ладно, быть такого не может, чтобы нельзя было обратно вернуть. А другая понимает, что так оно и есть)) И резервных копий нет, точнее есть одна, но слишком старая. И тут я начинаю представлять, что меня ждёт впереди: недели 2+ интенсивной работы за бесплатно, объяснения с заказчиком, а того будет трясти клиент… Ну думаю писец, попал… первый раз такой косяк. А потом вспоминаю, что в шторме была история файлов. Я ей не пользовался никогда, даже толком и не знал возможности. Немного поковырявшись, восстановил полностью весь сайт на момент до этого косяка. Шторм спас меня))

Выводы: делать резервные копии регулярно, пользоваться гитом, не работать сверх меры, phpStorm — лучшая прога, а VSCode и тому подобные редакторы, это просто удобные редакторы.
Николай
25 октября 2019, 13:09
0
Да, я поторопился, свичами редко как-то пользуюсь, всё время из головы вылетает как они пишутся и как работают) Пожалуйста
Николай
25 октября 2019, 12:43
0
Небольшой косячок был исправлен)
Николай
25 октября 2019, 10:35
+1
Код в файлах конфигов заменяется на эти шаблоны, там если приглядеться есть переменные типа {%database_user%}, которые заменяются реальными значениями в зависимости от сервера. То есть скрипт парсит шаблон из самого себя) Лучше открыть в редакторе, там где шаблоны эти куски кода закомментированны, а тут на сайте этого не видно.
Николай
16 октября 2019, 11:38
0
Можно завести ресурсы производителей, и привязать их к производителям, а потом вывести ресурсы с сортировкой. Если оформить ресурсы как категории, то можно ещё и товары конкретного производителя в них показывать.
Николай
15 октября 2019, 11:15
0
Тикетами можно сказать не пользовался, но логика одна и та же практически во всех компонентах. Таблицы (и другие компоненты Extjs) в админке получают (обновляют) данные в БД делая запрос к процессорам, и уже процессоры выполняют всю работу с БД. Вот папка со всеми процессорами тикетов. Найти тот, который отвечает за вывод комментов (или какое-то другое действие), обычно это getlist.class.php в соответствующей папке. Чтобы не править исходники, можно расширить родной процессор, сделать свою логику получения данных, если что-то не устраивает, и новый файл в той же папке разместить. А путь к процессору подменить на фронте админки, вот так я подменял для таблицы товаров минишопа:

Ext.ComponentMgr.onAvailable('minishop2-grid-products', function(){
    this.config.baseParams.action = "mgr/product/customgetlist";
    this.config.save_action = 'mgr/product/customupdatefromgrid';
});

То есть в конфиг таблицы подсунул свой путь к процессору. Похожий js-файл подгрузить к странице каким-нибудь событием. У меня было минишоповское msOnManagerCustomCssJs, в тикетах может быть своё, не знаю. Или родными движка подключить скрипт к админке. Но это всё конечно имеет смысл, если реально данные выбираются не самым лучшим способом. Ну или используются всякие там MODXовские методы, проверка прав и т.д. Они могут снизить скорость. В конце концов в процессоре можно хоть на чистом SQL данные из БД получить. Так что тут вопрос не в движке или ограничениях админки, а в умении выбирать данные из БД, ну и целесообразности применения каждого способа. Где-то прокатит getCollection, а где-то нет.
Николай
14 октября 2019, 08:46
+2
В прошлом примере пропустил строку в самом начале:
$output = &$modx->resource->_output;

Или вот так можно fancybox подцепить:
$output = &$modx->resource->_output;

require_once(MODX_CORE_PATH . 'components/phpquery/phpQuery/phpQuery.php');
$html = phpQuery::newDocumentHTML($output);

$images = $html->find('.article__txt img');

foreach($images as $el) {
    $img = pq($el);

    $src = $img->attr('src');
    $width = $img->attr('width');
    $height = $img->attr('height');

    $options = "w={$width}&h={$height}&zc=1";

    $thumb = $modx->runSnippet('phpthumbon', [
        'input' => $src,
        'options' => $options
    ]);

    $img->attr('src', $thumb);
    $img->attr('data-original', $src);
    $img->wrap("<a href='{$src}' data-fancybox=''></a>");
    $img->removeAttr('width');
    $img->removeAttr('height');
}

$output = $html->html();

То есть менеджер добавляет фото к статье как обычно, и может управлять его размерами. А плагин обрезает фото до заданных размеров и оборачивает его ссылкой, кликнув на которую откроется увеличенное изображение с помощью fancybox.
Николай
14 октября 2019, 08:28
+2
Я тоже часто пользуюсь этим событием, чтобы обработать код перед отправкой, но мне больше нравится phpQuery, это почти jQuery, только на PHP) К примеру, очистка style в тексте статьи:

require_once(MODX_CORE_PATH . 'components/phpquery/phpQuery/phpQuery.php');
$html = phpQuery::newDocumentHTML($output);

$paragraphs = $html->find('.article__txt p');

foreach($paragraphs as $el) {
    $p = pq($el);
    $p->attr('style','');
}

$output = $html->html();
Николай
27 сентября 2019, 18:21
+2
«Проблема» поста даже не в том, что он из другой оперы, а в том, что увлекающихся вышеназванными технологиями здесь с гулькин нос) И, наверное, подогреть интерес матчастью из стека который не особо интересен будет сложно)
Николай
27 сентября 2019, 17:58
0
В общем, проблем не было даже на хостинге. Вообще не понимаю удивления. За запросы к страницам что деньги берут или наказывают как-то?)
Николай
27 сентября 2019, 17:55
0
«Страница» это всего-лишь малюсенький скрипт на чистом PHP) Он запускает маленький процесс на сервере, который не напрягает ни процессор ни оперативку. А процессов этих в любой операционной системе тьма) Некоторые жрут сотни мегабайт оперативки каждую секунду, и грузят процессор. Gulp тоже запускает всякие процессы иначе как он узнает о том, что файлы изменились? У меня этот скрипт работает на локалке, и как-то я не чувствую тормозов в системе)) Он вообще для разработки, потом можно удалить ;) Кстати, та страница отдаётся за 20-30 мс.
Николай
23 сентября 2019, 20:43
0
Как вариант предложу вот такую штуку, сам пользуюсь. Правда там немного по-другому