Я создал свой собственный компонент. Когда я добавляю новую запись к моему компоненту, я также хочу, чтобы она создала новую статью в joomla (то есть используя com_content).
Я обнаружил это при переполнении стека. Программируя добавление статьи в Joomla, которая объясняет, как это сделать. Код имеет смысл и выглядит так, как будто он будет работать. Проблема состоит в том, что, как только методы начинают вызываться, которые содержатся в com_content, все относительные URL-адреса в com_content ломаются, а joomla выдает ошибку.
Кто-нибудь знает способ преодолеть это? Комментарий из указанной выше ссылки предполагает, что изменение текущего рабочего каталога на com_content, прежде чем включать его, будет работать, но я не уверен на 100%, как это сделать.
Невозможно изменить рабочий каталог, потому что его константа. Чтобы обойти эту проблему, вы можете вообще не использовать 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');
работал.
(Вероятно, это комментарий к принятому ответу, но я не могу оставлять комментарии)
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; }