我正在开发一个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"}')
那应该够了,不应该吗? 相反,我收到此错误:
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'];
}
答案 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"}');