Пытаюсь написать плагин простейшей подстановки

Тема в разделе "Программирование", создана пользователем Vector, 11.10.2012.

  1. Offline

    Vector Недавно здесь

    Регистрация:
    11.10.2012
    Сообщения:
    2
    Симпатии:
    0
    Пол:
    Мужской
    Прошу не пинать ногами, я простой учитель истории, урвавший пару дней на каникулах для создания школьного сайта. Поставил Джумлу на бесплатном хостинге, стал навешивать примочки.
    Беда началась с того, что шаблон форума Kunena местами плохо сочетался с моим шаблоном сайта (напр., см. картинку: футер форума явно торчит, как 5-я нога). Кое-что удалось подхачить через CSS, но у некоторых элементов просто нет своего стиля (неясно вообще, откуда они берутся и как к ним подступиться). capture_kunena.jpg
    И вот я придумал гениальную :D вещь: когда Джумла уже вставила компонент "Форум" на страницу общего шаблона, но она ещё не отображена, надо изменить некоторые части текста HTML. Например, добавить в нужном месте стиль текста, задать div'у свойство display:none и т.п.
    Как я понял в итоге, надо написать плагин, который перед окончательной выдачей страницы будет вылавливать из неё некоторые строки HTML-текста и изменять их. (Какие строки отлавливать - я вроде бы могу заранее определить, в браузере через "Исходный код страницы" или с помощью DevTools).
    Вот что у меня получилось:
    Код (PHP):
    1. <?php
    2. defined( '_JEXEC' ) or die( 'Restricted access' );
    3. jimport( 'joomla.plugin.plugin' );
    4. class plgContentStringsubstitute extends JPlugin {
    5.     function plgContentStringsubstitute( &$subject, $params )
    6.     {
    7.         parent::__construct( $subject, $params );
    8.     }
    9.  
    10.     public function onBeforeDisplayContent( &$row, &$params, $page=0 )
    11.     {
    12.         global $mainframe;
    13.         $row->text = str_replace('"><a href="/forum/credits', '; font-color:#FAFAFA; font-size: .6em"><a href="/forum/credits', $row->text);
    14.         return '';
    15.     }
    16. }

    Имеется в виду, что с помощью str_replace находим одну строку
    Код (html):
    1. "><a href="/forum/credits

    и меняем на
    Код (html):
    1. ; font-color:#FAFAFA; font-size: .6em"><a href="/forum/credits
    , (так что к стилю данного DIV'а добавляется бледность и малый размер шрифта).

    Я загрузил и опубликовал этот плагин -
    Joomla! 2.5, PHP 5.2.14
    - должно бы работать?.. но изменений на сайте не видно.

    Пробовал onPrepareContent вместо onBeforeDisplayContent - не очень разбираюсь в этом - та же фигня!

    Очевидно, я что-то упускаю.
    Прошу прощения за нубовость, но всё же надеюсь на помощь уважаемого сообщества.
    Заранее благодарю!
     
    Последнее редактирование модератором: 25.11.2014
  2.  
  3. DKraev
    Offline

    DKraev <i>(aka gft)</i>

    Регистрация:
    16.08.2008
    Сообщения:
    1 627
    Симпатии:
    216
    Пол:
    Мужской
    Не нужно это... Нужно найти все-таки где кунена формирует данный файл и добавить стили.

    Приходите ко мне на поддержку, если хотите. Образовательные сайты, школы, УПК - 200 рублей в месяц. Размещение на хостинге, оплата домена, поддержка сайта включены в эту стоимость. Будет желание - пишите в личку.
     
  4. draff
    Offline

    draff Russian Joomla! Team Команда форума

    Регистрация:
    17.01.2011
    Сообщения:
    6 054
    Симпатии:
    520
    Пол:
    Мужской
    Хм,как бы разработчики Joomla уже предусмотрели переопределение вывода показа компонента,через создание и описание вывода в шаблоне сайта.Не знаю точно,ак с Kuhena,но обычно создал папку html в шаблоне,потом папку для компонента,типа /template/my_template/html/com_kuhena/views/default.php
    CSS для своего нового описания размещаешь там в же,в общей папке стилей шаблона.
     
  5. woojin
    Offline

    woojin Местный Команда форума

    Регистрация:
    31.05.2009
    Сообщения:
    3 209
    Симпатии:
    335
    Пол:
    Мужской
    лучше сделать как посоветовал DKraev
    а если не получается так, то пробовать как советует draff

    если и так уж не получается, тогда надо делать плагин системным и делать все изменения после формирования страницы, это событие onAfterRender
    и работать там уже надо не с каким то отдельным контентом, а с буфером вывода, класс JDocument, функции getBuffer и setBuffer
    тогда ты уже будешь искать во всей сформированной странице

    но всё же лучше найти где лежит шаблон КУНЕНЫ и исправить в нём;)
     
  6. Offline

    Vector Недавно здесь

    Регистрация:
    11.10.2012
    Сообщения:
    2
    Симпатии:
    0
    Пол:
    Мужской
    Спасибо, DKraev, draff, woojin!
    DKraev, пока я надеюсь, что поддержки хватит на общественных началах. Если удастся привлечь старшеклассников, им будет очень полезно участвовать в настоящем взрослом деле.
    А пока проблема в том, чтобы потихоньку разобраться и допилить красивый, с богатыми возможностями сайтец.

    DKraev, draff, я поковырял по вашим наколкам и обнаружил, что в com_cunena есть такой display.php, который выводит все компоненты. Но даже если его закомментить целиком, и выдаётся пустая страница, там всё равно гордо торчит копирайтная ссылка. Видимо, её генерацию специально хитро запрятали - от всяких вандалов вроде меня. :'(
    Код (PHP):
    1. <?php
    2. defined ( '_JEXEC' ) or die ();
    3. ?>
    4. <div id="Kunena" class="layout">
    5. <?php
    6. $this->displayMenu ();
    7. $this->displayLoginBox ();
    8. $this->displayBreadcrumb ();
    9.  
    10. // Display current view/layout
    11. $this->displayLayout();
    12.  
    13. $this->displayBreadcrumb ();
    14. $this->displayFooter ();
    15. ?>
    16. </div>


    Благодарю, попробую разобраться.

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

    woojin, спасибо, наконец, что-то проясняется!
    А то в разрозненной документации очень трудно разобраться, какие-то прыжки от разжёвывания модели Наблюдателей - сразу к сложным манипуляциям с базой данных. Гуманитарий фиг разберётся.

    Сейчас попробую.
    А кстати, нельзя ли это сделать вообще не в плагине, а в самом index.php - после того, как большая часть контента сформирована, сделать там, в общем случае, поиск и замену строки?

    Извиняюсь за, вероятно, глупый вопрос.

    Но, честно, гораздо приятнее стать специалистом, задав пару глупых вопросов и получив умные ответы - чем потратить месяц на штудирование учебников... и остаться с теми же глупыми вопросами...;P
     
  7. woojin
    Offline

    woojin Местный Команда форума

    Регистрация:
    31.05.2009
    Сообщения:
    3 209
    Симпатии:
    335
    Пол:
    Мужской
    в каком из многочисленных?

    у всего есть своя очерёдность обработки, и если сделать в корневом index.php, то ничего путного не выйдет, если сделать ещё в каком то то количество сформированной страницы будет разное

    так что лучше делать плагином и ставить ему порядок его работы самым последним (если посмотреть в список плагинов, то там есть какой то плагин с порядковым номером 1000, это и есть то само нужное тебе число, или где то рядом с ним)

    ЧД и УМ, там написано про порядок работы, т.е. что первым обрабатывается и что последним
     

Поделиться этой страницей

Загрузка...