如何在Joomla 2.5中添加类别

时间:2013-02-21 13:51:45

标签: joomla joomla2.5

是否有人知道如何以编程方式正确地将新内容类别插入数据库? 对于类别表中的每个帖子,还有一个帖子保存在资产表中,并设置了lft和rgt。 有没有我可以使用的本机Joomla类而不是普通的SQL?

4 个答案:

答案 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中打开表的内容,它就很容易理解。