Створюйте категорії, підкатегорії та статті за допомогою php


10

Чи можливо динамічно створювати категорії, підкатегорії та статті Joomla за допомогою PHP-скриптів?

Чи є приклад посилання?


2
Так, це можливо, але дуже важко, і я б радив проти цього, якщо ви не дуже знайомі з PHP, як com_contentце найскладніший вбудований розширення в Joomla. Ви можете підійти до цього по-іншому, можливо, розширивши частину поточної функціональності та написавши власний клас
— Лодер

@Lodder дякую за вашу відповідь. Якщо чесно, я знаю php, і я використовую Joomla за допомогою інтерфейсу. Що я хочу зробити, це створити сайт, на якому я додав деякі функції за допомогою консолі адміністратора Joomla (меню, сторінки тощо), і я хочу внести незначні зміни за допомогою php-скриптів. Чи є якийсь підручник для його виготовлення?
— useruseruser

Відповіді:


15

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

Вам потрібно буде переглянути таблиці #__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 потрібно завантажувати, звичайно, тому якщо ви не працюєте в якомусь наявному коді, вам потрібно завантажити його. Я оновив свою відповідь, щоб досягти цього, тож вам добре піти.
— ВВП

Не для цього коду, він використовує моделі Joomla, щоб додати їх так само, як це робить сам Joomla. Ви повинні мати можливість помістити цей код у файл php, заповнити масив $ даними з іншими полями, які ви хочете оновити, та успішно запустити його. Дайте мені кілька хвилин, і я оновлю свою відповідь, щоб включити 100% функціональний код.
— ВВП

Оновлений код тепер створює категорію та статтю в ній, коли виконується як є. FYI, якщо ви вказали дійсний ідентифікатор замість 0 для будь-якого, він оновить цю категорію чи статтю, а не додасть її. Крім того, правила ACL необов’язкові ... Я скопіював це з одного зі своїх скриптів, який використовує ACL, тому це є його, але це також зручно знати.
— ВВП

1
Я можу лише запропонувати вам сформулювати те, що ви хочете досягти, не припускаючи, що шаблони або MVC є його частинами. Плагіни, як правило, найкращий спосіб налаштувати те, що робить Joomla, але чіткість того, що ви хочете зробити, є найважливішим, щоб визначити, що найкраще рішення.
— ВВП

1
Це рішення все ще чудово працює в Joomla! 3.9.11
— AndyGaskell

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.