Создание категорий, подкатегорий и статей с помощью PHP в Joomla 3
Создание категорий, подкатегорий и статей в Joomla 3 с помощью PHP

Создание категорий, подкатегорий и статей в Joomla 3 с помощью PHP

  1. Постановка задачи о динамическом создании категорий, подкатегорий и статей в Joomla
  2. Вариант решения динамического создания категорий, подкатегорий и статей в Joomla
    1. Разбор решения динамического создания категорий, подкатегорий и статей в Joomla
  3. OSContent — бесплатное расширение Joomla с решением задачи создания категорий, подкатегорий и статей


Постановка задачи о динамическом создании категорий, подкатегорий и статей в Joomla.

Возможно ли динамическое создание категорий, подкатегорий и статей Joomla с помощью PHP скриптов? Есть ли какой-нибудь пример?

Да, это возможно, но очень сложно, и я бы не советовал этого делать, если вы не очень хорошо знакомы с PHP, так как com_content является самым сложным встроенным расширением в Joomla. Возможно, вы захотите подойти к этому по-другому, расширив некоторые из текущих функций и написав свой собственный класс.

Честно говоря, у меня есть знания php и я использую Joomla, используя интерфейс бэкенда. Я хочу сделать сайт, в котором я добавил некоторые функции с помощью консоли администратора Joomla (меню, страницы и т.д.) и хочу внести небольшие изменения с помощью php скриптов. Есть ли какой-нибудь учебник, чтобы сделать это?

Вариант решения динамического создания категорий, подкатегорий и статей в Joomla.

Это довольно сложный процесс, но вот урезанная версия кода, который я обычно использую. Я не гарантирую, что он будет работать так, как показано, поскольку я вырвал кучу внутренних вещей, которые мы делаем в процессе работы, но это те части, которые необходимы для этого решения.

Вам нужно будет обратиться к таблицам #__categories и #__content, чтобы получить все поля, которые нужно заполнить, и добавить их в массивы $category_data и $article_data.

Следует упомянуть, что можно выполнять это путем вставки записей с помощью jDatabase или jTable, но лучше этого не делать, потому что в этом случае отсутствуют встроенные правила и логика Joomla, такие как проверка уникальности псевдонима и управление ACL для новых элементов контента.

if (!defined('_JEXEC')) {
    define( '_JEXEC', 1 );
    define('JPATH_BASE', realpath(dirname(__FILE__)));
    require_once ( JPATH_BASE .'/includes/defines.php' );
    require_once ( JPATH_BASE .'/includes/framework.php' );
    defined('DS') or define('DS', DIRECTORY_SEPARATOR);
}
$app = JFactory::getApplication('site');

$category_data['id'] = 0;
$category_data['parent_id'] = 0;
$category_data['title'] = 'My Category Title';
$category_data['alias'] = 'my-categegory-title-alias';
$category_data['extension'] = 'com_content';
$category_data['published'] = 1;
$category_data['language'] = '*';
$category_data['params'] = array('category_layout' => '','image' => '');
$category_data['metadata'] = array('author' => '','robots' => '');

$category_id = createCategory($category_data);
if(!$category_id){
    echo "Category create failed!";
}else{
    $article_data = array(
        'id' => 0,
        'catid' => $category_id,
        'title' => 'My article title',
        'alias' => 'my-article-alias',
        'introtext' => 'My intro text',
        'fulltext' => '<p>My full text</p>',
        'state' => 1,
        'language' => '*'
    );
    $article_id = createArticle($article_data);
    if(!$article_id){
        echo "Article create failed!";
    }
}

function createCategory( $data )
{
    $data['rules'] = array(
        'core.edit.state' => array(),
        'core.edit.delete' => array(),
        'core.edit.edit' => array(),
        'core.edit.state' => array(),
        'core.edit.own' => array(1=>true)
    );

    $basePath = JPATH_ADMINISTRATOR.'/components/com_categories';
    require_once $basePath.'/models/category.php';
    $config  = array('table_path' => $basePath.'/tables');
    $category_model = new CategoriesModelCategory($config);
    if(!$category_model->save($data)){
        $err_msg = $category_model->getError();
        return false;
    }else{
        $id = $category_model->getItem()->id;
        return $id;
    }
}
function createArticle($data)
{
    $data['rules'] = array(
        'core.edit.delete' => array(),
        'core.edit.edit' => array(),
        'core.edit.state' => array(),
    );

    $basePath = JPATH_ADMINISTRATOR.'/components/com_content';
    require_once $basePath.'/models/article.php';
    $config = array();
    $article_model = new ContentModelArticle($config);
    if(!$article_model->save($data)){
        $err_msg = $article_model->getError();
        return false;
    }else{
        $id = $article_model->getItem()->id;
        return $id;
    }
}

Разбор решения динамического создания категорий, подкатегорий и статей в Joomla.

Обновленный код теперь создает категорию и статью внутри нее при выполнении как есть. К сведению, если указать действительный ID вместо 0, то вместо добавления категории или статьи будет произведено обновление. Кроме того, правила ACL необязательны... Это скопировано из одного рабочего скрипта, использующего ACL, поэтому оно там есть, это надо учитывать.

Если файл content.php является ВАШИМ файлом, сохраните его где-нибудь и запустите с помощью браузера. Например, в корне вашего сайта и откройте http:\\www.yoursite.com\content.php. В противном случае, просто используйте код в любом PHP-скрипте, в котором нужно создать категорию или статью.

Это решение все еще прекрасно работает в Joomla 3.9.11

OSContent — бесплатное расширение Joomla с решением задачи создания категорий, подкатегорий и статей.

В каталоге расширений Joomla есть по крайней мере одно расширение "OSContent", которое можно использовать в качестве примера:

http://extensions.joomla.org/extensions/miscellaneous/mass-content/18000

OSContent позволяет создавать статьи и категории в большом количестве.

Перевод с английского:
joomla.stackexchange.com

Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню