Перейти к содержанию
Официальный форум поддержки Simpla

Виджеты для simpla


Рекомендуемые сообщения

Недавно делал один заказ где в тексте категории необходимо было выводить ссылки на различные под каталоги и товары.

В результате мною был написан код способный из контента страницы выполнить еще подпрограмму.

 

Так вот хотелось бы возможно разместить данный код в паблике или включить его в cms (по желанию автора) 

 

Как по мне, для некоторых разработчиков это может упростить написания некоторых модулей. Поскольку для простых модулей (выводящих отдельный tpl) - не понадобится отдельно заводить View контроллер и тд. А достаточно в тексте страницы написать:

[widget name=tpl tpl=main.tpl]

 

Установка предельно проста. Копируем папку api на сервер и читаем инструкцию (readme.txt)

 

Стандартно приложил 2 простых виджета.

1й выводит произвольный tpl

2й (для примера) выводит переданные на него параметры

Widget.zip

Изменено пользователем mart
Ссылка на сообщение
Поделиться на другие сайты

1. С ходу виден недостаток проектирования: предлагаемая схема не будет работать в основном шаблоне index.tpl.

2. С точки зрения реализации - излишне усложнено. Зачем изобретать велосипед [widget ...], когда в Smarty есть готовая плагинная конструкция  {widget ...}, подключающая функцию (примеры во view/View.php)? Если это применить, код уменьшится вдвое, за счет того, что не надо, в частности, заниматься разбором строки параметров. И недостаток 1 при таком подходе уйдет сам собой...

Ссылка на сообщение
Поделиться на другие сайты

1. С ходу виден недостаток проектирования: предлагаемая схема не будет работать в основном шаблоне index.tpl.

2. С точки зрения реализации - излишне усложнено. Зачем изобретать велосипед [widget ...], когда в Smarty есть готовая плагинная конструкция  {widget ...}, подключающая функцию (примеры во view/View.php)? Если это применить, код уменьшится вдвое, за счет того, что не надо, в частности, заниматься разбором строки параметров. И недостаток 1 при таком подходе уйдет сам собой...

 

Корс - сначала б разобрались....

Речь идет о подключении не из шаблона, а из текста страницы (описание товаров, категорий и тд)

Ссылка на сообщение
Поделиться на другие сайты

Альтернативный вариант:

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. Теги  виджетов можно вставлять как в текст страницы, так и в любые  шаблоны.

Ссылка на сообщение
Поделиться на другие сайты

В сравнении с методом ТС:

1. Более короткий код (не требуется разбор строки параметров). Не надо создавать и регистрировать в Simpla.php новый API-класс.

2. Теги  виджетов можно вставлять как в текст страницы, так и в любые  шаблоны.

 

Из минусов:

1) Код работает только в страницах

2) В шаблоне создаст кучу page_*.tpl примерно равное количеству страниц

3) Требует знание смарти для пользователя. Поскольку написания строки в странице "Код должен быть в скобках {код}!" Вызовет ошибку.

 

Ну первые 2 пункта можно исправить.

Первый подключившись в indexView.

Второй через через $smarty->fetch('string:'.$string);

 

А воз из за третьего я специально и написал отдельный разбор параметров...

 

Ну готов выслушать какие есть + по этому поводу.

Как по мне обработка смарти - это лишнее в тексте

 

Кто что скажет?

Ссылка на сообщение
Поделиться на другие сайты

1,2 - предложенные исправления очень даже полезны...

3. Недостаток есть, и вряд ли от него можно избавиться полностью. И в первом варианте точно так же запись в тексте странице вида '[widget первый про стулья]'  даст сообщение об ошибке. А давать дополнительные инструкции для пользователя про квадратные скобки вместо фигурных вряд ли будет хорошо.  Smarty используется во многих CMS, пользователям часто знакома. А главное - есть и документация и масса учебников - кому надо, найдут очень быстро. А с документацией в Simpla традиционно - швах...

Ссылка на сообщение
Поделиться на другие сайты

3. Недостаток есть, и вряд ли от него можно избавиться полностью. И в первом варианте точно так же запись в тексте странице вида '[widget первый про стулья]'  даст сообщение об ошибке. А давать дополнительные инструкции для пользователя про квадратные скобки вместо фигурных вряд ли будет хорошо.  Smarty используется во многих CMS, пользователям часто знакома. А главное - есть и документация и масса учебников - кому надо, найдут очень быстро. А с документацией в Simpla традиционно - швах...

 

Сообщение об ошибке даст. Но не вызовет фатальную ошибку...

Скобки можно легко сделать фигурными.

А вот на счет инструкций - я думаю что ничего там сложного нет.

Все зависит от кода самого виджета. А вообще если это приживется - то можно и в редактор встроить функции для автоматического формирования кода виджета

Ссылка на сообщение
Поделиться на другие сайты
  • 2 месяца спустя...

Поверить не могу! Корс выкладывает что-то бесплатно.

Грац!

И что тут такого. Корс мне лично помог с кучей доработок и бесплатно. За что ему спасибо огромное. Могу предположить, что нохтер сейчас напишет, что я халавщик, а чуть не забыл, как он любит -"нищеброд", ну или типа того

Ссылка на сообщение
Поделиться на другие сайты

И что тут такого. Корс мне лично помог с кучей доработок и бесплатно. За что ему спасибо огромное. Могу предположить, что нохтер сейчас напишет, что я халавщик, а чуть не забыл, как он любит -"нищеброд", ну или типа того

Все это вранье, Корс не стал бы помогать с кучей доработок бесплатно.

Пожалуй не все вранье, Вы действительно халявщик.

Ссылка на сообщение
Поделиться на другие сайты

Все это вранье, Корс не стал бы помогать с кучей доработок бесплатно.

Пожалуй не все вранье, Вы действительно халявщик.

Не суди по себе, скакун

Ссылка на сообщение
Поделиться на другие сайты
  • 10 месяцев спустя...
1) /api/Simpla.php после:

    ------------------------------------------------------------------------

        private $classes = array(

    ------------------------------------------------------------------------

        Добавляем:

    ------------------------------------------------------------------------

        'widget'     => 'Widget', 

 

 

после этого сайт умирает - не работает ) 

Ссылка на сообщение
Поделиться на другие сайты

Покажите измененный файл. Который вызывает ошибку или хотя бы саму ошибку

Изменено пользователем yr4ik
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...