2013-02-21 152 views
2

有誰知道如何以編程方式正確地向數據庫插入新的內容類別? 對於類別表中的每個帖子,還有一個帖子保存在資產表中,並且設置了lft和rgt。 是否有任何原生Joomla類可以用來代替普通SQL?如何在Joomla 2.5中添加類別

回答

0

您也許可以在category.php文件中使用save()

文件位置:root\administrator\components\com_categories\models\category.php

它節省了提供給它的表單數據!

JOS_assets表用於存儲創建的每個資產的ACL。

如果在編程式創建類別時未更新此表,則將應用默認ACL。之後當您在管理面板中打開並保存該類別時,ACL將會更新,正如核心Joomla!應該已經更新一樣。

雖然您可以非常輕鬆地創建SQL查詢並更新資產表。一旦你在phpmyadmin中打開表格的內容就很容易理解。

+2

請不要這樣做。應始終不要直接觸摸資產表,只能通過使用具有資產字段的表進行修改。管理嵌套集合並非一帆風順。 – Elin 2013-02-21 22:43:02

2

請僅使用本地類,這些類將爲您無縫地處理。只要你添加類別,整個事情將被自動處理。看看任何核心組件,看看如何。

使用sql更新資產表並不容易,它都是非常特別的管理和複雜的外鍵系列表的一部分。

擴展JTable或JTableContent來處理這個問題。

1

這是我爲此創建的一個函數,在一些挖掘&實驗之後。

它使用核心類,所以它需要訪問它們(對我來說它基本上是Joomla組件的一部分)。

心靈,它是爲Joomla 3,爲Joomla 2.5之前,您需要更改JModelLegacyJModel

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; 
} 
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 
} 

你自然會想要得到的數據片正確設置,但這些是設置的核心部分。