Василий Столейков

Василий Столейков

С нами с 19 декабря 2012; Место в рейтинге пользователей: #24
05 декабря 2015, 20:34
0
Точно такую же проблему встретил и в других местах:
1. При вызове чанка из плагина (тестировал на отправке писем, [[+pls]] работает, а феном-плейсхолдеры в любых вариантах — нет)
2. При вызове чанков в некоторых сниппетах. Например в чанках Office или HybridAuth. Феном конструкции работают, а вот плейсхолдеры типа [[+email]], [[+link]], [[+password]] и т.д. не хотят.

Например в чанке tpl.HybridAuth.provider не работают его теги, а теги Fenoma работают без проблем:
<!--
<a href="{$login_url}&provider={$title}" class="ha-icon {$provider}" rel="nofollow" title="{$title}">{$title}</a>
-->
{$provider}   -  не работает
{$_pls['provider']}   -  не работает
{$_modx->getPlaceholder('provider')}   -  не работает

{$_modx->config.site_name}   -  работает
Пришлось их оставить не переписывая, а всё что можно было — переписать.
03 декабря 2015, 09:21
0
Ага, точно. Девиз: выжать максимальную производительность! )))
02 декабря 2015, 21:22
0
Просто добавил всем новым полям в таблице префикс ext_ и изменил в скриптах.
Там кстати у меня есть скрипты на Ajax, в которых нужно прописывать значения параллельно и в базу и в тв, но делается это легко…
02 декабря 2015, 21:16
0
ага, только прийдётся… глюк работает исправно )))
02 декабря 2015, 21:15
0
Кстати, а ведь этот способ подойдёт и для сортировки и фильтрации extended-полей!
Надо будет потом попробовать…
02 декабря 2015, 21:01
0
… или скорее всего названия полей, потому что у меня кучи логики уже навешано на тв-шки…
02 декабря 2015, 21:00
0
Спасибо что предупредил. Прийдётся сменить названия тв-шек… ))
02 декабря 2015, 13:47
+1
Супер! Всё работает! Спасибо за своевременное решение!
Я перевёл сразу 6 самых ключевых тв-шек в таблицу ресурсов и всё работает! К тому же 2 из них в формате timestamp. Всё сохраняется правильно и работает исключительно!
Пример кода для timestamp
В
<?php
switch ($modx->event->name) {
	case 'OnMODXInit':
		// Загружаем поле vip_time в модель ресурса
		$modx->map['modResource']['fields']['vip_time'] = 0;
		$modx->map['modResource']['fieldMeta']['vip_time'] = array(
			'dbtype' => 'int',
			'precision' => 20,
			'phptype' => 'integer',
			'default' => 0,
		);
		break;
	case 'OnDocFormSave':
		// Сохраняем ТВ в поле таблицы ресурса
		$resource->vip_time = strtotime($resource->getTVValue('vip_time'));
		$resource->save();
	    break;
}
Сейчас буду думать как написать код для копирования уже существующих значений в таблицу…
02 декабря 2015, 12:43
0
Ага, а тебе за развитие идеи! Мне она тоже понравилась.
02 декабря 2015, 12:38
0
Классный вариант! Спасибо за него — похоже он прямо для меня!
02 декабря 2015, 10:59
0
Да, костыльный, но хотя бы рабочий, спасибо!
02 декабря 2015, 10:58
0
У меня у самого вчера уже мысли путались… Похоже чуть ниже Илья дал нужный ответ на мой вопрос.
02 декабря 2015, 00:47
0
Похоже это плагин на добавление в базу тв-шек при сохранении формы…
Но похоже это не выход. Сайт очень большой, в десятки тысяч ресурсов (тикетов). Представить даже страшно во что превратится таблица тв-шек если записывать в базу всем им необязательные тв-поля…
02 декабря 2015, 00:44
0
Нет, не хочет работать никак почему-то…
Статистика: 5 ресурсов с заполненным тв, остальные 128 с пустым. Не выбираются только 5 по условию выше хоть убей.

P.S. Да, я тоже так понимаю логику работы ТВ. Но в конкретном случае у меня не работает, убил уже не один час на это… Ладно, завтра на свежую голову может прийдёт ещё что-нибудь.
02 декабря 2015, 00:23
0
Сменил значение по умолчанию с 0 на пустое значение. Но вариант типа:
&where=`{ "moderation:!=" 1 }`
всё ещё не срабатывает, выводит 0 результатов, хотя их там немало.

Но, если у вас выставлено в настройках tv-поле значение по-умолчанию, то при создании ресурса с данным тв в базу данных данная запись не попадает.
А как теперь быть с уже созданными ресурсами, у которых тв moderation было по умолчанию? Вообще-то этот тв только недавно появился и был привязан к соответствующим шаблонам.
Получается что, нужно только сгенерировать как-то скриптом для всех нужных страниц запись тв-шки с пустым значением? Или есть ещё какой-то вариант?
27 ноября 2015, 12:33
0
Через полчаса смогу включить скайп и напишу вам.
27 ноября 2015, 10:31
+1
Действительно, я наверное подумаю потихоньку начать переносить лексиконы в настройки… Спасибо за здравую идею!
27 ноября 2015, 10:25
0
Разница в том, что лексикон нужно грузить, а настройки — нет, они сами загружаются при инициализации контекста и такой проблемы не будет.
Сайт делался до переписки на феном, и о отдельной загрузке лексиконов я и не подозревал, именно поэтому и записывал все свои лексиконы в core:default, т.к. он по умолчанию был загружен.

Ну и вообще, если нужно указывать 200 id страниц в настройках — что-то не так с этим сайтом.
Да, согласен, сайт весьма специфичен, и выкрутиться по другому не получилось — этого требовала логика сайта.

Спасибо, буду иметь ввиду на будущее!
27 ноября 2015, 10:22
0
Похоже ты прав, где-то у меня не загружаются лексиконы в цыферку…
Буду искать эти места на сайте, потому что ещё куча пустых значений в makeUrl() передаются, а это значит что не подставляется значение…

А насчёт link_contacts — это очень странно, т.к. он встречается только в одном месте на сайте и выводится правильно:
{var $link_contacts = $_modx->lexicon('link_contacts')}
<a href="{$_modx->makeUrl($link_contacts)}" class="active">
    {$_modx->runSnippet('pdoField',['id' => $link_contacts, 'field' => 'menutitle'])}
</a>
Может быть где-то не успевает подгрузиться… буду ещё проверять…
27 ноября 2015, 10:05
0
Интересно, хотя я в head всех страниц засунул загрузку лексикона
{$_modx->lexicon->load('core:default')}
и на сайте ссылки формируются нормально! Просто сайт большой, и на каких-то страницах наверное не подгружается. Мне наверное стоит лексикон загружать в каждом чанке где есть вызов лексиконов...

Ну и вообще, использовать лексикон для хранения системных настроек — свежее решение.
Не додумался сразу, классная мысль. Но дело в том, что сайт на 3-х языках, и структура сайта такая, что требует для каждого языка похожим страницам один id. И таких ссылок очень много, от 200 и выше. В процессе разработки мне было проще это в лексиконы забивать, просто представляю себе как бы мне нужно было бы бегать по контекстам и забивать туда в настройки то, что в лексиконах проще вбить. И как бы назывались эти системные настройки, так: [[++lexicon.page.id.118]]?