Новости Joomla

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

👩‍💻 Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод triggerEvent(), с помощью которого раньше вызывались события для плагинов. Теперь чтобы в своём коде вызвать событие для плагина и получить от него результаты нужно:- создать объект класса события- передать в него параметры

use Joomla\CMS\Event\AbstractEvent;use Joomla\CMS\Factory;use Joomla\CMS\Plugin\PluginHelper;// Грузим плагины нужных группPluginHelper::importPlugin('system');// Создаём объект события$event = AbstractEvent::create('onAfterInitUniverse', [    'subject' => $this,    'data'    => $data, // какие-то данные    'article' => $article, // ещё материал вдовесок    'product' => $product, // и товаров подвезли]);// Триггерим событиеFactory::getApplication()->getDispatcher()->dispatch(    $event->getName(), // Тут можно строку передать 'onAfterInitUniverse'    $event);// Получаем результаты// В случае с AbstractEvent это может быть не 'result',// а что-то ещё - куда сами отдадите данные.// 2-й аргумент - значение по умолчанию, // если не получены результаты$results = $event->getArgument('result', []);
Плюсы такого подхода - вам не нужно запоминать порядок аргументов и проверять их наличие. Если вы написали свой класс события, то в плагине можно получать аргументы с помощью методов $event->getArticle(), $event->getData(), $event->getProduct() и подобными - реализуете сами под свои нужды. Если такой класс события написали, то создаёте экземпляр своего класса события и укажите его явно в аргументе eventClass
use Joomla\Component\MyComponent\Administrator\Event\MyCoolEvent;$event = MyCoolEvent::create('onAfterInitUniverse', [    'subject'    => $this,    'eventClass' => MyCoolEvent::class, // ваш класс события    'data'       => $data, // какие-то данные    'article'    => $article, // ещё материал вдовесок    'product'    => $product, // и товаров подвезли]);
Ожидаемо, что класс вашего события будет расширять AbsractEvent или другие классы событий Joomla.🙁 Есть неприятный нюанс - нельзя просто так вызывать событие и ничего не передать в аргументы. Аргумент subject обязательный. Но если вы всё-таки не хотите туда ничего передавать - передайте туда пустой stdClass или объект Joomla\registry\Registry.
@joomlafeed#joomla #php #webdev

0 Пользователей и 1 Гость просматривают эту тему.
  • 20 Ответов
  • 3833 Просмотров
*

Taatshi

  • Гуру
  • 5258
  • 481 / 2
  • Верстаем и кодим. Обращайтесь ;)
Как можно вставить новую позицию в шаблоне - знаю.

Нужно: вставить новую позицию после контента, но так, чтобы она отражалась ПЕРЕД jcomments.  Я так понимаю, если вставить ее просто после подключения контента, она высветитеся ПОСЛЕ комментариев, а хотелось бы ПЕРЕД...

Спасибо.
« Последнее редактирование: 01.11.2011, 02:29:11 от Taatshi »
ВЕРСТКА, САЙТЫ ПОД КЛЮЧ, УДАЛЕНИЕ ВИРУСОВ, МИГРАЦИЯ НА JOOMLA 3, ОБНОВЛЕНИЕ  |  ОТЗЫВЫ 
Связь: telegram - Taatshi, почта - Taatshi на яндексе, Skype - Taatshi
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
вставь позицию в шаблон jcomment перед комментариями
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

Efanych

  • Глобальный модератор
  • 4683
  • 644 / 0
  • Меняю свою жизнь на 360°!
Проще вставить в шаблон вывода материала. Вставляется такой конструкцией
Цитировать
<?php
$modules = JModuleHelper::getModules('Указать позицию модулей');
if ($modules && is_array($modules)) {
   foreach ($modules as $module) {
      //заголовок
      echo $module->title;
      //контент
      echo JModuleHelper::renderModule($module);
   };
}
?>
За вывод комментариев и прочих там какая-то строчка  типа aftercontent
P.S. Ну да, или в комментарии
Создание сайтов, шаблонов, помощь в решении проблем.
*

Taatshi

  • Гуру
  • 5258
  • 481 / 2
  • Верстаем и кодим. Обращайтесь ;)
В комментарии пробовала - страницы убила нафиг. Даже шаблон всего сайта исчез(( С наскоку не получилось. Потому и тема.

Вставляла в файл tpl_comment.php  Может, не сюда нужно? Попробую еще раз и вот сюда попробую.. jcomments.php

Ефаныч, попробую - отпишусь.
« Последнее редактирование: 31.10.2011, 12:31:36 от Taatshi »
ВЕРСТКА, САЙТЫ ПОД КЛЮЧ, УДАЛЕНИЕ ВИРУСОВ, МИГРАЦИЯ НА JOOMLA 3, ОБНОВЛЕНИЕ  |  ОТЗЫВЫ 
Связь: telegram - Taatshi, почта - Taatshi на яндексе, Skype - Taatshi
*

Taatshi

  • Гуру
  • 5258
  • 481 / 2
  • Верстаем и кодим. Обращайтесь ;)
вставила в tpl_index.php  комментов - позиция появилась. Там, где и нужно. Но. Модули в ней публиковаться не хотят(( Если прямо в див вписать текст - его видно, а модуль не отображается...

<?php
         // IMPORTANT: Do not rename this div's id! Some JavaScript functions references to it!
?>

<div id="jc">

<div id="new">
<jdoc:include type="modules" name="new"/>
</div>


<div id="comments"><?php echo $comments; ?></div>
<?php

ВЕРСТКА, САЙТЫ ПОД КЛЮЧ, УДАЛЕНИЕ ВИРУСОВ, МИГРАЦИЯ НА JOOMLA 3, ОБНОВЛЕНИЕ  |  ОТЗЫВЫ 
Связь: telegram - Taatshi, почта - Taatshi на яндексе, Skype - Taatshi
*

NightGuard

  • Живу я здесь
  • 2927
  • 378 / 7
  • вжжж-вжжж
Поставь в шаблон com_content.
Идеология сверхпотребления более опасна для человечества, чем идеология гитлеровского тоталитаризма
*

Efanych

  • Глобальный модератор
  • 4683
  • 644 / 0
  • Меняю свою жизнь на 360°!
Цитировать
<jdoc:include type="modules" name="new"/>
Taatshi, так и не должно работать.
Вписывай так
Цитировать
<?php
$modules = JModuleHelper::getModules('Указать позицию модулей');
if ($modules && is_array($modules)) {
   foreach ($modules as $module) {
      //заголовок
      echo $module->title;
      //контент
      echo JModuleHelper::renderModule($module);
   };
}
?>
Создание сайтов, шаблонов, помощь в решении проблем.
*

Taatshi

  • Гуру
  • 5258
  • 481 / 2
  • Верстаем и кодим. Обращайтесь ;)
Уф.  Сделала...

Опять спс Ефанычу)) Но не совсем отсюда - поиском нашла...

будет работать, если выводить модуль в позиции в комментах следующим образом:

Код
<div id="new">
<?php $document   = JFactory::getDocument();
$renderer   = $document->loadRenderer('module');
$modules   = JModuleHelper::getModules('new');
$params      = array('style' => 'xhtml');
foreach ($modules as $module)
{
   echo $renderer->render($module, $params);
} ?>
</div>

Вот, а пока сообщение писала - ты уже снова подсказал... Так, как здесь - тоже работает. Принцип один, вижу, а вот чем варианты отличаются... А... поняла)))

Вот когда все уже просекаешь - сам себе таким дураком пять минут назад кажешься - даже стыдно((

« Последнее редактирование: 01.11.2011, 01:36:07 от Taatshi »
ВЕРСТКА, САЙТЫ ПОД КЛЮЧ, УДАЛЕНИЕ ВИРУСОВ, МИГРАЦИЯ НА JOOMLA 3, ОБНОВЛЕНИЕ  |  ОТЗЫВЫ 
Связь: telegram - Taatshi, почта - Taatshi на яндексе, Skype - Taatshi
*

Taatshi

  • Гуру
  • 5258
  • 481 / 2
  • Верстаем и кодим. Обращайтесь ;)
Остался косяк. Если оформить как нужно - там паддинги и пр. Даже при отсутствии модуля в позиции их видно. Получается полоса. Стандартный метод отключения по условию наличия модуля выдает ошибку...

Пишу так:

Код
<?php if($this->countModules('newcom')) : ?>
<div id="newcom">
<?php
$modules = JModuleHelper::getModules('newcom');
if ($modules && is_array($modules)) {
   foreach ($modules as $module) {
      //заголовок
      echo $module->title;
      //контент
      echo JModuleHelper::renderModule($module);
   };
}
?>
</div>
<?php endif; ?>

Выдает на первую строчку

Fatal error: Call to undefined method jtt_tpl_index::countModules() in Y:\home\sayt\www\components\com_jcomments\tpl\default\tpl_index.php on line 55

Как скрыть пустую позицию?
ВЕРСТКА, САЙТЫ ПОД КЛЮЧ, УДАЛЕНИЕ ВИРУСОВ, МИГРАЦИЯ НА JOOMLA 3, ОБНОВЛЕНИЕ  |  ОТЗЫВЫ 
Связь: telegram - Taatshi, почта - Taatshi на яндексе, Skype - Taatshi
*

Pazys

  • Завсегдатай
  • 1738
  • 241 / 4
  • <a>А где я ошибся-то?</b>
<?php if($this->countModules('main_bar') and JRequest::getCmd('layout')!= 'form') { ?>

<?php } else { ?>

<?php } ?>
у меня вот такая надпись есть, но я почти ничего не понимаю в ней.
Ишак меня нюхал ...
Если помог - плюсуйте в карму.
*

Taatshi

  • Гуру
  • 5258
  • 481 / 2
  • Верстаем и кодим. Обращайтесь ;)
эт не то((
ВЕРСТКА, САЙТЫ ПОД КЛЮЧ, УДАЛЕНИЕ ВИРУСОВ, МИГРАЦИЯ НА JOOMLA 3, ОБНОВЛЕНИЕ  |  ОТЗЫВЫ 
Связь: telegram - Taatshi, почта - Taatshi на яндексе, Skype - Taatshi
*

Efanych

  • Глобальный модератор
  • 4683
  • 644 / 0
  • Меняю свою жизнь на 360°!
Другой вариант могу предложить. В templates/system/html/modules.php есть такой код
Цитировать
/*
 * XHTML (divs and font headder tags)
 */
function modChrome_xhtml($module, &$params, &$attribs)
{
   if (!empty ($module->content)) : ?>
      <div class="moduletable<?php echo $params->get('moduleclass_sfx'); ?>">
      <?php if ($module->showtitle != 0) : ?>
         <h3><?php echo $module->title; ?></h3>
      <?php endif; ?>
         <?php echo $module->content; ?>
      </div>
   <?php endif;
}

/*
Он отвечает за шаблон вывода модуля - XHTML. Сделай так: скопируй этот код, добавь в него свой див и по другому назови.
Цитировать
/*
 * XHTML (divs and font headder tags)
 */
function modChrome_new($module, &$params, &$attribs)
{
   if (!empty ($module->content)) : ?><div id="new">
      <div class="moduletable<?php echo $params->get('moduleclass_sfx'); ?>">
      <?php if ($module->showtitle != 0) : ?>
         <h3><?php echo $module->title; ?></h3>
      <?php endif; ?>
         <?php echo $module->content; ?>
      </div></div>
   <?php endif;
}

/*
Теперь, если поставиш стиль вывода new, он будет выводиться уже с дивом.
Создание сайтов, шаблонов, помощь в решении проблем.
*

Efanych

  • Глобальный модератор
  • 4683
  • 644 / 0
  • Меняю свою жизнь на 360°!
Ну и тут же возможно ответ на вопрос.
Цитировать
Как скрыть пустую позицию?
Но не знаю, сработает ли
Цитировать
if  (!empty ($module->content))
Создание сайтов, шаблонов, помощь в решении проблем.
*

Taatshi

  • Гуру
  • 5258
  • 481 / 2
  • Верстаем и кодим. Обращайтесь ;)
Все работает, кодировка в позиции слетела. Все файлы, что правила, перевела как полагается в utf8 без bom. Не помогло. Какой еще нужно перекодировать - есть соображения? Все комментарии - это много(( Вроде все ключевые перевела...
ВЕРСТКА, САЙТЫ ПОД КЛЮЧ, УДАЛЕНИЕ ВИРУСОВ, МИГРАЦИЯ НА JOOMLA 3, ОБНОВЛЕНИЕ  |  ОТЗЫВЫ 
Связь: telegram - Taatshi, почта - Taatshi на яндексе, Skype - Taatshi
*

Taatshi

  • Гуру
  • 5258
  • 481 / 2
  • Верстаем и кодим. Обращайтесь ;)
Сделала по совету NightGuard, убрала позицию из комментов, вставила в com-content  вот в этот файл components\com_content\views\article\tmpl\default.php

может, кому понадобится код...

Код

вот отсюда.....


<?php echo $this->article->text; ?>
</td>
</tr>
<tr>
<td>


<div id="newcom">
<?php $document   = JFactory::getDocument();
$renderer   = $document->loadRenderer('module');
$modules   = JModuleHelper::getModules('newcom');
$params      = array('style' => 'xhtml');
foreach ($modules as $module)
{
   echo $renderer->render($module, $params);
} ?>
</div>



</td>
</tr>
<?php if ( intval($this->article->modified)!=0 && $this->params->get('show_modify_date')) : ?>
<tr>
<td class="modifydate">
<?php echo JText::sprintf('LAST_UPDATED2', JHTML::_('date', $this->article->modified, JText::_('DATE_FORMAT_LC2'))); ?>
</td>
</tr>

<?php endif; ?>
</table>

Все равно нифига с кодировкой... Начинаю подозревать, что дело не в позиции, а в самом содержимом... Если в браузере выставить кодировку 1251 - модуль отображается нормально, весь сайт - кракозябрами. Если в браузере utf-8 - весь сайт нормально, модуль кракозябрами...

Блииин...

« Последнее редактирование: 10.03.2012, 19:21:15 от Taatshi »
ВЕРСТКА, САЙТЫ ПОД КЛЮЧ, УДАЛЕНИЕ ВИРУСОВ, МИГРАЦИЯ НА JOOMLA 3, ОБНОВЛЕНИЕ  |  ОТЗЫВЫ 
Связь: telegram - Taatshi, почта - Taatshi на яндексе, Skype - Taatshi
*

Efanych

  • Глобальный модератор
  • 4683
  • 644 / 0
  • Меняю свою жизнь на 360°!
Цитировать
$str = mb_convert_encoding($str, "UTF-8", "windows-1251");
Вот такую строчку нагуглил. Перекодирует с windows-1251 в UTF-8.
Только куда вставить не знаю. :)
Создание сайтов, шаблонов, помощь в решении проблем.
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Либо кодировка в БД не верная, либо это косяк самого модуля.
Вот такую строчку нагуглил. Перекодирует с windows-1251 в UTF-8.
Только куда вставить не знаю. :)
все гораздо проще ^-^
Код
iconv("windows-1251", "UTF-8", $module->content)
« Последнее редактирование: 03.11.2011, 12:21:22 от SmokerMan »
*

Taatshi

  • Гуру
  • 5258
  • 481 / 2
  • Верстаем и кодим. Обращайтесь ;)
Так... Колян, я про функцию посмотрела, а вот синтаксис и расположение в коде ты уж подскажи пожалуйста)) Хотя, думаю, не в этом дело.

Что интересно: такой косяк только в фоксе, в опере нормально.


дописка позже..

Проблему решили - исходники, как я и думала. Опера кодировку каждого блока определяет автоматом, что не делается фоксом. Опера умнее, во как))

Но я все равно хотела бы посмотреть как функцию iconv правильно вставить в этот блок. Жду подсказок, метод тыка в синтаксисе не прокатывает... увы...
« Последнее редактирование: 03.11.2011, 22:22:20 от Taatshi »
ВЕРСТКА, САЙТЫ ПОД КЛЮЧ, УДАЛЕНИЕ ВИРУСОВ, МИГРАЦИЯ НА JOOMLA 3, ОБНОВЛЕНИЕ  |  ОТЗЫВЫ 
Связь: telegram - Taatshi, почта - Taatshi на яндексе, Skype - Taatshi
*

Taatshi

  • Гуру
  • 5258
  • 481 / 2
  • Верстаем и кодим. Обращайтесь ;)
Код
	<div id="newcom">
<?php $document   = JFactory::getDocument();
$renderer   = $document->loadRenderer('module');
$modules   = JModuleHelper::getModules('newcom');
$params      = array('style' => 'xhtml');
foreach ($modules as $module)
{
   echo $renderer->render($module, $params);
} ?>

в Joomla 1.7 не работает(( Или должно? Что я упустила?
ВЕРСТКА, САЙТЫ ПОД КЛЮЧ, УДАЛЕНИЕ ВИРУСОВ, МИГРАЦИЯ НА JOOMLA 3, ОБНОВЛЕНИЕ  |  ОТЗЫВЫ 
Связь: telegram - Taatshi, почта - Taatshi на яндексе, Skype - Taatshi
*

Efanych

  • Глобальный модератор
  • 4683
  • 644 / 0
  • Меняю свою жизнь на 360°!
в Joomla 1.7 не работает(( Или должно? Что я упустила?
Хз. Проверил - работает.
Создание сайтов, шаблонов, помощь в решении проблем.
*

Taatshi

  • Гуру
  • 5258
  • 481 / 2
  • Верстаем и кодим. Обращайтесь ;)
Хз. Проверил - работает.

ок, значит, где-то накосячила. Буду искать.
ВЕРСТКА, САЙТЫ ПОД КЛЮЧ, УДАЛЕНИЕ ВИРУСОВ, МИГРАЦИЯ НА JOOMLA 3, ОБНОВЛЕНИЕ  |  ОТЗЫВЫ 
Связь: telegram - Taatshi, почта - Taatshi на яндексе, Skype - Taatshi
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как создать новый блок в шаблоне?

Автор moov

Ответов: 7
Просмотров: 7750
Последний ответ 17.12.2018, 14:08:12
от arma
Поменять цвет блоков в шаблоне

Автор nuon

Ответов: 7
Просмотров: 4707
Последний ответ 10.01.2016, 23:11:34
от nuon
Ребят - В шаблоне Default

Автор Djaga

Ответов: 4
Просмотров: 2175
Последний ответ 10.12.2015, 08:01:47
от Djaga
Замена фона в шаблоне Joomla

Автор Jons$

Ответов: 7
Просмотров: 11787
Последний ответ 12.10.2015, 15:49:09
от darkghost
Смена шрифтов в шаблоне Joomla 2.5

Автор GulliWeR

Ответов: 6
Просмотров: 10188
Последний ответ 29.09.2015, 13:29:19
от jetjetjet