yr4ik Опубликовано 17 января, 2016 Жалоба Поделиться Опубликовано 17 января, 2016 (изменено) Недавно делал один заказ где в тексте категории необходимо было выводить ссылки на различные под каталоги и товары.В результате мною был написан код способный из контента страницы выполнить еще подпрограмму. Так вот хотелось бы возможно разместить данный код в паблике или включить его в cms (по желанию автора) Как по мне, для некоторых разработчиков это может упростить написания некоторых модулей. Поскольку для простых модулей (выводящих отдельный tpl) - не понадобится отдельно заводить View контроллер и тд. А достаточно в тексте страницы написать: [widget name=tpl tpl=main.tpl] Установка предельно проста. Копируем папку api на сервер и читаем инструкцию (readme.txt) Стандартно приложил 2 простых виджета.1й выводит произвольный tpl2й (для примера) выводит переданные на него параметрыWidget.zip Изменено 18 января, 2016 пользователем mart Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 17 января, 2016 Жалоба Поделиться Опубликовано 17 января, 2016 1. С ходу виден недостаток проектирования: предлагаемая схема не будет работать в основном шаблоне index.tpl.2. С точки зрения реализации - излишне усложнено. Зачем изобретать велосипед [widget ...], когда в Smarty есть готовая плагинная конструкция {widget ...}, подключающая функцию (примеры во view/View.php)? Если это применить, код уменьшится вдвое, за счет того, что не надо, в частности, заниматься разбором строки параметров. И недостаток 1 при таком подходе уйдет сам собой... Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 17 января, 2016 Автор Жалоба Поделиться Опубликовано 17 января, 2016 1. С ходу виден недостаток проектирования: предлагаемая схема не будет работать в основном шаблоне index.tpl.2. С точки зрения реализации - излишне усложнено. Зачем изобретать велосипед [widget ...], когда в Smarty есть готовая плагинная конструкция {widget ...}, подключающая функцию (примеры во view/View.php)? Если это применить, код уменьшится вдвое, за счет того, что не надо, в частности, заниматься разбором строки параметров. И недостаток 1 при таком подходе уйдет сам собой... Корс - сначала б разобрались....Речь идет о подключении не из шаблона, а из текста страницы (описание товаров, категорий и тд) Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 17 января, 2016 Жалоба Поделиться Опубликовано 17 января, 2016 Да, не разглядел. Виноват... Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 18 января, 2016 Жалоба Поделиться Опубликовано 18 января, 2016 Альтернативный вариант:1. В view/View.php добавить плагин Smarty, созданный на основе упрощения материалов ТС: $this->design->smarty->registerPlugin("function", "widget", array($this, 'widget_plugin')); public function widget_plugin($params, &$smarty){ $widget_dir = 'widgets/'; $class_prefix = 'Widget_'; $options=$params; if(empty($options['name'])) return "Ошибка виджета: неуказан параметр \"name\""; if(!file_exists($widget_dir.$options['name'].'.php')) return "Ошибка виджета: не найден виджет \"{$options['name']}\""; include_once($widget_dir.$options['name'].'.php'); $widget_object = $class_prefix.$options['name']; if(!class_exists($widget_object) || !method_exists($widget_object, 'fetch')) return "Ошибка виджета: ошибка контролера"; //$widget_object[$options['name']] = new $widget_object(); $wo = new $widget_object(); return $wo->fetch($options); } 2. В simpla/PageAdmin.php сохраняю текст страницы в файл шаблона строкой file_put_contents('design/'.$this->settings->theme.'/html/page_'.$page->id.'.tpl', $page->body);3. В view/PageView.php обрабатываю этот текст как шаблон:после $page = $this->pages->get_page($url);добавить $page->body = $this->design->fetch('page_'.$page->id.'.tpl'); После этого новый функционал используется так:4. В папку widgets в корне записываются нужные php-файлы5. В админке в тексте страниц вставляются теги виджетов, например:{widget name='tpl' tpl='main.tpl'}{widget name='test'}В сравнении с методом ТС:1. Более короткий код (не требуется разбор строки параметров). Не надо создавать и регистрировать в Simpla.php новый API-класс.2. Теги виджетов можно вставлять как в текст страницы, так и в любые шаблоны. Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 18 января, 2016 Жалоба Поделиться Опубликовано 18 января, 2016 В сравнении с методом ТС:3. В тексте страницы обрабатываются теги Smarty, например {if $user}{$user->name}{/if} Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 18 января, 2016 Жалоба Поделиться Опубликовано 18 января, 2016 Поверить не могу! Корс выкладывает что-то бесплатно.Грац! Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 18 января, 2016 Автор Жалоба Поделиться Опубликовано 18 января, 2016 В сравнении с методом ТС:1. Более короткий код (не требуется разбор строки параметров). Не надо создавать и регистрировать в Simpla.php новый API-класс.2. Теги виджетов можно вставлять как в текст страницы, так и в любые шаблоны. Из минусов:1) Код работает только в страницах2) В шаблоне создаст кучу page_*.tpl примерно равное количеству страниц3) Требует знание смарти для пользователя. Поскольку написания строки в странице "Код должен быть в скобках {код}!" Вызовет ошибку. Ну первые 2 пункта можно исправить.Первый подключившись в indexView.Второй через через $smarty->fetch('string:'.$string); А воз из за третьего я специально и написал отдельный разбор параметров... Ну готов выслушать какие есть + по этому поводу.Как по мне обработка смарти - это лишнее в тексте Кто что скажет? Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 18 января, 2016 Жалоба Поделиться Опубликовано 18 января, 2016 1,2 - предложенные исправления очень даже полезны...3. Недостаток есть, и вряд ли от него можно избавиться полностью. И в первом варианте точно так же запись в тексте странице вида '[widget первый про стулья]' даст сообщение об ошибке. А давать дополнительные инструкции для пользователя про квадратные скобки вместо фигурных вряд ли будет хорошо. Smarty используется во многих CMS, пользователям часто знакома. А главное - есть и документация и масса учебников - кому надо, найдут очень быстро. А с документацией в Simpla традиционно - швах... Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 18 января, 2016 Автор Жалоба Поделиться Опубликовано 18 января, 2016 3. Недостаток есть, и вряд ли от него можно избавиться полностью. И в первом варианте точно так же запись в тексте странице вида '[widget первый про стулья]' даст сообщение об ошибке. А давать дополнительные инструкции для пользователя про квадратные скобки вместо фигурных вряд ли будет хорошо. Smarty используется во многих CMS, пользователям часто знакома. А главное - есть и документация и масса учебников - кому надо, найдут очень быстро. А с документацией в Simpla традиционно - швах... Сообщение об ошибке даст. Но не вызовет фатальную ошибку...Скобки можно легко сделать фигурными.А вот на счет инструкций - я думаю что ничего там сложного нет.Все зависит от кода самого виджета. А вообще если это приживется - то можно и в редактор встроить функции для автоматического формирования кода виджета Цитата Ссылка на сообщение Поделиться на другие сайты
Varyag Опубликовано 27 марта, 2016 Жалоба Поделиться Опубликовано 27 марта, 2016 Поверить не могу! Корс выкладывает что-то бесплатно.Грац!И что тут такого. Корс мне лично помог с кучей доработок и бесплатно. За что ему спасибо огромное. Могу предположить, что нохтер сейчас напишет, что я халавщик, а чуть не забыл, как он любит -"нищеброд", ну или типа того Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 28 марта, 2016 Жалоба Поделиться Опубликовано 28 марта, 2016 И что тут такого. Корс мне лично помог с кучей доработок и бесплатно. За что ему спасибо огромное. Могу предположить, что нохтер сейчас напишет, что я халавщик, а чуть не забыл, как он любит -"нищеброд", ну или типа тогоВсе это вранье, Корс не стал бы помогать с кучей доработок бесплатно.Пожалуй не все вранье, Вы действительно халявщик. Цитата Ссылка на сообщение Поделиться на другие сайты
Varyag Опубликовано 28 марта, 2016 Жалоба Поделиться Опубликовано 28 марта, 2016 Все это вранье, Корс не стал бы помогать с кучей доработок бесплатно.Пожалуй не все вранье, Вы действительно халявщик.Не суди по себе, скакун Цитата Ссылка на сообщение Поделиться на другие сайты
maks223 Опубликовано 9 февраля, 2017 Жалоба Поделиться Опубликовано 9 февраля, 2017 1) /api/Simpla.php после: ------------------------------------------------------------------------ private $classes = array( ------------------------------------------------------------------------ Добавляем: ------------------------------------------------------------------------ 'widget' => 'Widget', после этого сайт умирает - не работает ) Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 9 февраля, 2017 Автор Жалоба Поделиться Опубликовано 9 февраля, 2017 (изменено) Покажите измененный файл. Который вызывает ошибку или хотя бы саму ошибку Изменено 9 февраля, 2017 пользователем yr4ik Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.