[pdoTools] Версия 2.2 c модификаторами Fenom
Представляю вам новую версию pdoTools 2.2.0-pl, в которой вы можете задавать свои модификаторы для использования в Fenom.
Для этого придумана системная настройка pdotools_fenom_modifiers, в которой вы можете указать нужные сниппеты через запятую.
То, что указано в этой настройке, будет доступно глобально, для всех вызовов pdoTools. Также у вас есть возможность указать конкретные модификаторы для определённого вызова сниппета:
Вы также можете указывать свои параметры для модификаторов:
Все указанные сниппеты должны соответствовать требованиям фильтров MODX.
Второе изменение, это возможность указать порядок присоединения таблиц через &joinSequence. По умолчанию это
Выражаю большое спасибо гражданину Alexey Ch за эти изменения. Новая версия pdoTools уже в репозитории, можно обновляться.
Для этого придумана системная настройка pdotools_fenom_modifiers, в которой вы можете указать нужные сниппеты через запятую.
То, что указано в этой настройке, будет доступно глобально, для всех вызовов pdoTools. Также у вас есть возможность указать конкретные модификаторы для определённого вызова сниппета:
[[!pdoResources?
&parents=`0`
&fenomModifiers=`dateAgo`
&tpl=`@INLINE <p>{$id} - {$pagetitle} {$createdon | dateago}</p>`
]]
Как можно заметить, модификаторы указываются через |.Вы также можете указывать свои параметры для модификаторов:
[[!pdoResources?
&parents=`0`
&tpl=`@INLINE <p>{$id} - {$pagetitle} {$createdon | date_format:"%Y-%m-%d %H:%M:%S"}</p>`
]]
В данном примере используется встроенный в Fenom модификатор date_format. Вы можете использовать и другие.Все указанные сниппеты должны соответствовать требованиям фильтров MODX.
Второе изменение, это возможность указать порядок присоединения таблиц через &joinSequence. По умолчанию это
&joinSequence=`innerJoin,leftJoin,rightJoin`
но теперь вы можете указать и свой порядок.Выражаю большое спасибо гражданину Alexey Ch за эти изменения. Новая версия pdoTools уже в репозитории, можно обновляться.
Комментарии: 39
Спасибо за модификаторы! Теперь можно будет облегчить себе жизнь не вызывая их через вызов сниппета!
&joinSequence=`innerJojn,leftJojn,rightJoin`джуджин)))
Большое спасибо! еще было бы классно добавлять тэги, но это немного позже.
Спасибо, поправил!
joinSequenceБыло бы неплохо добавить туда же tvsJoin или всегда включать их первыми, потому что сейчас, если в одном из видов join-а (или только в left join до этого обновления) понадобится значение TV, join для этого TV-параметра придется дублировать самостоятельно, то есть писать
&leftJoin=`[{"class": "modTemplateVarResource", "alias": "CountryTv", "on": "modResource.id = CountryTv.contentid AND CountryTv.tmplvarid = 15"}, {"class": "modResource", "alias": "CountryResource", "on": "CountryResource.id = CountryTv.value"}]`
вместо&leftJoin=`[{"class": "modResource", "alias": "CountryResource", "on": "CountryResource.id = TVcountry.value"}]`
Превосходно, Василий! Будет ли возможность указывать наборы параметров для модификатора, если он сниппет?
Нет, у модификаторов, вроде, не указывают наборы параметров.
Если это нужно, их всегда можно вызвать через runSnippet и так уже указать.
Если это нужно, их всегда можно вызвать через runSnippet и так уже указать.
Подскажите, как указать значение параметра dateFormat=`d F Y` у dateAgo вот при таком использовании в шаблоне:
{$_modx->runSnippet('pdoResources',[
'tpl' => '@INLINE <div><a href="{$uri}">{$pagetitle}</a></div>
<span>{$publishedon | dateago}
',
])}
Василий, подскажи, как использовать параметры Fenom и модификаторы на странице, к которой они непосредственно относятся?
В чанке [[+pagetitle]] заменяется на {$pagetitle}, [[+createdon:dateago]] на {$createdon | dateago}.
А как заменить [[*pagetitle]]?
В чанке [[+pagetitle]] заменяется на {$pagetitle}, [[+createdon:dateago]] на {$createdon | dateago}.
А как заменить [[*pagetitle]]?
Да, на хабре прочёл ту же информацию. Попробовал.
Вот так работает {$_modx->resource.pagetitle}, а вот так уже выдаёт ошибку {$_modx->resource.createdon | dateago}. Что не правильно делаю?
Вот так работает {$_modx->resource.pagetitle}, а вот так уже выдаёт ошибку {$_modx->resource.createdon | dateago}. Что не правильно делаю?
Что не правильно делаю?Не читаешь статью, к которой оставляешь комментарии.
Там ведь сказано, что есть системная настройка pdotools_fenom_modifiers, в которой нужно указать все сниппеты-модификаторы, которые должны быть доступны глобально.
Учитывая, что я вообще не могу понять о чём речь, а ты не можешь показать работающую реализацию этой гениальной идеи — очень трудоёмко.
Понимаю тебя. Постараюсь объяснить может тебя тоже заинтересует.
Речь о том, чтобы расклад страниц был по возможности статичен, т.е. 1-ая сформированная страница, так и оставалась под номером 1, а каждая последующая (по мере роста контента выдачи) имела номер (и соответственно адрес), приращеённый на единицу. Таким образом обычно у нас пагинация выглядит 1 2 3 4 5, а предполагается 5 4 3 2 1. По логике 5-ая страница появилась самой последней, но она впереди, так как это самый свежий контент на данный момент.
Вот попытался. Что скажешь?
Речь о том, чтобы расклад страниц был по возможности статичен, т.е. 1-ая сформированная страница, так и оставалась под номером 1, а каждая последующая (по мере роста контента выдачи) имела номер (и соответственно адрес), приращеённый на единицу. Таким образом обычно у нас пагинация выглядит 1 2 3 4 5, а предполагается 5 4 3 2 1. По логике 5-ая страница появилась самой последней, но она впереди, так как это самый свежий контент на данный момент.
Вот попытался. Что скажешь?
Скажу, чтобы ты показал работающий пример на каком-нибудь популярном сайте.
Сейчас читаю комментарии на vc.ru и там нет «вау, как круто, давайте так делать везде». Скорее даже наоборот.
Сейчас читаю комментарии на vc.ru и там нет «вау, как круто, давайте так делать везде». Скорее даже наоборот.
Согласен с тобой, специфичное желание. Такого тоже не видел, но у себя ленту организовал бы таким вот образом. Я думаю проверить в боевых условиях. Пользователь скажет своё слово.
Во всяком случае для себя, как пользователю всевозможных лент (новостей, статей), хотелось бы знать, где остановился в прошлый раз, чтобы не искать по дате. Запомнил номер страницы и всё, она не изменилась, конечно если не поменяли количество вывода на странице.
А какие там аргументы против?
И сколько стоит такая реализация? Может после Нового года решусь?
Во всяком случае для себя, как пользователю всевозможных лент (новостей, статей), хотелось бы знать, где остановился в прошлый раз, чтобы не искать по дате. Запомнил номер страницы и всё, она не изменилась, конечно если не поменяли количество вывода на странице.
А какие там аргументы против?
И сколько стоит такая реализация? Может после Нового года решусь?
Нисколько не стоит, потому что заказы я не беру, и еще долго брать не буду.
Если этот способ навигации наберёт популярность, то рано или поздно добавлю сам, бесплатно.
Если этот способ навигации наберёт популярность, то рано или поздно добавлю сам, бесплатно.
Спасибо за беседу, Василий!
Ну, что же может сами начнём менять вкусы, а? Станем новаторами :)
С наступающим, Новым годом тебя!
Ну, что же может сами начнём менять вкусы, а? Станем новаторами :)
С наступающим, Новым годом тебя!
Я бы с удовольствием, но сначала нужно выполнить все взятые на себя обязательства.
По моим прикидкам, это где-то середина 2016.
По моим прикидкам, это где-то середина 2016.
Что мешает выставить обратный порядок сортировки для сниппета, оберткой которого является pdoPage?
Ничего, тут речь именно про циферки.
Идею я, вроде бы, понял. Но не уверен, что она приживётся и будет понятна людям. А времени делать «чтобы было» сейчас нет.
Поэтому, отложим пока эту мысль в сторонку и понаблюдаем за спросом.
Идею я, вроде бы, понял. Но не уверен, что она приживётся и будет понятна людям. А времени делать «чтобы было» сейчас нет.
Поэтому, отложим пока эту мысль в сторонку и понаблюдаем за спросом.
Я идею тоже понял. Но, покуда, задача последнюю страницу сделать первой, то меняется только порядок сортировки. А в таком варианте это задача уже не совсем к pdoPage.
Если, например, выставить сортировку от самых старых к самым новым, старые всегда будут на первой странице. Разве нет?
Если, например, выставить сортировку от самых старых к самым новым, старые всегда будут на первой странице. Разве нет?
Еще раз, речь про циферки. Не 1,2,3,4,5, а 5,4,3,2,1.
Типа зашел сегодня и увидел страницу 5, зашел завтра — уже 6. И с неё стартуешь, отматывая к 1. Если остановился на 3, то там и продолжишь потом читать, ничего не изменится, просто добавятся страницы 7 и 8 через пару дней.
В теории, вроде бы, всё хорошо. Однако неясно, почему так никто не делает.
Типа зашел сегодня и увидел страницу 5, зашел завтра — уже 6. И с неё стартуешь, отматывая к 1. Если остановился на 3, то там и продолжишь потом читать, ничего не изменится, просто добавятся страницы 7 и 8 через пару дней.
В теории, вроде бы, всё хорошо. Однако неясно, почему так никто не делает.
По идее для ПС должно быть лучше… точнее даже для пользователей… постоянно один контент на страницах, а то до сих пор в выдаче бывает такое, что система ссылается на страницу сайта, а тот пост с искомой информацией уже на следующей странице.
отложим пока эту мысль в сторонку и понаблюдаем за спросом.Я и Георгий (высказавший просьбу) = двое уже. Кто ещё?)
Поддерживаю, задумка интересна и на мой взгляд, удобна для поиска информации и пользователем, и поисковиком.
Я сейчас закрываю для индексации страницы с 2...n, контент на них все время меняется, пользователь приходит из поиска, а информации уже нет, она на другой странице, получите-распишитесь отказ. Много отказов, значит пользователи не нашли нужной информации у вас и в следующий раз поисковик не покажет ваш сайт.
Не часто, но бывает, сам попадаю в туже ситуацию, что либо ищешь попадаешь из поисковика на страницу где ответа уже нет.
Я сейчас закрываю для индексации страницы с 2...n, контент на них все время меняется, пользователь приходит из поиска, а информации уже нет, она на другой странице, получите-распишитесь отказ. Много отказов, значит пользователи не нашли нужной информации у вас и в следующий раз поисковик не покажет ваш сайт.
Не часто, но бывает, сам попадаю в туже ситуацию, что либо ищешь попадаешь из поисковика на страницу где ответа уже нет.
Василий, подскажи, пожалуйста
добавил в вызове модификатор rezimgcrop, указал ему соответствующие параметры:
modsnippet/34 — снипет rezimgcrop
Неправильно указываю параметры?
добавил в вызове модификатор rezimgcrop, указал ему соответствующие параметры:
[[pdoResources?
&includeTVs=`video_image,video_videoId,video`
&limit=`0`
&fenomModifiers=`rezimgcrop`
&tpl=`@INLINE <div class="item"><img src="{$_modx->resource.video_image | rezimgcrop:"r-640x360"}"/></div>`
&parents=`123`
]]
но не обрезает картинку (т.е. вообще не выводит с модификатором), ошибка: (ERROR @ /home/s1161/www/core/cache/includes/elements/modsnippet/34.include.cache.php: 29) PHP warning: copy(): The first argument to copy() function cannot be a directorymodsnippet/34 — снипет rezimgcrop
Неправильно указываю параметры?
The first argument to copy() function cannot be a directoryЯндекс говорит
Первый аргумент скопировать() функция не может быть каталогомМожет, в $_modx->resource.video_image что-то не то?
$_modx->resource.video_image — без модификатора все ок, картинку из тивишки выводит
Я думал, rezimgcrop же создает папку, куда кидает обрезанные картинки, может не может создать?
Я думал, rezimgcrop же создает папку, куда кидает обрезанные картинки, может не может создать?
Ни малейшего понятия, как он работает.
Коллеги, нужна помощь. Не хотят нормально работать встроенные модификаторы Fenom. Работают только для строк. Вот так
{var $p = 'low'} {$p | upper }
работает, а любые вариации на тему{var $p = $_modx->resource.pagetitle} {$p | upper}
нет. Что я делаю не так? Если я правильно понимаю, то встроенные модификаторы в настройку прописывать не нужно (если прописать все равно не работает).
strtoupper() и strtolower() не понимают кирилицу.
Нужно написать свои модификаторы с mb_strtoupper() и mb_strtolower(), указать их в pdotools_fenom_modifiers и использовать в чанках — всё будет ок.
Нужно написать свои модификаторы с mb_strtoupper() и mb_strtolower(), указать их в pdotools_fenom_modifiers и использовать в чанках — всё будет ок.
Спасибо!
Почему-то не хочет работать такая конструкция
[[!pdoResources?
&parents=`0`
&tpl=`@INLINE <p>{$id} - {$pagetitle} {$createdon}</p>`
]]
Все переменные выводятся пустые. Версия pdoTools последняя. Все разрешения включены. Проблема только с INLINE чанком. Если указать обычный чанк с таким же содержимым, то всё работает.
там вроде {{id}} или {{$id}}
кстати, а ведь недавно точно работало, а сейчас только так
{$_modx->runSnippet('!pdoResources', [
'parents' => 0,
'tpl' => '@INLINE <p> {$id} - {$pagetitle} {$createdon}</p>',
])}
Все разрешения включены.Ну так и теги Fenom, наверное, парсятся перед вызовом сниппета на странице, как думаешь?
Подскажите пожалуйста
есть модель
пробовал
Так делать как бы не очень выход, потому что мало ли в чанке используются другие поля, я то понимаю, что если надо в select дописать, а вот другой может не понять.
есть модель
<?xml version="1.0" encoding="UTF-8"?>
<model package="translator" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" phpdoc-package="translator" version="1.1">
<object class="trItem" extends="modResource">
<field key="translations" dbtype="text" phptype="text" null="true" default=""/>
</object>
</model>
Как сделать так чтобы в чанках допустим pdoResource или pdoMenu, поле translations выводилось как плейсхолдер?пробовал
[[!pdoMenu?
&parents=`0`
&select=`{"modResource":"*"}`
&tpl=`tpl.trans.item`
]]
Работает, но при этом подключается content, хотелось бы узнать решение чтобы к выборке добавлялось только поле translations Так делать как бы не очень выход, потому что мало ли в чанке используются другие поля, я то понимаю, что если надо в select дописать, а вот другой может не понять.
&select=`{"modResource":"id,pagetitle,translations "}`
есть ли какое либо изящное решение?
блин, сразу забыл написать
Почему при использование prepareSnippet в pdoMenu, не обрабатывает первую запись??
joxi.ru/Vm65XJLTxOw59r
joxi.ru/Dr8WkgZIkxQ3vA
код сниппета
Почему при использование prepareSnippet в pdoMenu, не обрабатывает первую запись??
joxi.ru/Vm65XJLTxOw59r
[[!pdoMenu?
&parents=`0`
&prepareSnippet=`trRes`
]]
Пробовал такое в pdoResources, там все окjoxi.ru/Dr8WkgZIkxQ3vA
код сниппета
$row['menutitle'] = 'newTitle / '.$id;
//$row['pagetitle'] = 'newTitle / '.$id;
return serialize($row);
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.