如何获取组件参数?

时间:2012-05-03 13:04:43

标签: php joomla joomla2.5 joomla-extensions

我在这里遇到问题而无法解决问题: - /

我正在开发一个带后端的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

每一个帮助都将不胜感激! 感谢

8 个答案:

答案 0 :(得分:59)

有一种更简单的方法。 首先导入Joomla Component Helper:

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

然后检索您想要的任何属性:

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

问候。

答案 1 :(得分:12)

$app = JFactory::getApplication('site');
$componentParams = $app->getParams('com_example');
$param = $componentParams->get('paramName', defaultValue);

答案 2 :(得分:3)

与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 version。我希望有所帮助!

答案 3 :(得分:2)

与J.T.相似。 Blum回答,但在Joomla 3.x中,JRequest被删除了。这是获得应用程序参数的另一种方法。

    $app = JFactory::getApplication();
    $input = $app ->input;
    $componentName = $input ->get('option');
    $params = JComponentHelper::getParams($componentName);
    print_r($params);

答案 4 :(得分:1)

我有类似的问题。我只获得数据:受保护的结果,直到我进入组件的配置并保存它。虽然在文本字段中打印了默认值,但在点击“保存”之前,Joomla无法阅读它们。

答案 5 :(得分:1)

Helper函数在所有Joomla版本1.5 / 2.5 / 3.x中获取Params对象

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);

答案 6 :(得分:0)

从版本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');
}

答案 7 :(得分:-1)

我遇到了同样的问题,解决方法是:

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

这是views tmpl文件夹中default.xml中的参数名称。 这是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>