2

独自のコンポーネントを作成しました。コンポーネントに新しいレコードを追加するときに、joomla で新しい記事を作成することも必要です (つまり、com_content を使用します)。

私はスタックオーバーフローでこれを見つけまし。コードは理にかなっていて、うまくいくようです。問題は、com_content に含まれるメソッドが呼び出されると、com_content 内のすべての相対 URL が壊れて、joomla がエラーをスローすることです。

これを克服する方法を知っている人はいますか?上記のリンクからのコメントは、現在の作業ディレクトリを含める前に com_content に変更するとうまくいくことを示唆していますが、これを行う方法については 100% 確信が持てません。

4

3 に答える 3

14

作業ディレクトリは定数であるため、変更することはできません。この問題を回避するには、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;
}

上記のコードは、保存前/保存後のイベントをトリガーしないことに注意してください。ただし、それが必要な場合は、これらのイベントをトリガーすることは問題ではありません。また、フィールドpublished_upは自動的に設定されず、カテゴリ内の記事は並べ替えられないことにも注意してください。

カテゴリを並べ替えるには:

 $table->reorder('catid = '.(int) $table->catid.' AND state >= 0');
于 2012-09-28T16:55:08.913 に答える
1

私が得るエラーは言う:

ファイルが見つかりません /var/www/administrator/com_mynewcomponent/helpers/content.php

この場所に空のファイルを作成してエラーメッセージを抑制し、手動でステートメントを含めることで問題を回避しまし/var/www/administrator/com_content/helpers/content.phprequire_once

于 2012-12-02T08:19:52.367 に答える
1

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;
}
于 2016-01-04T21:12:54.380 に答える