2013-02-21 8 views
2

Кто-нибудь знает, как правильно вставлять новые категории контента в БД программно? Для каждого сообщения в таблице категорий также сохраняется сообщение, сохраненное в таблице активов с набором lft и rgt. Есть ли какой-либо родной класс Joomla, который я могу использовать для этого вместо простого SQL?Как добавить категории в Joomla 2.5

ответ

0

Возможно, вы используете save() в категории.php. расположение

Файл: root\administrator\components\com_categories\models\category.php

Он сохраняет данные формы, подаваемые на него!

Таблица JOS_assets предназначена для хранения ACL для каждого созданного актива.

Если вы не обновляете эту таблицу при программном создании категории, применяется ACL по умолчанию. И когда вы откроете и сохраните категорию на административной панели, ACL будет обновляться, как и должно было бы быть с помощью ядра Joomla !.

Вы можете легко создать запрос SQL и обновить таблицу активов. Его легко понять, как только вы откроете содержимое таблицы в phpmyadmin.

+2

Пожалуйста, не делайте этого. Таблицу активов никогда нельзя трогать напрямую, а изменять ее можно только с помощью таблицы с полем активов. Совсем не просто управлять вложенными наборами. – Elin

2

Пожалуйста, используйте только родные классы, категории которых будут обрабатывать для вас без проблем. Как только вы добавите категории, все будет обработано автоматически. Просто посмотрите на какой-либо основной компонент, чтобы увидеть, как это сделать.

Непросто обновить таблицу активов с помощью sql, все это очень конкретно управляется и является частью сложной серии внешних таблиц с ключами.

Расширьте JTable или JTableContent, чтобы справиться с этим.

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

Естественно, вы хотели бы получить части данных установлены правильно, но они являются основными для набора.

Смежные вопросы