Как вывести виджет сразу же после материала?

InstantCMS 2.X
#1 14 декабря 2016 в 09:38
Друзья, помогите советом. Нужно вывести виджет внизу страницы, стандартным методом можно только после "тела страницы", получается — после комментариев. Нужно, что бы виджет отображался до комментариев, внизу статьи.

Можно ли это сделать прямой вставкой кода. Все нужные файлы знаю, таким образом выводил после статей соц.кнопки и рекламу, не знаю как правильно и что вставить для вывода виджета на данной позиции. Ерунда получается, когда похожие новости и т.т. можно отобразить только после комментариев.
#2 14 декабря 2016 в 10:16
Pasechnik, если рекламу вставить то берите instantcms.ru/addons/blocks-for-instantcms.html
или просто виджет вывести?
#3 14 декабря 2016 в 10:30

или просто виджет вывести?

kirkr
Именно виджет. Рекламный код я вставляю напрямую в файлы, хотелось бы таким образом вставить и виджет.
#5 14 декабря 2016 в 12:30
DK, спасибо!

Использовал:
  1. <?php
  2. cmsCore::getInstance()->runWidgets();
  3. $this->widgets('main-bottom');
  4. unset($this->widgets);
  5. ?>
Теперь виджеты дублируются. Как запретить вывод виджета "по умолчанию" на конкретно взятой странице?
#6 14 декабря 2016 в 13:27
можно ещё заменить функцию runWidgets (/system/core/core.php строка 736):

  1.  
  2. /**
  3.   * Запускает все виджеты, привязанные к текущей странице
  4.   */
  5. public function runWidgets($pos=array()){
  6.  
  7. // в админке нам виджеты не нужны
  8. if ($this->controller == 'admin') { return; }
  9.  
  10. $widgets_model = cmsCore::getModel('widgets');
  11. $pages = $widgets_model->getPages();
  12.  
  13. $matched_pages = $this->detectMatchedWidgetPages($pages);
  14.  
  15. if (!is_array($matched_pages)) { return; }
  16. if (sizeof($matched_pages)==0) { return; }
  17.  
  18. $widgets_list = $widgets_model->getWidgetsForPages($matched_pages, cmsTemplate::getInstance()->getName());
  19.  
  20. if (is_array($widgets_list)){
  21.  
  22. // если указаны позиции
  23. if(is_array($pos) && !empty($pos)) {
  24. foreach ($widgets_list as $widget){
  25. if(!empty($widget['controller']) && !cmsController::enabled($widget['controller'])){
  26. continue;
  27. }
  28. if(in_array($widget['position'], $pos)) {
  29. $this->runWidget($widget);
  30. }
  31. }
  32. } else {
  33. foreach ($widgets_list as $widget){
  34. if(!empty($widget['controller']) && !cmsController::enabled($widget['controller'])){
  35. continue;
  36. }
  37. $this->runWidget($widget);
  38. }
  39. }
  40.  
  41. }
  42.  
  43. }
  44.  
в шаблоне вызвать
  1. cmsCore::getInstance()->runWidgets(array(
  2. 'main-bottom'
  3. ));
дальше уже как обычно вставляете в нужном месте :
  1. <?php $this->widgets('main-bottom', false, 'wrapper_plain');?>
#7 14 декабря 2016 в 14:17

Теперь виджеты дублируются. Как запретить вывод виджета "по умолчанию" на конкретно взятой странице?

Pasechnik
Вроде как нельзя запретить. Можно только разрешить всем, кроме конкретной страницы — пользовательские страницы, положительные и отрицательные маски…
#8 14 декабря 2016 в 16:23
taleh, спасибо! Возьму на заметку.

положительные и отрицательные маски...

DK
Маска запретить показ и дубля, и виджета.

Решил удалением из шаблона, места вывода обозначил только в нужных файлах.
#9 14 декабря 2016 в 16:54

места вывода обозначил только в нужных файлах

Pasechnik
Так вообще-то так и имелось ввиду)) В теме, на которую отправлял Вас, шел разговор о том, как добавить виджет под аватаром в профиле. Т.е., на конкретной странице.

Хорошо, что всё получилось))
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.