Introtext вместо tv-параметра tags в TagLister

Здравствуйте. Помогите пожалуйста с одним вопросом. У меня в блоге ключевые слова (они же теги) всегда заполнялись в introtext. Я подключил tagLister для создания облака тегов, но работать он хочет только с tv-параметром.
Как заставить tagLister выводить в облако теги не из tv-параметра, а из introtext?
Эрадж Шамс
08 июня 2015, 20:03
modx.pro
1
1 635
0

Комментарии: 23

vlad
09 июня 2015, 10:38
0
А если не через taglister? если так [[+introtext]] или так[[*introtext]] — смотря где ты его хочешь вывести!!!
    Эрадж Шамс
    09 июня 2015, 11:10
    0
    Я не нашел адекватных аналогов tagLister, к сожалению.
    Вызов облака тегов такой: [[tagLister? &parent=`1` &tv=`tags` &sortBy=`tag` &target=`562` &limit=`50`]], а мне нужно вместо &tv=`tags` — &tv=`introtext`, но с introtext taglister не работает
      Воеводский Михаил
      09 июня 2015, 12:58
      0
      По всей видимости, без правки исходников не обойтись.
        Эрадж Шамс
        09 июня 2015, 17:13
        0
        Скорее всего да, только вот в какую сторону рыть не знаю ((
          Воеводский Михаил
          09 июня 2015, 17:14
          0
          Вечером посмотрю исходники, скажу.
            Эрадж Шамс
            09 июня 2015, 17:28
            0
            Ооо, буду очень признателен, потому что в php ни бум-бум
              Воеводский Михаил
              10 июня 2015, 02:32
              0
              Посмотрел — перепиливать основной сниппет нужно кардинально. Советом здесь не обойтись.
    Василий Столейков
    10 июня 2015, 07:35
    0
    Мне кажется проще написать скриптик, который перекинет значения introtext в какой-то тв!
      Воеводский Михаил
      10 июня 2015, 08:21
      0
      Идея правильная. Такой плагин пишется за 5-10 минут.
        Эрадж Шамс
        10 июня 2015, 12:11
        0
        Василий, Михаил, спасибо Вам за ответы. Тоже была идея перекинуть значения из introtext в tv-параметр, но опять же не знаю как(( Руками не очень хочется, так как займет дней 5 (около 600 страниц). Прошерстил форумы, но ответа не нашел(
          Воеводский Михаил
          10 июня 2015, 12:17
          0
          Кусок кода, перекидывающий значение 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();
          }
          Код не проверял, но должен быть рабочим.
            Эрадж Шамс
            10 июня 2015, 14:33
            0
            Спасибо большое, но может я что-то не правильно делаю. Как правильно вызвать плагин?
            Создал плагин 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();
            }
            А вот что делать дальше не знаю)
              Воеводский Михаил
              10 июня 2015, 14:44
              0
              С таким плагином произойдет большая печаль :)

              Если серьезно, этот кусок кода для однократного запуска — он переносит значения из introtext в TV для всех ресурсов сразу.

              Плагин надо повесить на событие OnDocFormSave. Его код:

              switch ($modx->event->name) {
              	case 'OnDocFormSave':
              		if ($resource->template == 3) {
              			$resource->setTVValue('tvtag', $resource->introtext);
              			$resource->save();
              		}
              		break;
              }
              Тоже не проверял.
                Максим Кузнецов
                10 июня 2015, 14:45
                0
                Необходимо создать плагин и включить его на событие OnDocFormSave.

                Код примерно такой:

                <?php
                	if ($modx->event->name == 'OnDocFormSave') {
                		if ($resource->get('template') == 'номер_шаблона' AND strlen($resource->get('introtext')) > 0) {
                			$resource->setTVValue('название_тв', $resource->get('introtext'));
                
                			$resource->save();
                		}
                
                	}
                  Эрадж Шамс
                  10 июня 2015, 15:12
                  0
                  Спасибо огромное, сработал:
                  switch ($modx->event->name) {
                  	case 'OnDocFormSave':
                  		if ($resource->template == 3) {
                  			$resource->setTVValue('tvtag', $resource->introtext);
                  			$resource->save();
                  		}
                  		break;
                  }
                  Только вот он переносит, если сохранить документ, а как сделать, чтобы он разом перенес во всех (около 600) документах?

                  А работает и код Михаила и код Максима, но опять же только если сохранить ресурс
                    Воеводский Михаил
                    10 июня 2015, 15:26
                    0
                    Ставите компонент Console и запускаете в нем код, который я написал изначально.
                      Эрадж Шамс
                      10 июня 2015, 15:26
                      0
                      Понял, уже делаю)
                        Эрадж Шамс
                        10 июня 2015, 15:41
                        0
                        Установил 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
                        С чем может быть связано?
                          Воеводский Михаил
                          10 июня 2015, 16:00
                          0
                          Напиши полный текст сообщения об ошибке. Навскидку код выглядит синтаксически правильным.
                            Эрадж Шамс
                            10 июня 2015, 17:27
                            0
                            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

                            Ну а дальше я не понимаю, что там)
                            Воеводский Михаил
                            10 июня 2015, 19:09
                            0
                            $q->where('template' => 4);
                            Замените на
                            $q->where(array('template' => 4));
                            Эрадж Шамс
                            10 июня 2015, 19:27
                            0
                            Да, все получилось. Спасибо Вам огромное, Михаил.
                            Для таких же неумех, как я):

                            Чтобы перенести значение из любого стандартного поля (типа 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

                            Спасибо еще раз, Вам, Михаил
                            Воеводский Михаил
                            10 июня 2015, 19:36
                            0
                            Рад, что получилось.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        23