33

我这里有问题,无法解决:-/

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

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

4

8 回答 8

65

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

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

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

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

问候。

于 2012-08-21T16:20:46.687 回答
12
$app = JFactory::getApplication('site');
$componentParams = $app->getParams('com_example');
$param = $componentParams->get('paramName', defaultValue);
于 2012-10-19T02:48:53.907 回答
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 版本的文档。我希望这会有所帮助!

于 2012-11-20T15:19:42.857 回答
2

这与 JT Blum 的回答类似,但在 Joomla 3.x 中,JRequest 被贬低了。这是获取应用程序参数的另一种方法。

    $app = JFactory::getApplication();
    $input = $app ->input;
    $componentName = $input ->get('option');
    $params = JComponentHelper::getParams($componentName);
    print_r($params);
于 2014-05-05T19:33:09.907 回答
2

由于 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');
}
于 2017-10-12T19:53:39.050 回答
1

在所有 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);
于 2015-04-08T12:20:33.720 回答
1

我有一个类似的问题。我只得到了data:protected结果,直到我去配置我的组件并保存它。尽管在文本字段中打印了默认值,但 Joomla 在单击“保存”之前无法读取它们。

于 2014-04-25T10:13:17.490 回答
-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>
于 2012-09-28T06:46:09.090 回答