Почитать другие заметки или статьи

В процессе работы над одним из своих плагинов мне понадобилось программно добавлять статью в стандартном менеджере материалов. Поскольку мой плагин должен был работать, как под Joomla 3 , так и под Joomla 4 выяснились определенные нюансы и отличия при реализации под разные версии CMS.

Для будущих поколений я написал небольшую функцию, которая выполняет поставленную задачу.

    use Joomla\CMS\Factory;
    use Joomla\CMS\Table\Table;
    
    function addArticle() {

        $introtext = 'Вступительный текст вашей статьи';
        $fulltext = 'Полный текст вашей статьи';
        $title = 'Заголовок вашей статьи';

        $user = Factory::getUser(); // Получаем объект текущего пользователя

        $article = Table::getInstance('content');

        $article->title = $title; // Добавляем заголовок
        $article->alias = JFilterOutput::stringURLSafe($title); // Создаем алиас из заголовка
        $article->introtext = $introtext; // Добавляем вступительный текст
        $article->fulltext = $fulltext; // Добавляем полный текст
        $article->created_by = $user->id; //  Указываем автора
        $article->modified_by = $user->id; // Также указываем того, кто вносил изменения. Это один и тот же пользователь

        // Ниже интересный фрагмент
        // Я добавляю статью в категорию "Uncategorised" , которая в Joomla 3 имела id = 1 ,
        // а вот в Joomla 4 у нее стал id = 2

        if (JVersion::MAJOR_VERSION > 3) {
            // Joomla 4
            $article->catid = 2; // id категории
            $article->metadata = '{"robots":"","author":"","rights":""}';
        } else {
            // Joomla 3
            $article->catid = 1; // id категории
            $article->metadata = '{"page_title":"","author":"","robots":""}';
        }

        $article->created = Factory::getDate()->toSQL(); // Дата создания
        $article->state = 1; // Статус : опубликовано
        $article->access = 1; // Доступ разрешен
        $article->language = '*'; // Языки: все

        // Проверка данных на корректность
        if (!$article->check()) {
            echo 'Отправленные данные не прошли проверку';
            die();
        }

        // Запись в базу данных
        if (!$article->store(TRUE)) {
            echo 'Запись в базу данных завершилась с ошибкой';
            die();
        }

        // Далее фрагмент, который необходимо запускать исключительно под Joomla 4
        // Если не добавить запись в таблицу workflow_associations
        // то в административной панели в списке статей статья будет не видна

        if (JVersion::MAJOR_VERSION > 3) {
            $object = new stdClass();
            $object->item_id = $article->id;
            $object->stage_id = 1;
            $object->extension = 'com_content.article';

            Factory::getDbo()->insertObject('#__workflow_associations', $object);
        }
    }

Заключение

Как видим, сложного ничего нет. Хочу отметить, что использовались так называемые «deprecated» методы. Например, объект пользователя в Joomla 4 я бы получил немножко по другому.

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

https://vk.com/sitogon

С уважением, Владимир Егоров