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

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

С нами с 31 января 2013; Место в рейтинге пользователей: #3
Сергей Шлоков
05 апреля 2016, 20:48
0
Все-таки вам нужна система онлайн записи. Это своя специфика — более строгое подтверждение записи, смс уведомления, бронирование услуги с привязкой мастера, другие интерфейсы.
Сергей Шлоков
04 апреля 2016, 22:32
0
Таблица же останется. Нужно запомнить настройки. И чанки потом в категорию Tickets запихать, потому как после удаления они в корень съедут.
Главное, бэкап сделать.
Сергей Шлоков
04 апреля 2016, 22:22
0
Ну у меня таких ошибок нет. Значит проблема на в тикетс. Кроме того, судя по логу, в инсёрте не хватает поля guest_key, из за которого и ругается mySql. Попробуй удалить и поставить заново.
Сергей Шлоков
04 апреля 2016, 19:37
0
В твоем случае вообще нет смысла включать уведомление хоть на почту, хоть в скайп, хоть куда. Зачем тебе в скайте эти мегабайты?
Надо сначала решить проблему. Для начала обновить тикетс.
Сергей Шлоков
03 апреля 2016, 15:17
+1
а выводятся и 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, точно не помню).
Сергей Шлоков
03 апреля 2016, 11:19
+1
Интересный поворот событий.
Сергей Шлоков
03 апреля 2016, 11:04
+1
&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. Советую его использовать при отладке.
Сергей Шлоков
03 апреля 2016, 10:16
0
Сделал, как посоветовал Илья. Повесил регистрацию js на OnDocFormPrerender
А разве в плагине в третье строчке не это событие указано?
Сергей Шлоков
03 апреля 2016, 10:12
0
Не успел, ниже уже ответили.
Событие OnManagerPageBeforeRender будет регистрировать скрипт для любого объекта (ресурса, чанка, сниппета), а нужно только для ресурса. Тут подойдет событие OnDocFormPrerender.
В примере моего плагина 2 javacript события — beforeSubmit и success. Если задействовать первое, то второе не нужно. Потому что, во-первых, изменения уже видны в интерфейсе (обновлять страницу не нужно) и, во-вторых, новые значения запишутся в базу (не надо их ловить в OnDocFormSave). Для знатоков яваскрипт не составит труда обработать и ТВшки. Этот вариант более интерактивный.
Ну а если таких знаний не хватает, то подойдет вариант ниже — в OnDocFormSave (можно в OnBeforeDocFormSave) меняются значения ТВ, а в яваскрипте, подключенным в OnDocFormPrerender, обновляется страница. Этот вариант проще.
Сергей Шлоков
02 апреля 2016, 13:14
1
0
Ну и наворочено. Не уверен, что пример рабочий. Вот простейший рабочий вариант с примером изменения поля
<?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;
}
Сергей Шлоков
01 апреля 2016, 18:27
+1
Интересно, многие ли знают как расшифровывается MODX?
Сергей Шлоков
01 апреля 2016, 17:55
+5
Согласен. Нельзяограничиватьтворческихлюдей. Вотувасимянаписаносмаленькойбуквывопрекиправиламрусскогоязыка. НонадеюсьвынеобидитесьеслияназовувасАндрей. ;)
П.С.Мнепростоленьписатьпробелы.
Сергей Шлоков
31 марта 2016, 22:06
0
Тут в основном революционеры. Вот явка протестантов.
Сергей Шлоков
31 марта 2016, 17:34
+1
А, понятно. Тут только один вариант, засунуть адрес в плейсхолдер в шаблоне.
'tpl' => '@INLINE
	{set $dlink = $uri}
	{$_modx->setPlaceholder("dlink", $uri)}
	<div class="image-fixed-fill" style="background-image: url([[+1920x1080]]);"></div>
',
Сергей Шлоков
31 марта 2016, 16:39
0
Если утюгом погреть страницу про pdoTools, то можно заметить написанную молоком инструкцию.
Последнее обновление позволяет сделать это так
{$_modx->resource.id | url}
Сергей Шлоков
31 марта 2016, 10:11
0
Тогда остается такой вариант
case xPDOTransport::ACTION_UNINSTALL:
      $c = $modx->prepare('DROP TABLE modx_****');
      $c->execute();
      break;
Сергей Шлоков
31 марта 2016, 09:25
0
Странно, у меня работало без ошибок. Проверим.
Можете сделать проще.
// Поменяйте 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();
    ...