Выод виджета.

#1 17 марта 2021 в 16:00
Всем привет. Есть ли в системе метод вывода виджета по его id?
#2 17 марта 2021 в 16:23
Lora, нету, я делал примерно так

  1. public function actionRelated() {
  2.  
  3. $bind_id = $this->request->get('bind_id');
  4. $item_id = $this->request->get('item_id');
  5. if (!is_numeric($bind_id) || !is_numeric($item_id)) {
  6. cmsCore::error404();
  7. }
  8.  
  9. $model = new cmsModel();
  10. $widget_array = $model->getItemById('widgets_bind', $bind_id, function($item, $model) {
  11.  
  12. $item['options'] = cmsModel::yamlToArray($item['options']);
  13. $item['groups_view'] = cmsModel::yamlToArray($item['groups_view']);
  14. $item['groups_hide'] = cmsModel::yamlToArray($item['groups_hide']);
  15. $item['languages'] = cmsModel::yamlToArray($item['languages']);
  16. $item['template_layouts'] = cmsModel::yamlToArray($item['template_layouts']);
  17. $item['device_types'] = cmsModel::yamlToArray($item['device_types']);
  18.  
  19. return $item;
  20. });
  21.  
  22. if (!$widget_array) {
  23. cmsCore::error404();
  24. }
  25.  
  26. //чтобы получить больше данных
  27. $oldLimit = $widget_array['options']['limit'];
  28. $widget_array['options']['limit'] = 66;
  29.  
  30. //чтобы не было ошибок
  31. $widget_array['controller'] = 'content';
  32. $widget_array['name'] = 'list';
  33. $widget_array['is_cacheable'] = false;
  34. $widget_array['bind_id'] = $widget_array['id'];
  35.  
  36. //ну и получим данные об открытой записи тк
  37. $item = $model->getItemById('con_news',$item_id);
  38.  
  39. if (!$item) {
  40. cmsCore::error404();
  41. }
  42. $item['ctype_name'] = 'news';
  43.  
  44. cmsModel::cacheResult('current_ctype_item', $item);
  45.  
  46.  
  47. //подсмотрено в cms_core->runWidget и cms_template->renderWidget
  48. $widget = cmsCore::getWidgetObject($widget_array);
  49. $data = call_user_func_array(array($widget, 'run'), []);
  50.  
  51. //чтобы в list_tiles_news отличить этот запрос
  52. $widget->oldLimit = $oldLimit;
  53.  
  54. if($data === false){
  55. cmsCore::error404();
  56. }
  57.  
  58. $tpl_path = cmsCore::getWidgetPath($widget->name, $widget->controller);
  59. $tpl_file = $this->cms_template->getTemplateFileName($tpl_path . '/' . $widget->getTemplate());
  60.  
  61.  
  62. $data['widget'] = $widget;
  63. $this->cms_template->processRender($tpl_file, $data);
  64.  
  65.  
  66. }
#3 17 марта 2021 в 17:06
Ок, понятно.Спасибо, Zau4man,
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.