Как работает $params->get() в плагине?

Тема в разделе "Создание расширений для Joomla", создана пользователем Dagas, 28.01.2009.

  1. Offline

    Dagas Недавно здесь

    Регистрация:
    18.01.2008
    Сообщения:
    19
    Симпатии:
    0
    Пол:
    Мужской
    Перенес сайт с 1.0.13 на 1.5.7, понадобился плагин, наподобие MOS File для 1.0.хх. Не найшел ничего похожего и написал свой плагин. Но получилось не совсем так, как нужно. Создаю в .xml параметр Root, в котором можно было бы задавать корневую папку для плагина, откуда нужно тянуть файлы, но по $params->get('Root') получаю пустую строку.

    Xml-файл выглядит так:

    Код (CODE):
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <!DOCTYPE install SYSTEM "http://dev.joomla.org/xml/1.5/plugin-install.dtd">
    3. <install version="1.5" type="plugin" group="content">
    4. <name>Content - Direct File Download</name>
    5. <author>Melnyk</author>
    6. <authorEmail>Melnyk@academy.sumy.ua</authorEmail>
    7. <creationDate>2009-01-27</creationDate>
    8. <license>GPL</license>
    9. <version>0.9</version>
    10.  
    11. <files>
    12.     <filename plugin="dfd_plg">dfd_plg.php</filename>
    13. </files>
    14.  
    15. <params>
    16.     <param name="Root" type="text" default="" label="Root directory" />
    17. </params>
    18.  
    19. </install>


    Код выглядит так:
    Код (CODE):
    1. <?php
    2. // no direct access
    3. defined( '_JEXEC' ) or die( 'Restricted access' );
    4.  
    5. $mainframe->registerEvent('onPrepareContent','onPrepareDirectFileDownload');
    6.  
    7. //jimport('joomla.event.plugin');
    8.  
    9. function onPrepareDirectFileDownload(&$row, &$params)
    10. {
    11.     $root = $params->get('Root');
    12.     $pattern = "({dfd (.+?)})";
    13. //  $a_link = "<a href=\"images/stories/"."$2\">";
    14.     $a_link = "<a href=\"".$root."$2\">";
    15.     $row->text = preg_replace("{".$pattern."}", "$a_link", $row->text);
    16.  
    17.     $pattern = "{/dfd}";
    18.     $a_link = '</a>';
    19.     $row->text = preg_replace("{".$pattern."}", $a_link, $row->text);
    20. }
    21.  
    22. ?>


    Т.е. если я ставлю прямое указание, что корнем для ссылок на файлы есть директория image\stories, то все прекрасно работает - {dfd melnyk\xyz.jpg}Имя для ссылки{/dfd} заменяется ссылкой. Но хотелось сделать полноценный плагин, а не выходит. Хотя в модуле тестовом значение берется на ура по $params->get(). Я что-то упускаю, или же в плагинах нельзя пользоваться этой конструкцией, или еще что-то?
     
  2.  
  3. Dead Krolik
    Offline

    Dead Krolik специалист

    Регистрация:
    13.04.2007
    Сообщения:
    3 688
    Симпатии:
    101
    Пол:
    Мужской
    Я не совсем уверен, что этот params тот самый объект. Сделай var_dump и смотри что это и откуда прилетает.

    Плюс, по-моему так раньше было, параметры доступны после первого их сохранения.
     
  4. Offline

    SindBAD Недавно здесь

    Регистрация:
    09.06.2009
    Сообщения:
    100
    Симпатии:
    6
    Пол:
    Мужской
    Вот у меня точно такая же проблема возникает периодически. То ли что-то гдето надо по ссылке передавать, то ли запрашивать параметры где-то вне функций. Например, взялся перекроить под себя плагин для VM SEF ServiceMap. Создал свою функцию в нем и прописал в XML свою опцию.
    Было
    Код (PHP):
    1. function com_virtuemart_bot ($level,$link,$Itemid,$params) {
    2.   virtuemart_category_list(0,$level,$Itemid,$params);
    3. }

    Стало
    Код (PHP):
    1. function com_virtuemart_bot ($level,$link,$Itemid,$params) {
    2.   //virtuemart_category_list(0,$level,$Itemid,$params);
    3.   $show_mode = intval($params->get( 'show_mode', '2' )) ;
    4.   if($show_mode==2)
    5.   virtuemart_only_product_list ($level,$Itemid,$params,'flypage.tpl');
    6.   else
    7.   virtuemart_category_list(0,$level,$Itemid,$params);
    8. }

    И здесь как раз $params->get возвращает пустую строку, хотя в функции virtuemart_category_list он срабатывает нормально. В чем же дело?
     
  5. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    Хммм... что же гласят нам доки ?

    Код (PHP):
    1. defined( '_JEXEC' ) or die( 'Restricted access' );
    2.  
    3. jimport( 'joomla.plugin.plugin' );
    4.  
    5. class plgSystemTest extends JPlugin
    6. {
    7.     /**
    8.      * Constructor
    9.      *
    10.      * For php4 compatibility we must not use the __constructor as a constructor for plugins
    11.      * because func_get_args ( void ) returns a copy of all passed arguments NOT references.
    12.      * This causes problems with cross-referencing necessary for the observer design pattern.
    13.      *
    14.      * @access  protected
    15.      * @param   object  $subject The object to observe
    16.      * @param   array   $config  An array that holds the plugin configuration
    17.      * @since   1.0
    18.      */
    19.     function plgSystemTest( &$subject, $config )
    20.     {
    21.         parent::__construct( $subject, $config );
    22.  
    23.         // Do some extra initialisation in this constructor if required
    24.     }
    25.  
    26.     /**
    27.      * Do something onAfterInitialise
    28.      */
    29.     function onAfterInitialise()
    30.     {
    31.         // Perform some action
    32.     }
    33. }


    забудьте про функционально программирование в Джумле, все уже придумано до Вас ;)

    Код (CODE):
    1. * @param    object  $subject The object to observe


    не ждали ? )
    А теперь получаем параметры в любом методе класса:
    Код (PHP):
    1. $myParam = $this->params->get( 'show_mode', '2' );


    оп оп оп , читаем мат-часть ;)
     
    Антон_Kapx нравится это.
  6. Offline

    SindBAD Недавно здесь

    Регистрация:
    09.06.2009
    Сообщения:
    100
    Симпатии:
    6
    Пол:
    Мужской
    Тут прикол как раз в том, что я не свой плагин пишу, а докурочиваю к готовому свою функцию по образу и подобию существующих. И разработан он как-то странно: класса в нем нет, есть только функции. И во всех функциях работает $params->get, а в моей - нет...
    Ну и $this->params->get, естественно, тоже не сработал:)
     
  7. Offline

    botanist специалист

    Регистрация:
    15.02.2009
    Сообщения:
    461
    Симпатии:
    49
    Пол:
    Мужской
    Ну раз написан через ж, то и доставать надо через то же место. Попробуй
    Код (PHP):
    1. $plg = JPluginHelper::getPlugin('pluguinType','PluginName');
    2.    $params = new JParameter($plg->params);
    3.    $paramName = $params->get('paramName','paramDef');
     
    Последнее редактирование: 23.06.2010
    SindBAD нравится это.
  8. Offline

    SindBAD Недавно здесь

    Регистрация:
    09.06.2009
    Сообщения:
    100
    Симпатии:
    6
    Пол:
    Мужской
    botanist, точно, именно так!
    Код (PHP):
    1. $plg = JPluginHelper::getPlugin('com_sefservicemap','com_virtuemart_bot');
    2.   $params = new JParameter($plg->params);
    3.   $show_mode = intval($params->get( 'show_mode', '2' )) ;

    И всё зафурыкало. Спасибо!
     
  9. Offline

    Alejandro Недавно здесь

    Регистрация:
    04.04.2013
    Сообщения:
    4
    Симпатии:
    0
    Пол:
    Мужской
    Вопрос в продолжении темы

    хмл-файл:
    Код (CODE):
    1. <!DOCTYPE install SYSTEM "http://dev.joomla.org/xml/1.5/plugin-install.dtd">
    2. <extension version="2.5" type="plugin" group="category" method="upgrade">
    3. <name>
    4. filtersearchplugin
    5. </name>
    6. <author>
    7. ashustov
    8. </author>
    9. <authorEmail>
    10.  
    11. </authorEmail>
    12. <version>
    13. 1.0
    14. </version>
    15. <copyright/>
    16. <description>
    17. Filter
    18. </description>
    19. <files>
    20. <filename plugin="filtersearch">
    21. filtersearch.php
    22. </filename>
    23. </files>
    24. <config>
    25. </config>
    26. <scriptfile/>
    27. <sql>
    28. </sql>
    29. <params/>
    30. </extension>


    filtersearch.php :
    Код (CODE):
    1. <?php
    2. // Запрет прямого доступа.
    3.     defined('_JEXEC') or die;
    4.  
    5.     class plgCategoryfiltersearch extends JPlugin
    6.     {
    7.     function onBeforeDisplayProductList(&$products)
    8.     {
    9.     print_r("hjkhfd");
    10.             $newproducts = array();
    11.             foreach($products AS $product)
    12.             if ($product['product_id'] == 1) $newproducts[] = $product;
    13.             $products = $newproducts;
    14.         }
    15.     }
    16. ?>



    Не пойму почему не распечатывается моя строка print_r("hjkhfd");
    Помогите, пожалуйста или хотя бы подскажите где читать мануалы.
     
    Последнее редактирование: 04.04.2013
  10. Offline

    Alejandro Недавно здесь

    Регистрация:
    04.04.2013
    Сообщения:
    4
    Симпатии:
    0
    Пол:
    Мужской
    Неужели никто ничего не подскажет?

    Нужно мне подписаться на событие компонента COM_jshopping, чтобы выполнить свои действия с продуктами ((
     
  11. woojin
    Offline

    woojin Местный Команда форума

    Регистрация:
    31.05.2009
    Сообщения:
    3 209
    Симпатии:
    335
    Пол:
    Мужской
    вот интересно где это в J в эту функцию передаются параметры!!!!

    P.S. когда найдёшь где и как туда передаются параметры тут же ответишь на свой вопрос
     
  12. Offline

    Alejandro Недавно здесь

    Регистрация:
    04.04.2013
    Сообщения:
    4
    Симпатии:
    0
    Пол:
    Мужской
    Разобрался.
    Не правильно указал группу плагина. Почему-то думал, что связь плагина происходит не в классе компонента.
     
  13. Offline

    Антон_Kapx Недавно здесь

    Регистрация:
    27.11.2016
    Сообщения:
    1
    Симпатии:
    0
    Пол:
    Мужской
    Дайбох тибе здаровичка чилавек! Я всю свою пустую башку уже себе вынес! И тут ты такой, оп оп!:cool:
     

Поделиться этой страницей

Загрузка...