Створюйте категорії, підкатегорії та статті за допомогою 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.