Introtext вместо tv-параметра tags в TagLister
Здравствуйте. Помогите пожалуйста с одним вопросом. У меня в блоге ключевые слова (они же теги) всегда заполнялись в introtext. Я подключил tagLister для создания облака тегов, но работать он хочет только с tv-параметром.
Как заставить tagLister выводить в облако теги не из tv-параметра, а из introtext?
Как заставить tagLister выводить в облако теги не из tv-параметра, а из introtext?
Комментарии: 23
А если не через taglister? если так [[+introtext]] или так[[*introtext]] — смотря где ты его хочешь вывести!!!
Я не нашел адекватных аналогов tagLister, к сожалению.
Вызов облака тегов такой: [[tagLister? &parent=`1` &tv=`tags` &sortBy=`tag` &target=`562` &limit=`50`]], а мне нужно вместо &tv=`tags` — &tv=`introtext`, но с introtext taglister не работает
Вызов облака тегов такой: [[tagLister? &parent=`1` &tv=`tags` &sortBy=`tag` &target=`562` &limit=`50`]], а мне нужно вместо &tv=`tags` — &tv=`introtext`, но с introtext taglister не работает
По всей видимости, без правки исходников не обойтись.
Скорее всего да, только вот в какую сторону рыть не знаю ((
Вечером посмотрю исходники, скажу.
Ооо, буду очень признателен, потому что в php ни бум-бум
Посмотрел — перепиливать основной сниппет нужно кардинально. Советом здесь не обойтись.
Мне кажется проще написать скриптик, который перекинет значения introtext в какой-то тв!
Идея правильная. Такой плагин пишется за 5-10 минут.
Василий, Михаил, спасибо Вам за ответы. Тоже была идея перекинуть значения из introtext в tv-параметр, но опять же не знаю как(( Руками не очень хочется, так как займет дней 5 (около 600 страниц). Прошерстил форумы, но ответа не нашел(
Кусок кода, перекидывающий значение introtext в TV:
$q = $modx->newQuery('modResource');
// Дальше несколько строк с критериями для выборки ресурсов. Например, ресурсы с шаблоном 2
$q->where('template' => 2);
$resources = $modx->getIterator('modResource', $q);
foreach ($resources as $resource) {
$resource->setTVValue('tvtag', $resource->introtext);
$resource->save();
}
Код не проверял, но должен быть рабочим.
Спасибо большое, но может я что-то не правильно делаю. Как правильно вызвать плагин?
Создал плагин perenos с кодом:
Создал плагин perenos с кодом:
<?php
$q = $modx->newQuery('modResource');
// Дальше несколько строк с критериями для выборки ресурсов. Например, ресурсы с шаблоном 2
$q->where('template' => 4);
$resources = $modx->getIterator('modResource', $q);
foreach ($resources as $resource) {
$resource->setTVValue('tags', $resource->introtext);
$resource->save();
}
А вот что делать дальше не знаю)
С таким плагином произойдет большая печаль :)
Если серьезно, этот кусок кода для однократного запуска — он переносит значения из introtext в TV для всех ресурсов сразу.
Плагин надо повесить на событие OnDocFormSave. Его код:
Если серьезно, этот кусок кода для однократного запуска — он переносит значения из introtext в TV для всех ресурсов сразу.
Плагин надо повесить на событие OnDocFormSave. Его код:
switch ($modx->event->name) {
case 'OnDocFormSave':
if ($resource->template == 3) {
$resource->setTVValue('tvtag', $resource->introtext);
$resource->save();
}
break;
}
Тоже не проверял.
Необходимо создать плагин и включить его на событие OnDocFormSave.
Код примерно такой:
Код примерно такой:
<?php
if ($modx->event->name == 'OnDocFormSave') {
if ($resource->get('template') == 'номер_шаблона' AND strlen($resource->get('introtext')) > 0) {
$resource->setTVValue('название_тв', $resource->get('introtext'));
$resource->save();
}
}
Спасибо огромное, сработал:
А работает и код Михаила и код Максима, но опять же только если сохранить ресурс
switch ($modx->event->name) {
case 'OnDocFormSave':
if ($resource->template == 3) {
$resource->setTVValue('tvtag', $resource->introtext);
$resource->save();
}
break;
}
Только вот он переносит, если сохранить документ, а как сделать, чтобы он разом перенес во всех (около 600) документах?А работает и код Михаила и код Максима, но опять же только если сохранить ресурс
Ставите компонент Console и запускаете в нем код, который я написал изначально.
Понял, уже делаю)
Установил Console, выполнил код:
<?php
$q = $modx->newQuery('modResource');
// Дальше несколько строк с критериями для выборки ресурсов. Например, ресурсы с шаблоном 2
$q->where('template' => 4);
$resources = $modx->getIterator('modResource', $q);
foreach ($resources as $resource) {
$resource->setTVValue('tags', $resource->introtext);
$resource->save();
}
Но выходит ошибка: Parse error: syntax error, unexpected T_DOUBLE_ARROW in
С чем может быть связано?
<?php
$q = $modx->newQuery('modResource');
// Дальше несколько строк с критериями для выборки ресурсов. Например, ресурсы с шаблоном 2
$q->where('template' => 4);
$resources = $modx->getIterator('modResource', $q);
foreach ($resources as $resource) {
$resource->setTVValue('tags', $resource->introtext);
$resource->save();
}
Но выходит ошибка: Parse error: syntax error, unexpected T_DOUBLE_ARROW in
С чем может быть связано?
Напиши полный текст сообщения об ошибке. Навскидку код выглядит синтаксически правильным.
Parse error: syntax error, unexpected T_DOUBLE_ARROW in /home/p165562/www/bayguzin.ru/core/components/console/processors/exec.class.php(21): eval()'d code on line 4
Ну а дальше я не понимаю, что там)
Ну а дальше я не понимаю, что там)
$q->where('template' => 4);
Замените на $q->where(array('template' => 4));
Да, все получилось. Спасибо Вам огромное, Михаил.
Для таких же неумех, как я):
Чтобы перенести значение из любого стандартного поля (типа introtext, longtitle, pagetitle и так далее) в tv-параметр нужно:
1. Зайти в репозиторий, скачать и установить дополнение «Console»
2. Зайти в Приложения/«Console» и выполнить следующий скрипт:
4 — шаблон, к которому привязан tv-параметр tags
tags — tv-параметр, в который нужно перенести значения из introtext (или любого другого стандартного поля)
introtext — поле, из которого переносится значение в tv-параметр tags
Спасибо еще раз, Вам, Михаил
Для таких же неумех, как я):
Чтобы перенести значение из любого стандартного поля (типа introtext, longtitle, pagetitle и так далее) в tv-параметр нужно:
1. Зайти в репозиторий, скачать и установить дополнение «Console»
2. Зайти в Приложения/«Console» и выполнить следующий скрипт:
<?php
$q = $modx->newQuery('modResource');
// Дальше несколько строк с критериями для выборки ресурсов. Например, ресурсы с шаблоном 4
$q->where(array('template' => 4));
$resources = $modx->getIterator('modResource', $q);
foreach ($resources as $resource) {
$resource->setTVValue('tags', $resource->introtext);
$resource->save();
}
где4 — шаблон, к которому привязан tv-параметр tags
tags — tv-параметр, в который нужно перенести значения из introtext (или любого другого стандартного поля)
introtext — поле, из которого переносится значение в tv-параметр tags
Спасибо еще раз, Вам, Михаил
Рад, что получилось.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.