Сергей Шлоков

Сергей Шлоков

Был в сети 06 ноября 2025, 19:54
Заказы не принимаю
а выводятся и 36 и 41 id…
А выводятся они скорее всего потому, что для них срабатывает условие
FROM_UNIXTIME(publishedon, '%Y-%m-%d') = '2016-04-02'
т.е. дата публикации у них '2016-04-02'. Поэтому я в первом комментарии и сделал группировку условия, чтобы OR было в скобках.
Вот же как получается без группировки
WHERE  ( FROM_UNIXTIME(publishedon, '%Y-%m-%d') = '2016-04-02' OR FROM_UNIXTIME(publishedon, '%Y-%m-%d') = '2016-04-03' AND `modResource`.`parent` IN (3,27,28,29,30,31,34,33) AND `modResource`.`published` = 1 AND `modResource`.`hidemenu` = 0 AND `modResource`.`deleted` = 0 )
А чтобы ограничить parent, нужно указать depth=1 (или 0, точно не помню).
&where=`["(FROM_UNIXTIME(publishedon, '%Y-%m-%d') = '[[!yesterday]]' OR FROM_UNIXTIME(publishedon, '%Y-%m-%d') = '[[!today]]')"]
Кроме того, этот код желательно оптимизировать. Вместо вызова 2-х сниппетов вызывать один с выставлением плейсхолдеров today и yesterday. Вызывать его перед pdoPage. Тогда условие будет выглядеть так
&where=`["(FROM_UNIXTIME(publishedon, '%Y-%m-%d') = '[[+yesterday]]' OR FROM_UNIXTIME(publishedon, '%Y-%m-%d') = '[[+today]]')"]
Есть еще вариант с использованием фенома. Тогда можно из без сниппета обойтись.

Совет. У pdoTools сниппетов есть замечательный параметр showLog. Советую его использовать при отладке.
Не успел, ниже уже ответили.
Событие OnManagerPageBeforeRender будет регистрировать скрипт для любого объекта (ресурса, чанка, сниппета), а нужно только для ресурса. Тут подойдет событие OnDocFormPrerender.
В примере моего плагина 2 javacript события — beforeSubmit и success. Если задействовать первое, то второе не нужно. Потому что, во-первых, изменения уже видны в интерфейсе (обновлять страницу не нужно) и, во-вторых, новые значения запишутся в базу (не надо их ловить в OnDocFormSave). Для знатоков яваскрипт не составит труда обработать и ТВшки. Этот вариант более интерактивный.
Ну а если таких знаний не хватает, то подойдет вариант ниже — в OnDocFormSave (можно в OnBeforeDocFormSave) меняются значения ТВ, а в яваскрипте, подключенным в OnDocFormPrerender, обновляется страница. Этот вариант проще.
Ну и наворочено. Не уверен, что пример рабочий. Вот простейший рабочий вариант с примером изменения поля
<?php
switch ($modx->event->name) {
    case 'OnDocFormPrerender':
        $modx->controller->addHTML('
	<script type="text/javascript">
		Ext.ComponentMgr.onAvailable("modx-panel-resource", function (e) {
		    var res = Ext.getCmp("modx-panel-resource");
		    res.on("beforeSubmit", function(){
			// Меняем зачение поля longtitle
		        Ext.getCmp("modx-resource-longtitle").setValue("Новое значение");
		    });
		    res.on("success", function(){ 
		        // Перезагрузка страницы после сохранения
		        location.reload();
		    });
		});
    </script>');
    break;
}
Странно, у меня работало без ошибок. Проверим.
Можете сделать проще.
// Поменяйте modExtra на свой
$modelPath = $modx->getOption('modextra_core_path', null, $modx->getOption('core_path') . 'components/modextra/') . 'model/';
$modx->addPackage('modextra', $modelPath);
$manager->removeObjectContainer('Имя класса');
За удаление чанков отвечает
настройка. Поставьте true. Видите, у сниппета ниже стоит true, поэтому они обновляются и удаляются. Если не хотите, чтобы чанки у пользователя обновлялись при обновлении компонента, то придется удалять их вручную
case xPDOTransport::ACTION_UNINSTALL:
    $chunk = $modx->getObject('modChunk', array('name'=>$chunkName));
    $chunk->remove();
    ...
Ну тоже самое же написано, только запись сокращенная. Ровно ничего не изменится, кроме размера записи. Это как использовать тернарный оператор, вместо классического условия.
Ну да, ну да.
{private message}
Николай, боюсь, что вашего плюса (если он ваш) я не заслужил, так как положительно я говорил только про ту часть, которую придумал Василий. А ваша реализация вызывает смешанные чувства. Сниппет лучше заменить. Например, на такой
if ($modx->user->isAuthenticated()) {
	// Сохранить название компании
	$modx->user->Profile->set('company_name',$companyName);
	$modx->user->save();
	// Получить название компании
	return $modx->user->Profile->get('company_name');
}
Правка ExtJs исходников решает задачу до первого обновления. Лучше сделать свой скрипт и подключать его используя вариант Григория.
Тогда это будет готовое решение.
я планирую использовать определенные поля для сортировки
Ну о данных планах в статье ничего не написано. Для хранения компании достаточно extended.
Конечно предложенный вариант расширения таблицы пользователей гораздо лучше, чем TV или extended.