3

我买了《Learning Joomla! 3 Extension Development, 第三版》。这本书超级棒!作为 Joomla 的新手!开发,它在我的第一份工作中帮助我构建一个新组件。但是,我仍然不了解 Model 构造函数:

public function __construct($config = array())
{
    if (empty($config['filter_fields']))
    {
        $config['filter_fields'] = array(
            'id', 'a.id',
            'title', 'a.title',
            'state', 'a.state',
            'company', 'a.company',
            'image', 'a.image',
            'url', 'a.url',
            'phone', 'a.phone',
            'description', 'a.description',
            'ordering', 'a.ordering', 'a.catid'
        );
    }

parent::__construct($config);
}

'id' 和 'a.id' 、 'title' 和 'a.title' 、 'phone' 和 'a.phone' 等之间有什么关系?将 joomla!自动从数据库表中分配值还是什么?当我将“电话”更改为“电话”时,我无法检索数据。之前谢谢。

4

3 回答 3

1

我也对此感到困惑。我在这里找到了答案(引用如下)。显然,它只是一个允许字段名称的白名单,仅此而已。

此设置的值只是允许在查询中使用的字段名称的白名单。因此,您可以看到我们有很多标准字段名称。我们还添加了一些特定于查询的名称的变体,以防使用此模型的其他人想要使用它们。这就是全部。当您单击列表标题之一时,它会为请求中的列表设置排序列。我们知道模型中的 populateState 方法将从请求中获取这个值,当它这样做时,它会根据这个白名单检查它。如果请求的排序列不在白名单中,它会安全地恢复到默认排序。

于 2014-12-26T15:11:51.167 回答
0

数据库表使用文本“电话”作为实际的字段名称。当进行各种查询时,在示例中使用 b.phone 将继续表示为“电话”。

如果要使用名称“电话”,则必须将数据库表中的实际名称更改为“电话”。您的新过滤器字段将是电话,b.telephone。

我同意这本书很棒。

于 2014-07-31T12:48:53.310 回答
0

如果您在查询中使用列前缀,您还可以将它们与列名一起指定(例如“b.id”)。

您可以在以下位置找到有关您的问题的一些其他信息

http://docs.joomla.org/Adding_sortable_columns_to_a_table_in_a_component

BR佩里诺

于 2014-05-30T14:19:46.333 回答