php之创建一个 Joomla!文章程序化

kerrycode 阅读:233 2025-06-02 22:19:02 评论:0

我已经创建了自己的组件。当我向我的组件添加一条新记录时,我还希望它在 joomla 中创建一篇新文章(即使用 com_content)。

我在堆栈溢出时发现了这个 Programmatically adding an article to Joomla这解释了如何去做。代码很有意义,看起来它会起作用。问题是,一旦开始调用包含在 com_content 中的方法,com_content 中的所有相对 URL 就会崩溃,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; 
} 

请注意,上面的代码不会触发保存前/保存后事件。但是,如果需要,触发这些事件应该不是问题。另外值得注意的是,published_up 字段不会自动设置,类别中的文章也不会重新排序。

重新排序类别:

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


标签:PHP
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号