Разделы

  
 

просьба помочь с осмыслением работы плагинов

Решил вот в свободное время поднять скиллы в ModX и разобраться наконец с написанием плагинов.
Придумал себе такую задачу — сделать слайдер на одном сайте, но чтобы ссылки на картинки к нему брались с другого сайта (оба сайта мои, так что никакого хотлинкинга Ж) ). С самим куском пхп который парсит страницу и вырезает ссылки с адресом картинок разобралса быстро.
Идея такая, чтобы при очистке кеша на сайте срабатывал бы плагин, запихивающий ссылки в плейсхолдер или TV.
Но вот почемуто ничего он сохранять не хочет ни при OnCacheUpdate ни при любом другом событии.

Что я делаю не так? В сниппете все срабатывает как надо, но хочу понять почему плейсхолдеры не работают через плагин.

Как вывести значение переменной из сниппета в шаблон?

Есть сниппет:
<?php
$firstAlbum = '';
                    $i=0;
                    if(file_exists('gallery/images')) {
                        $files = array_slice(scandir('gallery/images'), 2);
                        if(count($files)) {
                            natcasesort($files);
                            foreach($files as $file) {
                                if($file != '.' && $file != '..') {
                                    if($i===0)
                                        $firstAlbum = $file;
                                    else
                                        echo "<li><a>$file</a></li>";
                                    ++$i;
                                }
                            }
                        }
                    }
?>


Нужно в шаблон вывести значение переменной $firstAlbum.
Пробовал добавлять в сниппет $modx->setPlaceholder('album', $firstAlbum); и выводить плейсхолдером [+album+], не получается.
  • -1
  • 2 октября 2010, 13:01
  • autogen
  • 6

PHX: Вырезание нужных плейсхолдеров

Есть у меня небольшой сниппет, который позволяет устанавливать плейсхолдер непосредственно в тексте документа/чанка/шаблона. Текст его таков:
<?
$modx->setPlaceholder($name,$value);
?>

но суть не в этом.

На сайте работает такеж плагин PHx. И какого было моё разочанование, когда я не смог использовать плейсхолдеры установленные с помощью данного сниппета.

После долгого копания в недрах, вышел я на PHx включив debug-режим (если кто не знал, у плагина такое есть). В результате в логах прочитал следующее:
44 [01:26:31] Cleaning unsolved tags:
brand
brand
collection_name

т.е. получается PHx взял и удалил мои теги, т.к. они по его мнению не используются. :( большой и толстый FAIL.

Ну ладно полез я в код PHx и решил закоментировать следующие строчки (63 строка плагина):
preg_match_all('~\[(\+|\*|\()([^:\+\[\]]+)([^\[\]]*?)((\1|\))\]~s', $template, $matches);
      if ($matches[0]) {
      $template = str_replace($matches[0], '', $template);
      $this->Log("Cleaning unsolved tags: \n" . implode("\n",$matches[2]) );
    }

отвечающие как раз этот самый эффект.
Всё заработало. Однако есть смутные сомнения, что это выражение вырезало различные бяки из вывода MODx, которые теперь будут периодически появлятся.
Вот вопрос состоит в том, что бы модифицировать регулярку так, чтобы оно удаляло всё что не нужно, но нормальные плейсхолдеры, TV-параметры не трогало.

Прошу помочь мне в этом. Спасибо.