[tvSuperSelect] 1.1.1 с новыми сниппетами для вывода
В новой версии tvSuperSelect у нас появилось 3 сниппета для вывода ресурсов/тикетов с тегами и списка тегов ресурса.
Сниппет tvssResources
Выводит ресурсы по тегу/тегам. Сниппет отдаёт все параметры в pdoFetch, поэтому можно указывать любые параметры pdoTools. Понимает Fenom, может работать с pdoPage.
Пример выборки ресурсов с тегами «tag1», «tag2», «tag3» прописанными в TV с ID 17 или 19:
{$_modx->runSnippet('pdoPage', [
'element' => 'tvssResources',
'tv' => '17,19',
'tag' => 'tag1||tag2||tag3',
'parents' => 0,
'tpl' => '@INLINE <div>{$id} - {$pagetitle}</div>',
])}
{$_modx->getPlaceholder('page.nav')}
Теги можно указать, как параметром в сниппет, так и в GET запросе в параметре tag. Сниппет перебивает указанный тег в GET запросе.Сниппет tvssTickets
Выводит тикеты компонента Tickets по тегу/тегам. Отдаёт все параметры в getTickets, поэтому можно указывать любые доступные параметры getTickets.
Пример выборки тикетов с тегами «tag1», «tag2», «tag3» прописанными в TV с ID 17 или 19:
{$_modx->runSnippet('pdoPage', [
'element' => 'tvssTickets',
'tv' => '17,19',
'tag' => 'tag1||tag2||tag3',
'parents' => 0,
])}
{$_modx->getPlaceholder('page.nav')}
Теги можно указать, как параметром в сниппет, так и в GET запросе в параметре tag. Сниппет перебивает указанный тег в GET запросе.Сниппет tvssTags
Выводит список тегов ресурса.
Пример вывода всех тегов из ТВ поля 17, указанных в ресурсе 1. В ссылке тега формируется УРЛ для ресурса 2, на котором располагается сниппет tvssResources:
{$_modx->runSnippet('tvssTags', [
'id' => $_modx->resource.id,
'tv' => 17,
'pageId' => 2,
])}
В список параметров также входит: tpl, tplWrapper, outputSeparator, toPlaceholder.Инструкция по созданию тегов на сайте
Внимание! Инструкция описана с использованием Fenom. Если на Вашем сайте он не используется
- После установки компонента создаём новое ТВ с типом tvSuperSelect. Запоминаем ID ТВшки. Например — 2.
- Создаём ресурс "Ресурсы с тегом". Запоминаем ID ресурса. В нашем случае — 2.
В longtitle прописываем:
Ресурсы с тегом{$.get['tag'] ? ' «'~($.get['tag']|unescape:"url")~'»' : ''}
- Контент для вывода списка ресурсов:
{if $.get['tag']?} <div id="pdopage"> <div class="rows"> {$_modx->runSnippet('pdoPage', [ 'element' => 'tvssResources', 'tv' => '2', 'parents' => 0, 'ajaxMode' => 'default', 'tpl' => '@INLINE <div>{$id} - {$pagetitle}</div>', ]) ?: 'Ресурсов по данному тегу не найдено'} </div> {$_modx->getPlaceholder('page.nav')} </div> {else} Укажите тег для выборки документов {/if}
- Контент для вывода списка тикетов:
{if $.get['tag']?} <div id="pdopage"> <div class="rows"> {$_modx->runSnippet('pdoPage', [ 'element' => 'tvssTickets', 'tv' => '2', 'parents' => 0, 'ajaxMode' => 'default', ]) ?: 'Тикетов по данному тегу не найдено'} </div> {$_modx->getPlaceholder('page.nav')} </div> {else} Укажите тег для выборки документов {/if}
- Контент для вывода списка ресурсов:
- В шаблоне (или чанке), в котором у Вас выводится полная статья или тикет, указываем вывод списка тегов:
{$_modx->runSnippet('tvssTags', [ 'id' => $_modx->resource.id, 'tv' => 2, 'pageId' => 2, ])}
Поблагодарить автора
Отправить деньги
Комментарии: 45
Сразу возникает вопрос, если tvssResources — сниппет, а не плагин, то его нужно где-то как-то вызывать? То есть при клике на тег тикета, автоматической перезагрузки страницы с выдачей выборки ресурсов по тегу не происходит?
То есть при клике на тег тикета, автоматической перезагрузки страницы с выдачей выборки ресурсов по тегу не происходит?Происходит.
Вызов данного сниппета я описал в посте.
Поясню.
1) На странице с ID 2 мы вызываем сниппет tvssResources:
{$_modx->runSnippet('pdoPage', [
'element' => 'tvssResources',
'tv' => '17',
'parents' => 0,
'tpl' => '@INLINE <div>{$id} - {$pagetitle}</div>',
])}
{$_modx->getPlaceholder('page.nav')}
Не забываем указать в параметре &tv — ID своего TV поля с тегами.2) На странице вывода информации о ресурсе вызываем сниппет tvssTags:
{$_modx->runSnippet('tvssTags', [
'id' => $_modx->resource.id,
'tv' => 17,
'pageId' => 2,
])}
Также, не забыв указать в параметр &tv и &pageId свои значения.
Со второго раза более-менее понял, спасибо)
Нужен мини-мануал какой-нибудь. Проще говоря, нужно заранее создать служебную страницу (в примере с id = 2), на которой будут выводиться результаты.
Пока сложно понять как будет работать с выбором нескольких тегов одновременно. То есть, кликнул на одном теге, вывело список аналогичных ресурсов, а там уже все-все теги и можно выбирать несколько или…
Короче, нужны скрины или короткое видео демонстрации работы, а еще лучше демка, на которой по этим тегам покликать можно =) Опробовать лично смогу только после переустановки modx ибо от моих экспериментов, он уже тупить начал (не работает часть системных коннекторов).
P.S.: Возможность указывать несколько tv очень радует) Если правильно понял, то можно несколько категорий тв сделать, чтобы визуально проще было, а сниппет будет обрабатывать все (к примеру, одна тв — города, а вторая — организации)
Нужен мини-мануал какой-нибудь. Проще говоря, нужно заранее создать служебную страницу (в примере с id = 2), на которой будут выводиться результаты.
Пока сложно понять как будет работать с выбором нескольких тегов одновременно. То есть, кликнул на одном теге, вывело список аналогичных ресурсов, а там уже все-все теги и можно выбирать несколько или…
Короче, нужны скрины или короткое видео демонстрации работы, а еще лучше демка, на которой по этим тегам покликать можно =) Опробовать лично смогу только после переустановки modx ибо от моих экспериментов, он уже тупить начал (не работает часть системных коннекторов).
P.S.: Возможность указывать несколько tv очень радует) Если правильно понял, то можно несколько категорий тв сделать, чтобы визуально проще было, а сниппет будет обрабатывать все (к примеру, одна тв — города, а вторая — организации)
Просто надо взять и попробовать примеры из поста — наглядно всё становится понятно…
Служебной страницы делать не вижу смысла, ибо это лишнее в данном компоненте. Вижу смысл сделать сниппет, который бы позволял указывать теги из фронта, через какую-то юзерскую форму. Но это в следующий раз.
Также, не вижу смысла в скриншотах (что скринить то?) и видео.
Служебной страницы делать не вижу смысла, ибо это лишнее в данном компоненте. Вижу смысл сделать сниппет, который бы позволял указывать теги из фронта, через какую-то юзерскую форму. Но это в следующий раз.
Также, не вижу смысла в скриншотах (что скринить то?) и видео.
Служебной страницы делать не вижу смыслаТогда я опять ничего не понял((
Компонент опробую сегодня-завтра, но что-то запутался. Вот есть у меня tv — tag, есть шаблон для поста на Tickets, в котором нужно вызвать tvssTags с указанным id тв для тегов, правильно?
Куда в таком случае вставлять tvssResources? На этой же странице?
Это я про внедрение служебной страницы в компонент из коробки. Тебе же нужно её создавать, т.к. без ресурса заточенного под эту функцию, ты не выведешь список ресурсов по определённому тегу.Служебной страницы делать не вижу смыслаТогда я опять ничего не понял((
а, фух)) про добавление страницы «в коробку» я не говорил. Тут ты разработчик, тебе и карты в руки. Просто не все с ходу разберутся как использовать компонент. Ладно, как опробую в работе, отпишусь о впечатлении. Лучше все своими руками пощупать
Написал инструкция по созданию тегов на сайте. Можешь прочитать выше.
Огромное спасибо)
У меня снова вопрос. Попробовал — работает с обычными ресурсами отлично. Можно ли подружить tvssResources с тикетами? Т.е. переделать getTickets + tvssResources (пусть называется, например tvssTickets).
Вот так работает, но естественно не доп.полей тикетов:
Вот так работает, но естественно не доп.полей тикетов:
[[!pdoPage@wmPages?
&element=`tvssResources`
&elementClass=`modSnippet`
&loadModels=`ms2gallery`
&tv=`2`
&parents=`12`
&hideContainers=`1`
&leftJoin=`{"500x": {
"class":"msResourceFile",
"alias":"500x",
"on": "500x.resource_id = modResource.id AND 500x.path LIKE '%/72x72/' AND 500x.rank=0"}}`
&select=`{"modResource":"*", "500x":"500x.url as 500x"}`
&tpl=`categoryPostTpl`]]
[[!+page.nav]]
Вот так хотелось бы чтобы работало:[[!pdoPage@wmPages?
&element=`tvssTickets`
&loadModels=`ms2gallery`
&tv=`2`
&parents=`12`
&tpl=`categoryPostTpl`
&hideContainers=`1`
&leftJoin=`{
"500x": {
"class":"msResourceFile",
"alias":"500x",
"on": "500x.resource_id = Ticket.id AND 500x.path LIKE '%/500x/' AND 500x.rank=0"},
"View": {"class": "TicketView","on": "Ticket.id = View.parent"}}`
&select=`{
"Ticket": "*",
"500x":"500x.url as 500x"}`
&groupby=`Ticket.id`
&sortby=`{"publishedon":"DESC"}`
]]
</div>
[[!+page.nav]]
Специально для тебя добавил tvssTickets. Обновляйся. Вызывать также, как и tvssResources. То есть, у сниппета есть свои параметры, а все остальные уйдут в getTickets.
Пример:
Пример:
{$_modx->runSnippet('pdoPage', [
'element' => 'tvssTickets',
'tv' => '17,19',
'parents' => 0,
])}
{$_modx->getPlaceholder('page.nav')}
Оперативно, эксклюзив) Прикрутил, работает отлично. Теперь, кажется, вопрос тегов решен. Планируются какие-то новые версии, функционал? Хотя мне кажется этого достаточно, компонент делает, то что от него нужно.
Отличный компонент!
Маленький вопрос. Указал ID страницы «Ресурсы с тегом», ссылка формируется с ее алиасом (у меня это tags) но не от корня, а от раздела, в котором лежит документ.
В настройках сайта у меня Схема URL link_tag_scheme abs
Или нужно только link_tag_scheme -1?
что бы формировались ссылки от корня, а не так:
Маленький вопрос. Указал ID страницы «Ресурсы с тегом», ссылка формируется с ее алиасом (у меня это tags) но не от корня, а от раздела, в котором лежит документ.
В настройках сайта у меня Схема URL link_tag_scheme abs
Или нужно только link_tag_scheme -1?
что бы формировались ссылки от корня, а не так:
site.tld/eksport/tags?tag=слово
PS может есть возможность указывать параметры формирования ссылки для снипета tvssTag?
Ок, я понял тебя, обновляйся)
О! и сразу стало веселее, а то к +link? $scheme=`abs` пробовал- не помогало))
к выше написанному
поменял Схема URL link_tag_scheme abs на -1, но формирование ссылки на страницу «Ресурсы с тегом» по прежнему идет от раздела документа, а не от корня.
ЧЯДНТ?
поменял Схема URL link_tag_scheme abs на -1, но формирование ссылки на страницу «Ресурсы с тегом» по прежнему идет от раздела документа, а не от корня.
ЧЯДНТ?
Я добавил в сниппет tvssTags параметр &scheme. Попробуй заюзать его, вот так например:
{$_modx->runSnippet('tvssTags', [
'id' => $_modx->resource.id,
'tv' => 2,
'pageId' => 2,
'scheme' => 'full',
])}
Спасибо за отличный компонент! Как можно вывести ВСЕ теги сайта? В секции тикетов, например. Или на той же странице «Ресурсы с тегом».
Упс. А вот этого я не предусмотрел. :) Какую информацию при выводе всех тегов надо передавать в чанки? Примерно представляю, что нужно передать плейсхолдер «Вес» и подставлять туда вес использования тега. Верно?
Можно просто список всех тегов. Можно еще подсчитать количество. Чтобы в скобках указать. По поводу веса, даже не знаю. Тоже можно, в принципе, может кому-то и понадобится.
Ещё не получилось посмотреть это?)
Нет. У меня загруз «по полной», что называется.
понимаю! аналогично)
Ещё не получилось реализовать возможность создания «облака тегов» с выводом со всего сайта?
Отличная вещь! Спасибо. Но у меня появилась маленькая проблемка. После установки в лог ModX'a падает ошибка:
74 строка
/core/cache/includes/elements/modsnippet/98.include.cache.php : 74) PHP warning: Illegal string offset ''
98 это сниппет tvssResources.74 строка
70 // Приведение параметра loadModels к нужному нам виду (JSON)
71 if (!$modx->fromJSON($scriptProperties['loadModels'])) {
72 $tmp_array = array_map('trim', explode(',', $scriptProperties['loadModels']));
73 foreach ($tmp_array as $v) {
74 $tmp[$v] = MODX_CORE_PATH.'components/'.strtolower($v).'/model/';
75 }
76 $scriptProperties['loadModels'] = $modx->toJSON($tmp);
77 }
Вызов для Ресурсы с тегом использовал из инструкции в посте.
Можно код сниппета, который вызываешь, глянуть?
Сам вызов:
{if $.get['tag']?}
<div id="pdopage">
<div class="rows">
{$_modx->runSnippet('pdoPage', [
'element' => 'tvssResources',
'tv' => '30',
'parents' => 0,
'ajaxMode' => 'default',
'tpl' => '@FILE tpl_shortstory.tpl',
]) ?: 'Ресурсов по данному тегу не найдено'}
</div>
{$_modx->getPlaceholder('page.nav')}
</div>
{else}
Укажите тег для выборки документов
{/if}
Сниппет (чтоб здесь простынку не выводить): pastebin.com/QSD6EDYt
Там можешь, пока обновление не выкатил, в tvssResources на 71 строке и в tvssTickets на 65, заменить на это:
if (!empty($scriptProperties['loadModels']) && !$modx->fromJSON($scriptProperties['loadModels'])) {
Заменил. Ошибки больше нет. Спасибо.
По какой-то неведомой причине не обрабатывается Fenom, хотя в настройках pdoTools он включен i.imgur.com/c3YXVZG.png
Выдает ошибку
Попробовал так, не завелось
Выдает ошибку
core/components/pdotools/model/pdotools/pdotools.class.php : 878) Unexpected tag 'i' in a08ea864bb1b3958113f1b8b756af368 line 166, near '{i[' <- there
На чанк вставил вызов из Инструкции (просто скопировал и заменил на свои ид тв и страницы){$_modx->runSnippet('tvssTags', [
'id' => $_modx->resource.id,
'tv' => 9,
'pageId' => 29,
])}
Ничего не заработало, тогда переделал на вот такой вид и теги стали выводиться[[!tvssTags?
&id=`[[*id]]`
&tv=`9`
&pageId=`29`
]]
А вот часть на странице вывода тегов самостоятельно переделать весь код из примеров на стандартный синтаксисне получается. Может сжалишься и покажешь как оно в стандарте будет?
Попробовал так, не завелось
[[!pdoPage?
&element=`tvssTickets`
&tv=`2`
&parents=`0`
&ajaxMode=`default`
]]
[[+page.nav]]
P.S.: Переустановить pdoTools пробовал, но все равно та же петрушка. Видимо дело в версии модекс (2.5.0rc1) или моей косорукости. <div id="pdopage">
<div class="rows">
[[pdoPage?
&element=`tvssTickets`
&tv=`2`
&parents=`0`
&ajaxMode=`default`
]]
</div>
[[!+page.nav]]
</div>
Так должно работать…P.S.: Зачем юзать на проекте dev версию MODX? Не думаешь, что от этого может не выводить?
Да так выводит, большое спасибо.
Зачем юзать на проекте dev версию MODX? Не думаешь, что от этого может не выводить?Подозреваю, что именно поэтому с Fenom начались проблемы. Проект пока не рабочий. Собственно, создаю страницы, шаблоны, тестирую, потом сохраняю Packman'ом. Контента там еще нет, только тестовые посты блога и страницы. В процессе работы часто ломается сайт по непонятной причине (для меня непонятной). В предыдущий раз, к примеру, воспользовался «закалкой» modx, потом обновил с 2.4.2 до 2.4.3 и появились проблемы после удаления Collections. Пока не собрал пакет с гит, админка не работала. Поэтому решил сразу на тестовую версию сесть. Если на rc будет работать, то на стабильной — тем более проблем быть не должно.
Столкнулся с такой проблемой, что при использовании pdoPage не отрабатывается ajax переход по страницам.
В response возврощает {«output»:"",«page»:1,«pagination»:"",«pages»:0,«total»:0}
Мог бы, пожалуйста, кто-нибудь помочь с данной проблемой.
В response возврощает {«output»:"",«page»:1,«pagination»:"",«pages»:0,«total»:0}
Мог бы, пожалуйста, кто-нибудь помочь с данной проблемой.
{if $.get['tag']?}
<div id="pdopage">
<div class="rows">
{$_modx->runSnippet('pdoPage', [
'element' => 'tvssResources',
'tv' => '6',
'parents' => 5,
'limit' => 3,
'ajaxMode' => 'default',
'sortby' => 'publishedon',
'hideContainers' => 1,
'sortdir' => 'DESC',
'includeTVs' => 'small_news_image',
'prepareTVs' => 1,
'tpl' => 'news_list.chnk',
'pageLimit' => 7,
'tplPageWrapper' => '@INLINE <div class="pagination"><ul class="pagination">{$prev}{$pages}{$next}</ul></div>',
'tplPage' => '@INLINE <li class="page_num num-{$pageNo}"><a href="{$href}">{$pageNo}</a></li>',
'tplPageActive' => '@INLINE <li class="page_num num-{$pageNo} active"><a href="{$href}">{$pageNo}</a></li>',
'tplPagePrev' => '@INLINE <li class="control prev"><a href="{$href}"></a></li>',
'tplPageNext' => '@INLINE <li class="control next"><a href="{$href}"></a></li>',
'tplPagePrevEmpty' => '@INLINE ',
'tplPageNextEmpty' => '@INLINE '
]) ?: 'Ресурсов по данному тегу не найдено'}
</div>
{$_modx->getPlaceholder('page.nav')}
</div>
{else}
Укажите тег для выборки документов
{/if}
Не работает в сочетании с minishop 2.4.6, точнее не сохраняется.
Обновляйтесь.
Подскажите как эту строку перевести на fenom
&where=`{«tags:LIKE»:"%[[!#GET.tag]]%"}`
&where=`{«tags:LIKE»:"%[[!#GET.tag]]%"}`
'where' => '{
"tags:LIKE": "%' ~ $.get.tag ~ '%"
}'
Cпасибо огромное
А инструкции по добавлению тегов с фронта ждать?
Похожие ресурсы по инструкции:
Apache2
MODX 2.5.8
Вот фрагмент кода:
Notice: Undefined variable: context in /mysite.com/core/cache/includes/elements/modsnippet/30.include.cache.php on line 16
Notice: Undefined index: tag in /mysite.com/core/cache/includes/elements/modsnippet/30.include.cache.php on line 17
Notice: Undefined index: tags in /mysite.com/core/cache/includes/elements/modsnippet/30.include.cache.php on line 17
не работает с PHP 5.6?Apache2
MODX 2.5.8
Вот фрагмент кода:
// Преобразуем список тегов в массив
if (is_string($tags)) {
$tags = explode('||', $tags);
}
Подскажите, (умоляю, нигде не могу найти!), как в строке адреса декодировать кириллический тег? Например, тег «важно» отображается так ?tag=%25D0%25B2%25D0%25B0%25D0%25B6%25D0%25BD%25D0%25BE
Это сообщение было удалено
Подскажите как к выводу tvssResources присоединить превью из ms2Galler?
Пробую так, но не выходит:
Пробую так, но не выходит:
{$_modx->runSnippet('tvssResources', [
'tv' => '29',
'tags' => $_modx->runSnippet('tvssTags', ['id' => $_modx->resource.id, 'tv' => '29', 'tpl' => '@INLINE [[+tag]]', 'outputSeparator' => '||']),
'parents' => 0,
'element' => 'ms2GalleryResources',
'typeOfJoin' => 'left',
'includeThumbs' => 'small, medium',
'resources' => -$_modx->resource.id,
'limit' => 20,
'sortby' => '{ "publishedon":"DESC" }',
'tvPrefix' => '',
'tpl' => 'tpl_blog_item_related',
])}
Остановился на таком варианте:
{$_modx->runSnippet('tvssResources', [
'tv' => '29',
'tags' => $_modx->runSnippet('tvssTags', ['id' => $_modx->resource.id, 'tv' => '29', 'tpl' => '@INLINE [[+tag]]', 'outputSeparator' => '||']),
'parents' => 25,
'resources' => -$_modx->resource.id,
'class' => 'modResource',
'loadModels' => 'ms2gallery',
'leftJoin' => [
'Image' => [
'class' => 'msResourceFile',
'on' => 'modResource.id = Image.resource_id AND Image.parent = 0',
],
'Medium' => [
'class' => 'msResourceFile',
'on' => 'Image.id = Medium.parent AND Medium.path LIKE "%medium%"',
],
'Small' => [
'class' => 'msResourceFile',
'on' => 'Image.id = Small.parent AND Small.path LIKE "%small%"',
]
],
'select' => [
'modResource' => '*',
'Medium' => 'Medium.url as medium',
'Small' => 'Small.url as small',
],
'limit' => 20,
'sortby' => '{ "publishedon":"DESC" }',
'tvPrefix' => '',
'tpl' => 'tpl_blog_item_related',
])}
Это норм, или есть вариант по лучше?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.