joomla3.2 - 使用标签保存项目时出现空白错误 - 自行开发的组件

时间:2014-04-01 16:55:37

标签: tags joomla3.2 joomla-component

我正在开发一个joomla3.2组件。

为了使用代码,我已将JTableObserverTags添加到我的JTable,如下所示:

class FoodAndDeliveryTableItem extends JTable
{
    public function __construct(&$db)
    {
        parent::__construct('#__foodanddelivery', 'id', $db);
        JTableObserverTags::createObserver($this, array('typeAlias' => 'com_foodanddelivery.item'));
    }

我还将内容类型插入#__content_types表:

INSERT INTO `website_content_types` 
(`type_id`, `type_title`, `type_alias`, `table`, `rules`, `field_mappings`, `router`, `content_history_options`) VALUES
(null, 'FoodAndDelivery Item', 'com_foodanddelivery.item', '{"special":{"dbtable":"#__foodanddelivery","key":"id","type":"Item","prefix":"FoodAndDeliveryTable"}}', '', '', 'FoodAndDeliveryHelperRoute::getItemRoute', '{"formFile":"administrator\\/components\\/com_foodanddelivery\\/models\\/forms\\/item.xml"}')

那应该够了,不应该吗? 相反,我收到此错误: blank error


我试图自己解决这个问题。例如,对于com_content,我了解JTableObserverTags已添加到JTable中的libraries/cms.php。我在我的表声明中做了这个,并且观察者工作正常,它的方法被正确触发。

JTableObserverTags内部,当onBeforeStore甚至被解雇时,它正在搜索$this->table->tagsHelper->tags

public function onBeforeStore($updateNulls, $tableKey)
{
    $this->parseTypeAlias();
    if (empty($this->table->tagsHelper->tags))
    {
        $this->tagsHelper->preStoreProcess($this->table);
    }
    else
    {
        $this->tagsHelper->preStoreProcess($this->table, (array) $this->table->tagsHelper->tags);
    }
}

但我不明白为什么。触发save JModelAdmin方法时,会将其存储到$table->newTags,如下所示:

if ((!empty($data['tags']) && $data['tags'][0] != ''))
{
    $table->newTags = $data['tags'];
}

1 个答案:

答案 0 :(得分:0)

解决。 问题是我只读了一半教程。


Using Tags in an Extension教程的Create a content type for each view部分,他们写道:

  

如果您的表格不包含字段,请改为使用“null”。将其留空可能会导致SQL问题。特殊字段是可选的。至少需要映射公共字段:content_item_id,别名和标题,以便在标记项目列表中成功创建网址。

我将field_mappings留空,这就是造成错误的原因。 我应该插入#__content_types的行是:

INSERT INTO `website_content_types` 
(`type_id`, `type_title`, `type_alias`, `table`, `rules`, `field_mappings`, `router`, `content_history_options`) VALUES
(null, 'FoodAndDelivery Item', 'com_foodanddelivery.item', '{"special":{"dbtable":"#__foodanddelivery","key":"id","type":"Item","prefix":"FoodAndDeliveryTable"}}', '', '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"state","core_alias":"alias","core_body":"description","core_publish_up":"publish_up","core_publish_down":"publish_down","core_featured":"featured","core_catid":"catid"}}', 'FoodAndDeliveryHelperRoute::getItemRoute', '{"formFile":"administrator\\/components\\/com_foodanddelivery\\/models\\/forms\\/item.xml"}');