【问题标题】:Programmatically adding an article to Joomla以编程方式将文章添加到 Joomla
【发布时间】:2011-10-25 21:18:26
【问题描述】:

我对 Joomla 非常陌生(坦率地说,我刚开始探索使用 Joomla 的可能性)并且需要帮助以编程方式将文章添加到 Joomla 后端表(请参阅下面的详细信息)。同样,我想了解列的值应该如何:

  • parent_id
  • ft
  • rgt
  • 级别

为表jos_assets (#__assets) 生成,以及它们的功能角色是什么(例如,它们是“指针/索引”,类似于,例如,唯一标识文件的 os inode 还是更多功能属性例如识别类别、子类别等)

使用以下简化示例来说明我正在尝试做的事情可能会有所帮助。假设我们有一个程序可以收集各种关键信息,例如网络文章作者的姓名、文章的主题类型、文章的日期以及文章的链接。我希望能够扩展这个程序,以编程方式将这些信息存储在 Joomla 中。目前,此信息存储在自定义表中,用户可以通过自定义 php 网页使用搜索条件(例如按作者姓名)在一定日期范围内查找感兴趣的文章。然后将显示此搜索的结果以及指向实际文章的超链接。文章本地存储在网络服务器上,不是外部链接。存储在自定义表中的超链接部分包括物理文档的相对路径(相对于 Web 根目录),例如:

Author   date         type    html_file
Tom      08-14-2011   WEB     /tech/11200/ar_324.html
Jim      05-20-2010   IND     /tech/42350/ar_985.html

等等

Joomla 在编写自定义 php 搜索和演示页面以及趋势等方面提供了所有优势,我们真的很想改用它。似乎在其他表格中,例如 #__assets#__content 可以通过编程方式填充,以从我们现有的 php 程序(用于编译数据)填充 Joomla,然后使用 Joomla。

非常感谢任何示例、建议和帮助

最诚挚的问候 加尔

【问题讨论】:

标签: joomla1.5 joomla1.6 joomla-template


【解决方案1】:

只是初步说明:Joomla 1.6/1.7 非常相似。 1.5没那么多。我假设是 1.6/1.7,因为这是我推荐的新项目的基础。

首先,您需要在能够访问 Joomla 框架的情况下运行。您可以通过组件、模块或引导它的 cron 或其他方式来完成此操作。至于怎么做,我就不说了。

但是一旦你这样做了,创建一篇文章就相当简单了。

<?php
require_once JPATH_ADMINISTRATOR . '/components/com_content/models/article.php';

$new_article = new ContentModelArticle();

$data = array(
    'catid' => CATEGORY_ID,
    'title' => 'SOME TITLE',
    'introtext' => 'SOME TEXT',
    'fulltext' => 'SOME TEXT',
    'state' => 1,
);
$new_article->save($data);

实际的字段列表会比这长一点(必填字段等),但您应该从 Joomla 框架中获得合理的错误消息等,说明这一点。

总之:

  • 加载 Joomla 框架,以便您可以访问数据库、组件、模型等
  • 包括 com_content 文章类,它将为您处理验证、保存到数据库等
  • 创建文章实例,并根据需要填写必填字段
  • 调用 save()

现在我想了想,这可能会在 1.5 中工作......

【讨论】:

  • 不起作用,因为 com_content article.php 尝试使用相对位置来包含文件。您需要在包含它之前将当前工作目录更改为 com_content 目录,然后在完成站点的其余部分后更改回来
  • 在 Joomla 1.5 中(不能代表任何其他版本),article.php 文件位于基本components 目录下,而不是administrator
  • @Benubird - 你能进一步解释一下吗?我尝试使用代码但由于无法加载相对路径而出错
  • 请注意,在 1.6+ 中,您不能直接导入到内容表中,还必须添加到资产表中,这必须使用 API 完成>
【解决方案2】:

找到了一种更好的方法来做到这一点而不会出现任何错误Create a Joomla! Article Programatically

$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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 2012-01-15
    • 2012-12-25
    • 1970-01-01
    • 2012-09-20
    • 2011-01-18
    相关资源
    最近更新 更多