Программно добавить статью Joomla из CLI

Я хочу иметь возможность добавлять многие статьи программно в Joomla из командной строки, используя функцию cli в Joomla CMS.

Я в основном использую Создайте Joomla! Статья программно но мой скрипт закрывается после создания только одной статьи со строкой ошибки

Ошибка при отображении страницы ошибки: приложение Instantiation
Ошибка: ошибка создания приложения

Это код, который я запускаю из папки / cli в Joomla.

Я использую Joomla 3.4

<?php
const _JEXEC = 1;

if (file_exists(dirname(__DIR__) . '/defines.php'))
{
require_once dirname(__DIR__) . '/defines.php';
}

if (!defined('_JDEFINES'))
{
define('JPATH_BASE', dirname(__DIR__));
require_once JPATH_BASE . '/includes/defines.php';
}

require_once JPATH_LIBRARIES . '/import.legacy.php';
require_once JPATH_LIBRARIES . '/cms.php';
require_once JPATH_CONFIGURATION . '/configuration.php';


class AddArticle extends JApplicationCli
{
public function doExecute()
{
$count = 10;
while ($count > 0)
{
$count--;

$jarticle                   = new stdClass();
$jarticle->title            = 'New article added programmatically' . rand();

$jarticle->introtext        = '<p>A programatically created article</p>';

$table = JTable::getInstance('content', 'JTable');
$data = (array)$jarticle;

// Bind data
if (!$table->bind($data))
{
die('bind error');
return false;
}

// Check the data.
if (!$table->check())
{
die('check error');
return false;
}

// Store the data.
if (!$table->store())
{
die('store error');
return false;
}
}
}
}

JApplicationCli::getInstance('AddArticle')->execute();

2

Решение

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

https://github.com/joomla/joomla-cms/issues/7028

Необходимо зарегистрировать приложение следующим образом, если приложение командной строки использует JTable:

class MakeSql extends JApplicationCli
{

public function __construct()
{
parent::__construct();
JFactory::$application = $this; // this is necessary if using JTable
}

public function doExecute()
{
$db = JFactory::getDbo();
// ... etc etc ...

Я сделал это, и это работало нормально.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]