Добавление категории Joomla средствами PHP
Как быть если нужно добавить много категорий?.. Добавлять через админ часть не очень весело, поэтому лучше попробовать добавить с помощью PHP скрипта.
Код для добавления категории копировал из модели com_categories
$db = JFactory::getDbo(); JTable::addIncludePath(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_categories'.DS.'tables'); $table = JTable::getInstance('Category', 'CategoriesTable'); $title = 'Заголовок категории'; $parentId = 'root'; $level = 1; $data['id'] = 0; $data['title'] = $title; $data['extension'] = 'com_orgpoisk'; $data['access'] = 1; $data['metadata'] = 'com_orgpoisk'; $data['published'] = 1; $data['parent_id'] = $parentId; $data['params'] = '{"target":"","image":""}'; $data['level'] = $level; // Установить новый parent_id , если родительский идентификатор не // совпадает ИЛИ при создании/сохранении как копия . if ($table->parent_id != $data['parent_id'] || $data['id'] == 0) { $table->setLocation($data['parent_id'], 'last-child'); } if (!$table->bind($data)) { $this->setError($table->getError()); return false; } if (isset($data['rules'])) { $rules = new JAccessRules($data['rules']); $table->setRules($rules); } // Проверить данные. if (!$table->check()) { $this->setError($table->getError()); return false; } // Сохранить данные. if (!$table->store()) { echo $table->getError(); $this->setError($table->getError()); return false; } // Перестроить путь для категории: if (!$table->rebuildPath($table->id)) { $this->setError($table->getError()); return false; } // Перестроить пути дочерних элементов категории: if (!$table->rebuild($table->id, $table->lft, $table->level, $table->path)) { $this->setError($table->getError()); return false; } $table->reset();
Этот код можно оформить в виде функции и использовать в цикле для добавления большого количества категорий, например, из csv файла. Делать лучше частями, чтобы не получился тайм-аут выполнения скрипта.