Jump to content

Виджеты для simpla


Recommended Posts

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

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

 

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

 

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

[widget name=tpl tpl=main.tpl]

 

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

 

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

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

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

Widget.zip

Edited by mart
Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

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

 

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

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

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

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

 

Из минусов:

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

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

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

 

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

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

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

 

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

 

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

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

 

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

 

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

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

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

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

Link to post
Share on other sites
  • 2 months later...

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

Грац!

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

Link to post
Share on other sites

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

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

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

Link to post
Share on other sites

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

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

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

Link to post
Share on other sites
  • 10 months later...
1) /api/Simpla.php после:

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

        private $classes = array(

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

        Добавляем:

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

        'widget'     => 'Widget', 

 

 

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

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...