是否有人知道如何以编程方式正确地将新内容类别插入数据库? 对于类别表中的每个帖子,还有一个帖子保存在资产表中,并设置了lft和rgt。 有没有我可以使用的本机Joomla类而不是普通的SQL?
答案 0 :(得分:2)
请仅使用本地类,哪些类别将无缝地为您处理。一旦添加类别,整个事物就会自动处理。只需看看任何核心组件,看看如何。
使用sql更新资产表并不容易,它是非常具体的管理,是一系列复杂的外键表的一部分。
扩展JTable或JTableContent来处理这个问题。
答案 1 :(得分:2)
以下是我刚刚使用JTableCategory
类一起编写的一些代码,因此可以简单地在Joomla的前端或管理端使用
$table = JTable::getInstance('category');
$data = array();
// name the category
$data['title'] = $title;
// set the parent category for the new category
$data['parent_id'] = $parent_id;
// set what extension the category is for
$data['extension'] = $extension;
// Set the category to be published by default
$data['published'] = 1;
// setLocation uses the parent_id and updates the nesting columns correctly
$table->setLocation($data['parent_id'], 'last-child');
// push our data into the table object
$table->bind($data);
// some data checks including setting the alias based on the name
if ($table->check()) {
// and store it!
$table->store();
// Success
} else {
// Error
}
当然,您可能希望正确设置数据,但这些是设置的核心。
答案 2 :(得分:1)
这是我为此目的创建的一个功能,经过一些挖掘和挖掘。实验
它使用核心类,因此需要访问它们(对我而言,它基本上是Joomla组件的一部分)。
请注意,对于Joomla 3而言,对于Joomla 2.5以及之前,您需要将 JModelLegacy 更改为 JModel 。
function createCategory( $name, $parent_id, $note )
{
JTable::addIncludePath( JPATH_ADMINISTRATOR . '/components/com_categories/tables' );
$cat_model = JModelLegacy::getInstance( 'Category', 'CategoriesModel' );
$data = array (
'id' => 0,
'parent_id' => $parent_id,
'extension' => 'com_content',
'title' => $name,
'alias' => '',
'note' => $note,
'description' => '',
'published' => '1',
'access' => '1',
'metadesc' => '',
'metakey' => '',
'created_user_id' => '0',
'language' => '*',
'rules' => array(
'core.create' => array(),
'core.delete' => array(),
'core.edit' => array(),
'core.edit.state' => array(),
'core.edit.own' => array(),
),
'params' => array(
'category_layout' => '',
'image' => '',
),
'metadata' => array(
'author' => '',
'robots' => '',
),
);
if( !$cat_model->save( $data ) )
{
return NULL;
}
$categories = JCategories::getInstance( 'Content' );
$subcategory = $categories->get( $cat_model->getState( "category.id" ) );
return $subcategory;
}
答案 3 :(得分:0)
您也许可以使用category.php文件中的 save()。
档案位置:root\administrator\components\com_categories\models\category.php
它保存提供给它的表单数据!
JOS_assets表用于存储创建的每个资产的ACL。
如果在以编程方式创建类别时不更新此表,则将应用默认ACL。当您稍后在管理面板中打开并保存该类别时,ACL将更新为核心Joomla !.
您可以非常轻松地创建SQL查询,并更新资产表。一旦你在phpmyadmin中打开表的内容,它就很容易理解。