И при отправке комментариев как видите есть глюки...

Рад что уведомили на почту, но зачем же это делать 40(!) раз?

Рад что уведомили на почту, но зачем же это делать 40(!) раз?

Моя сделать тестовый коммент, чтобы видеть, что все работает и радоваться ентому факту. Когда написал что-нибудь и проголосовал - текст пропадает. Ну, это так, на всякий. Потом сделаете аджаксом.

Но почему-то список адресатов не очищался... И с каждым новым письмом список получателей увеличивался. В итоге самые давние пользователи сайта получили наибольшее число писем. Еще раз извините! Я не специально. Собственно ничего страшного!)) Конечно был некоторый шок/недоумение что это вдруг такой поток одного и того же письма))) :) С другой стороны даже настроение стало лучше, и всё будет хорошо!))) Мы всё понимаем! :)

Отлично! Радует что есть реальный прогресс в деле Сообщества MODX клуба! Спасибо за сообщение данное, будем вновь чаще сюда заглядывать/читать/рассуждать/делать !!!)))

В общем, я решил тоже поучаствовать в этом эксперименте, и написать свой парсер на замену. Облегчить его на 100% не получается в любом случае. Во-первых, MODX довольно активно использует его отдельные методы, так что как минимум пустые методы надо прописать. Во-вторых, в тех же шаблонах у нас в параметрах есть необходимые параметры, типа tpl или phptemplates.non-cached, и чтобы они учитывались в системе, пришлось один метод более живым оставить. Вот такой класс у меня получился: <?php

class modWebParser { /** * A reference to the modX instance * @var modX $modx */

public $modx= null; 

/**
 * @param xPDO $modx A reference to the modX|xPDO instance
 */
function __construct(xPDO &$modx) {
    $this->modx =& $modx;
}

public function setProcessingElement($arg = null) {
} 

public function processElementTags($parentTag, & $content, 
    $processUncacheable= false, $removeUnprocessed= false, $prefix= "[[", 
    $suffix= "]]", $tokens= array (), $depth= 0) {
    return $processed;
} 

public function collectElementTags($origContent, array &$matches, $prefix= '[[', $suffix= ']]') {
    return 0;
}

/**
 * Parses an element/tag property string or array definition.
 *
 * @param string $propSource A valid property string or array source to
 * parse.
 * @return array An associative array of property values parsed from
 * the property string or array definition.
 */
public function parseProperties($propSource) {
    
    $properties= array ();
    
    if (!empty ($propSource)) {
        if (is_string($propSource)) {
            $properties = $this->parsePropertyString($propSource, true);
        } elseif (is_array($propSource)) {
            foreach ($propSource as $propName => $property) {
                if (is_array($property) && array_key_exists('value', $property)) {
                    $properties[$propName]= $property['value'];
                } else {
                    $properties[$propName]= $property;
                }
            }
        }
    }
    return $properties;
}

public function isProcessingUncacheable() {
    $result = false;
    return $result;
}

public function isRemovingUnprocessed() {
    $result = false;
    return $result;
}

public function parsePropertyString($string, $valuesOnly = false) {
    $properties = array();
    return $properties;
}

} Закинул его в core/components/modxsite/model/modxsite/model/modwebparser.class.php В настройках контекста web прописал: parser_class = modWebParser parser_class_path = {core_path}components/modxsite/model/modxsite/ В целом все работает, и API MODX-а получается использовать, к примеру {$modx->getOption('site_url')} Попробуйте установить ShopModxBox и погонять с этим парсером и без него. Но здесь надо учитывать, что многое не будет работать в принципе. Лично мне кажется, что овчинка не будет стоить выделки. К примеру, мы не сможем использовать некешируемые блоки через [[!smarty?tpl=....]] и т.п. Конечно же мы можем просто отрабатывать шаблоны каждый раз, включив кеширование самого Smarty, но это гораздо более заморочено.

Добрый день! Интересный эксперимент :) Но все же есть пара моментов. И вот основной: $modx->smarty->display(«tpl/{$tpl}»); return ""; // отпрвить $ничего на вывод через modx-парсер. :) Таким образом рушится механизм кеширования MODX, так как он не получает отрабатываемого контента. Ежели вы хотите именно отключить MODX-парсер, то есть более лаконичное решение — системная настройка parser_class. Она учитывается в методе MODx::getParser() public function getParser() { return $this->getService('parser', $this->getOption('parser_class', null, 'modParser'), $this->getOption('parser_class_path', null, '')); } То есть пишете парсер на замену modParser и все. А в нем, где надо, облегчаете методы по максимум, чтобы просто возвращали по минимуму и все. Только вешайте его именно на внешний контекст, то есть в настройки контекста прописывайте, а не в системные, чтобы в mgr работал родной парсер, а во фронте ваш. Потому что системный парсер используется в том числе и для обработки системных настроек и т.п.

Есть еще момент — формы для сохранения нового объекта и редактирования старого. Использовать одну и ту же форму в формите — крайне сложно. А вот со смарти и процессорами все гораздо проще. Сейчас покажу. Вот есть форма для заполнения данных: gist.github.com/Fi1osof/8d1af2c4569b57593adb А вот шаблончик создания пользователя, который подгружает эту форму. На вход он принимает данные из $_POST. То есть это не Ajax-овая форма. При этом передаваемые поля при сохранении выводятся в своих полях, если в форме есть ошибки и форма не была окончательно отработана. Ну, все стандартно здесь. А вот шаблончик для редактирования пользователя, который расширяет шаблон создания пользователя. Здесь он так же подгружает форму для данных, но перед этим получает данные запрошенного пользователя и объединяет их с передаваемыми в запросе данными. Да, это и на формите можно сделать, но будет во-первых, гораздо сложнее, а во-вторых, менее наглядно, потому что раскидано будет по большему количеству сущностей.