Создайте Joomla! Статья

Я создал свой собственный компонент. Когда я добавляю новую запись к моему компоненту, я также хочу, чтобы она создала новую статью в joomla (то есть используя com_content).

Я обнаружил это при переполнении стека. Программируя добавление статьи в Joomla, которая объясняет, как это сделать. Код имеет смысл и выглядит так, как будто он будет работать. Проблема состоит в том, что, как только методы начинают вызываться, которые содержатся в com_content, все относительные URL-адреса в com_content ломаются, а joomla выдает ошибку.

Кто-нибудь знает способ преодолеть это? Комментарий из указанной выше ссылки предполагает, что изменение текущего рабочего каталога на com_content, прежде чем включать его, будет работать, но я не уверен на 100%, как это сделать.

Related of "Создайте Joomla! Статья"

Невозможно изменить рабочий каталог, потому что его константа. Чтобы обойти эту проблему, вы можете вообще не использовать ContentModelArticle и вместо этого использовать только класс таблицы:

$table = JTable::getInstance('Content', 'JTable', array()); $data = array( 'catid' => 1, 'title' => 'SOME TITLE', 'introtext' => 'SOME TEXT', 'fulltext' => 'SOME TEXT', 'state' => 1, ); // Bind data if (!$table->bind($data)) { $this->setError($table->getError()); return false; } // Check the data. if (!$table->check()) { $this->setError($table->getError()); return false; } // Store the data. if (!$table->store()) { $this->setError($table->getError()); return false; } 

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

Чтобы изменить порядок в категории:

  $table->reorder('catid = '.(int) $table->catid.' AND state >= 0'); 

Ошибка, которую я получаю, говорит:

Файл не найден /var/www/administrator/com_mynewcomponent/helpers/content.php

Я столкнулся с проблемой, создав пустой файл в этом месте для подавления сообщения об ошибке и вручную включив /var/www/administrator/com_content/helpers/content.php инструкцию require_once .

 $table = JTable::getInstance('Content', 'JTable', array()); 

не работает для меня в Joomla 2.5, но

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

работал.

(Вероятно, это комментарий к принятому ответу, но я не могу оставлять комментарии)

Поддержка Joomla 2.5 и Joomla 3.0

JTableContent не загружается автоматически до Joomla! версии 3.0, поэтому он должен включать:

 if (version_compare(JVERSION, '3.0', 'lt')) { JTable::addIncludePath(JPATH_PLATFORM . 'joomla/database/table'); } $article = JTable::getInstance('content'); $article->title = 'This is my super cool title!'; $article->alias = JFilterOutput::stringURLSafe('This is my super cool title!'); $article->introtext = '<p>This is my super cool article!</p>'; $article->catid = 9; $article->created = JFactory::getDate()->toSQL(); $article->created_by_alias = 'Super User'; $article->state = 1; $article->access = 1; $article->metadata = '{"page_title":"","author":"","robots":""}'; $article->language = '*'; // Check to make sure our data is valid, raise notice if it's not. if (!$article->check()) { JError::raiseNotice(500, $article->getError()); return FALSE; } // Now store the article, raise notice if it doesn't get stored. if (!$article->store(TRUE)) { JError::raiseNotice(500, $article->getError()); return FALSE; }