Форум русской поддержки Joomla!® CMS
09.12.2016, 15:42:15 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Поиск и замена части тела страницы

 (Прочитано 184 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ksalab
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 11



« : 21.08.2016, 16:14:12 »

Пытаюсь сделать плагин (первый раз). Необходимо в определенное место страницы вывести определенный текст.
Но что-то не получается... Может кто подсказать?

В этом участке кода страницы:
Показать текстовый блок

необходимо вставить определенное сообщение.

Пытаюсь так:
Показать текстовый блок
Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3593


« Ответ #1 : 21.08.2016, 22:47:35 »

Используйте onContentPrepare вместо onContentAfterDisplay. Замену контента попробуйте так:
Код
$pattern='#<input((?<!h4).)*<h4>Рецензии</h4>#s';
$replacement='<input type="hidden" name="Itemid" value="101"/></form></div><p>Работает !</p></div></div><div class="clear"></div></div><div class="customer-reviews"><h4>Рецензии</h4>';
$html=preg_replace($pattern,$replacement,$html);
 
Записан
ksalab
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 11



« Ответ #2 : 23.08.2016, 14:27:20 »

сделал так:

Код
<?php
 
defined('_JEXEC') or die;
 
/**
* Plug-in to enable insert installment vars into content
*/

 
class plgVmimstallmentVmimstallment extends JPlugin
{
public function onContentPrepare($context, &$article, &$params, $page = 0)
{
//Проверка на админку
/*
$app = JFactory::getApplication();
if ($app->getName()!= 'site') {
return true;
}
*/

 
// Получаем кодовое слово из параметров
$varname = '</form>
 
</div>
 
 
 
   </div>
</div>
<div class="clear"></div>
 
 
   </div>
 
 
 
<div class="customer-reviews"> <h4>Рецензии</h4>'
;
// $varname = $this->params->get('varname');
 
//Получаем тело сайта
$html = JResponse::getBody();
 
// Если тегов нет
/*
if (strpos($html, $varname) === false)
{
return true;
}
*/

 
//Задаем шаблон поиска
$pattern = '#<input((?<!h4).)*<h4>Рецензии</h4>#s';
 
   $replacement='<input type="hidden" name="Itemid" value="101"/></form></div><p>Работает !</p></div></div><div class="clear"></div></div><div class="customer-reviews"><h4>Рецензии</h4>';
 
   $html=preg_replace($pattern,$replacement,$html);
 
   //Запихиваем всё обратно в тело
JResponse::setBody($html);
 
}
}
 

все равно не срабатывает ((( что я делаю не так?
Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3593


« Ответ #3 : 23.08.2016, 14:51:45 »

Если используете событие onContentPrepare, то нужно оперировать аргументом $article. При этом меняете только материал.
Если же хотите менять весь HTML перед выводом, то используйте onAfterRender.
Еще: $varname совершенно лишняя в вашей функции.
Записан
ksalab
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 11



« Ответ #4 : 23.08.2016, 16:36:58 »

Уже упростил максимально:
Код
<?php
 
defined('_JEXEC') or die;
 
/**
* Plug-in to enable insert installment vars into content
*/

 
class plgContentVMImstallment extends JPlugin
{
 protected $autoloadLanguage = true;
 
// public function onContentPrepare($context, &$row, &$params, $page = 0)
public function onContentAfterRender($context, &$row, &$params, $page = 0)
{
// Получаем кодовое слово из параметров
$varname = 'Рецензии';
$pattern = 'Work !';
 
$row->text = str_replace($varname, $pattern, $row->text);
 
}
 
}
 

на страницах с материалами все работает замечательно. но...
на страницах с магазином VirtueMart (описание товара) не работает (((
Записан
step-di
Осваиваюсь на форуме
***

Репутация: +4/-0
Offline Offline

Сообщений: 67


« Ответ #5 : 23.08.2016, 17:59:54 »

на страницах с материалами все работает замечательно. но...
на страницах с магазином VirtueMart (описание товара) не работает (((

в шаблоне товара в VirtueMart описание товара нужно вывести через конструкцию типа

echo JHTML::_('content.prepare',$out);

где $out - переменная, содержащая текст с описанием, можно заменить на ту переменную, которая выводит описание.

это заставит обрабатывать текст плагинами типа content
Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3593


« Ответ #6 : 24.08.2016, 00:12:41 »

Мда, зря я давал советы - вы все делаете наоборот. onContentAfterRender откуда выкопали?
Для начала почитайте здесь о Joomla-событиях и их параметрах.
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet