Как получить параметры компонента?

У меня есть проблема, и я просто не могу ее решить :-/

Я разрабатываю компонент Joomla с бэкэндом. В бэкенде я установил параметр dashboardId, но не могу получить к ним доступ в представлении. Я всегда получаю data:protected (когда сбрасываю params). Похоже, мне не разрешен доступ к объекту.

Вот default.xml:

<?xml version="1.0" encoding="utf-8"?>
<metadata>
    <layout title="Dashboard">
        <message>
            <![CDATA[dashboard LAYOUT DESCRIPTION]]>
        </message>
    </layout>
    <fields name="params">
        <fieldset name="params">
            <field
                name="dashboardId" 
                type="text" 
                label="Dashboard ID"
                description="com_dashboard_desc"
                default="1"
            >   
            </field>
        </fieldset>
    </fields>
</metadata>

Теперь в view.html.php я пытаюсь получить доступ к параметру следующим образом:

$app = &JFactory::getApplication();
$params = JComponentHelper::getParams('com_dashboard');
$dashboardId = $params->get('dashboardId');
var_dump($dashboardId);

Когда я делаю var_dump($dashboardId);, я получаю NULL, но когда я сбрасываю $app, я вижу dashboardID

любая помощь будет оценена по достоинству! Спасибо


person Nico    schedule 03.05.2012    source источник
comment
Это сообщение, когда я выгружаю $params: object(JRegistry)#102 (1) { [data:protected]=> object(stdClass)#106 (0) { } } ... и я хочу получить доступ к объекту данных   -  person Nico    schedule 03.05.2012


Ответы (8)


Есть более простой способ. Первый помощник по импорту компонентов Joomla:

jimport('joomla.application.component.helper'); // not required in Joomla 3.x

А затем извлеките любой атрибут, который вы хотите, следующим образом:

$params = JComponentHelper::getParams('com_dashboard');
$dashboardID = $params->get('dashboardID');

Привет.

person Lobo-X    schedule 21.08.2012
comment
Это лучший способ сделать это в J!2.5 и › (пока) - person Cleanshooter; 20.11.2012
comment
Это правильный способ, так как вы увидите, что большинство свойств в Joomla защищены [var_dump($params) расскажет вам об этом], и единственный способ получить к ним доступ — через вызов функции. - person Anriëtte Myburgh; 22.07.2013

Подобно ответу, предоставленному LoboX, я бы рекомендовал использовать помощник компонента для получения параметров компонента:

jimport('joomla.application.component.helper'); // Import component helper library
$params = JComponentHelper::getParams(JRequest::getVar('option')); // Get parameter helper (corrected 'JRquest' spelling)
$params->get('parameter_name'); // Get an individual parameter

JRequest::getVar('option') возвращает имя вашего компонента с префиксом com_. Кроме того, похоже, вы пытаетесь смешать немного синтаксиса 1.5/1.6 в свой файл конфигурации. Если вы еще не видели его, попробуйте прочитать 2.5. версию документации. Надеюсь, это поможет!

person J.T. Blum    schedule 20.11.2012
comment
Как указал aspirisen, JRequest устарел в Joomla 3.x и был заменен на JInput. Синтаксис для этого будет примерно таким: JFactory::getApplication()->input->getCmd('option',''); Поскольку я опубликовал исходный ответ, я пришел к выводу, что, вероятно, лучше использовать жестко закодированную строку, как в нескольких других ответах, если вы не много кодируете и тем не менее, не стоит блокировать его, вместо того, чтобы брать его из параметров запроса. - person J.T. Blum; 26.02.2019

Это похоже на J.T. Ответ Blum, но в Joomla 3.x JRequest устарел. Это еще один способ получить параметры приложения.

    $app = JFactory::getApplication();
    $input = $app ->input;
    $componentName = $input ->get('option');
    $params = JComponentHelper::getParams($componentName);
    print_r($params);
person aspirisen    schedule 05.05.2014
comment
чтобы получить параметр, вы должны использовать $params ->get('param name'); - person aspirisen; 09.05.2014

У меня была аналогичная проблема. Я получил только результат data:protected, пока не перешел к настройке своего компонента и не сохранил его. Хотя в текстовых полях были напечатаны значения по умолчанию, Joomla не смогла их прочитать, прежде чем нажать «Сохранить».

person Sebastian Barth    schedule 25.04.2014

Вспомогательная функция для получения объекта Params во всех версиях Joomla 1.5/2.5/3.x

class myCompoHelper{

    public static function getParams($option)
    {

        if (version_compare(JVERSION, '1.5', 'g'))
        {
            $application = JFactory::getApplication();
            if ($application->isSite())
            {
                $params = $application->getParams($option);
            }
            else
            {
                jimport('joomla.application.component.helper');
                $params = JComponentHelper::getParams($option);
            }
        }
        else
        {
            jimport('joomla.application.component.helper');
            $params = JComponentHelper::getParams($option);
        }
        return $params;
    }

}

$params=myCompoHelper::getParams('com_mycomponent');
echo $params->get('myParamName',null);
person Stergios Zg.    schedule 08.04.2015

Так как версия 3.1 Joomla находится в процессе устаревания всех классов J, эффект имеет значение, в версии 4.0 будут объявлены устаревшими почти все классы J, рекомендуемый способ с этого момента для получения параметра компонентов — либо вызов всей функции пространства имен:

Joomla\CMS\Component\ComponentHelper::getParams('com_dashboard')->get('dashboardID');

или, если вы работаете над моделью, вы можете вызвать ключевое слово use, чтобы импортировать файл и использовать класс в документе, например

use Joomla\CMS\Component\ComponentHelper;

function myFunction() {
    $param = ComponentHelper::getParams('com_dashboard');
    $dashboardID = $param->get('dashboardID');
}
person Paulo Griiettner    schedule 12.10.2017
comment
Пока это лучший ответ на 2021 год. - person betweenbrain; 18.01.2021

У меня была такая же проблема, и решение было таким:

$input = JFactory::getApplication()->input;
$parametername = $input->getInt('parametername');
echo $parametername;

Это имя параметра в файле default.xml в папке tmpl представлений. вот xml

<?xml version="1.0" encoding="utf-8"?>
<metadata>
    <layout title="Offers">
         <message>This is a component in order to display offers</message>
    </layout>
    <state>
        <name>name</name>
            <description>description</description>

        <url addpath="/administrator/components/com_component/elements">
            <param name="category_id" section="com_component" type="categoriesmenu"  value_field="category_name" label="COM_COMPONENT_CATEGORY_FIELD_SELECT_TITLE" description="COM_COMPONENT_CATEGORY_FIELD_SELECT_TITLE_DESC" />
        </url>
    </state>

    <fields name="request" >
        <fieldset name="request" addfieldpath="/administrator/components/com_component/models/fields">
            <field name="parametername" type="category"
                label="category"
                required="true"
                description="Perigrafh"
            />
        </fieldset>
    </fields>


</metadata>
person themhz    schedule 28.09.2012

person    schedule
comment
Это, вероятно, не работает в серверной части, потому что JFactory::getApplication('site') по-прежнему будет возвращать объект приложения администрирования, у которого нет метода getParams. - person Valentin Despa; 14.10.2014