Нет. Вы не поняли — шаблон идет 1-2-3, но в них условия по выводу блоков. Если делать свой шаблон к каждой ветке, как предлагаете вы, то на более-менее крупном сайте нужно будет 10-20 шаблонов, которые будут повторять базовые 2-3 шаблона, но в выводом блоков разным. При поддержке такого сайта вы очень быстро запутаетесь. Именно потому, что у меня была так сделано на сайте, который я переделываю, я и занимаюсь этим вопросом.
Именно. У меня смутная идея — типа тв-поле с разделом или мультиразделами. И потом это поле анализировать. Но тоже выглядит как-то костыльно. Хотя может я и иду в неверном направлении.
Спасибо, я нашел этот кусок. Но заработал if и я не стал писать свой сниппет.
Смотря сколько ресурсов в каждой папке-контейнере. Понятно, что, если все в одной, то при ее открытии скорее всего браузер выдаст ошибку про зависание javascript. А если категорий много, то ничего страшного. Главное не нажимать кнопку раскрыть все дерево :). Вообще, если планируется часто добавлять какие-нибудь новости или статьи, то лучше использовать Articles или Tickets, которые скрывают ресурсы в дереве.
Приветствую Вас. На самом деле проект старый. В реальной жизни его уже нет :(, вот сегодня нашол архив этого сайта, постараюсь его в ближайщее время поставить у себя на сервере. Но поверьте, на данный момент я бы решал все те задачи, которые были у проекта — иначе. Хотя, с другой стороны, там как раз был уровень знаний в Модексе небольшой и решалось всё стандартными расширениями.
Уже не раз возникал вопрос по поводу админки для секретаршь для фронта, но всё не дотянутся руки и опубликовать урок с примерами простой админки.
Картинки востановил (вернее залил к себе на сервер).
  • avatar jeka
  • 0
спасибо
Смысл OnWebPagePrerender выдрать все ссылки с $modx->documentOutput и заменить их на правильные.
  • avatar jeka
  • 0
ковыряюсь в плагине, первый кусок на событие OnWebPageInit переписал, уменьшив код в двое и избавившись от запроса, вроде бы работает исправно, скорость не проверял.
Осталось над вторым куском пошаманить, было бы здорово ещё смысл второго события (OnWebPagePrerender) понять. (результат покажу когда/если закончу)
  • avatar alooze
  • 1
Откровенно говоря, я так и не понял, чем один вид блоков (блоки в друпале) принципиально отличаются от другого вида блоков (чанки в modx). В конечном итоге обе сущности — это куски html кода. А как их назвали — дело десятое.

Изначально в Evolution была возможность задания условий в виде плагина phx. Однако применять его как бы рекомендуется, поскольку он создает существенную нагрузку на движок и тормозит его хорошо.

Не верю ©. PHx хорошее и удобное решение, а в вашей формулировке — это зло. Может быть вы не в курсе, но обращаясь к Ditto или Jot (и не только к ним) вы, сами того не зная, используете phx. И ничего, не тормозит. На самом деле, проблем у PHx две: им злоупотребляют и делают весь сайт на одном шаблоне с жуткими ветвлениями; он не щадит «чужие» плейсхолдеры. Да, по возможности лучше не использовать PHx сам по себе на сайте без крайней необходимости. Но если такая необходимость есть, то ставьте и используйте.

Далее. Меня всегда удивляла экономия на количестве шаблонов. Чем смущают вас 18 шаблонов? Надо — и 80 сделаем. В запущенном случае мне приходилось делать 4 шаблона, вы не поверите, с полностью одинаковым кодом, но разными названиями. Заказчик попался со сбитым прицелом и постоянно создавал документы не в той ветке. Если бы я забрал у него возможность менять шаблон вручную, то сайт выглядел бы очень странно. Поэтому для каждого раздела была сделана копия базового шаблона со своим названием. И нормально все работало, не тормозило и не зависало. А то, что в шаблонах везде был один код:


{{CODE}}


мне не мешало спать.

И последнее. Если вы хотите все же сделать один шаблон для всего на свете, но вас останавливают parent-ы, то создайте плагин на сохранение документа. В этом плагине либо вызывайте сниппет UltimateParent либо циклом пробегайтесь по $modx->documentMap (могу спутать, есть еще $modx->documentListing(?)) и составляйте цепочку из родителей в виде :parent:grandparent:grandgrandparent: Эту цепочку сохраняйте хоть в TV, хоть в любом из незанятых полей документа. И потом в сниппете IF просто проверяйте это поле/этот TV на «содержит строку ':id:
О круто, теперь я уверен что это работает, а то руки так и не дошли проверить.
Всё верно. Я, как только смогу ответить на свой вопрос, постараюсь как можно более полно дать на него ответ, но сейчас мне это не интересно. Спасибо.
Синоним
$modx->resource->getContent();
Ну, каков вопрос, таков ответ. В заголовке написано $modx->documentObject[] в Revo. Я привел вариант как можно получить инфу текущего документа без инициализации дополнительного объекта.
  • avatar tiptop
  • 2
По идее, вся суть задачи сводится к тому, чтобы назначить собственный шаблон каждому уровню в ветке.
community.modx-cms.ru/blog/addons/1353.html
Я тут в стороне стою с проектом на 30 тысяч документов на Evo, слушаю)
На самом деле все зависит только от того, как вы построите дерево. Как разрежете шаблон и насколько интенсивно будете использовать модификаторы. Вообще очень много если. Поэтому вы сначала сделайте — а дальше, если будет тормозит уже ищите узкие места. Хотя 10к документов это не так уж и много…

«Преждевременная оптимизация — корень всех зол» © Кнут.
Этим можно получить содержимое поля content, но вот обработать его не получается ни $modx->resource->content? = $content ни за счёт $modx->resource->_output = $content… уже много время потратил на поиски решения. Вот здесь, кажется, есть что-то ещё интересное.
Если через дополнительные поля, то может плагин, который будет вписывать в tv номер уровня при сохранении? Это то, что сразу на ум пришло, но выглядит как-то костыльно.
$modx->resource->get('content');
Здорово!!! Спасибо огромное!!!

Сделал сниппет headerlinks с содержимым:
<?php
$content = $input;

$h1 = substr_count($content, '<h1');
$h2 = substr_count($content, '<h2');
$h3 = substr_count($content, '<h3');
$h4 = substr_count($content, '<h4');
$h5 = substr_count($content, '<h5');
$h6 = substr_count($content, '<h6');

$c = 0;
while ( $c < $h1 ) {
    $content = preg_replace(
        '/(<h1[^>]*>[^<]*)(<\/h1>)/i',
        '$1<a name="h1-'.$c.'"></a>$2',
        $content, 
        1
    );
    $c++;
}

$c = 0;
while ( $c < $h2 ) {
    $content = preg_replace(
        '/(<h2[^>]*>[^<]*)(<\/h2>)/i',
        '$1<a name="h2-'.$c.'"></a>$2',
        $content, 
        1
    );
    $c++;
}

$c = 0;
while ( $c < $h3 ) {
    $content = preg_replace(
        '/(<h3[^>]*>[^<]*)(<\/h3>)/i',
        '$1<a name="h3-'.$c.'"></a>$2',
        $content, 
        1
    );
    $c++;
}

$c = 0;
while ( $c < $h4 ) {
    $content = preg_replace(
        '/(<h4[^>]*>[^<]*)(<\/h4>)/i',
        '$1<a name="h4-'.$c.'"></a>$2',
        $content, 
        1
    );
    $c++;
}


return $content;

К [[*content дописал :headerlinks и чудо свершилось, класс!