Php 如何从特定类别joomla获取文章

Php 如何从特定类别joomla获取文章,php,mysql,joomla,Php,Mysql,Joomla,在Joomla2.5中,是否有任何内置函数来获取特定类别中的所有文章。 我不想使用自定义查询从数据库中获取文章。请查看:/modules/mod_articles\u category,这是一个成熟且相当缓慢的实现。您可能希望使其更简单: 从catid=%s和state=1的_内容中选择introtext、params和 您可能希望添加一些对“向上发布”字段等的检查,但如果您对管理已发布/未发布感到满意,并且不使用“向上发布/向下发布”,则无需执行此操作 确保正确实现该模块以利用Joomla缓存

在Joomla2.5中,是否有任何内置函数来获取特定类别中的所有文章。
我不想使用自定义查询从数据库中获取文章。

请查看:/modules/mod_articles\u category,这是一个成熟且相当缓慢的实现。您可能希望使其更简单:

从catid=%s和state=1的_内容中选择introtext、params和

您可能希望添加一些对“向上发布”字段等的检查,但如果您对管理已发布/未发布感到满意,并且不使用“向上发布/向下发布”,则无需执行此操作


确保正确实现该模块以利用Joomla缓存,即使该查询速度很快,也最好避免在adlib中重复该查询。有关模块缓存的更多详细信息

我不确定您如何设置滑块来回答实际问题:

$db = JFactory::getDbo();     
$query = $db->getQuery(true);     
$query->select('*')
      ->from($db->quoteName('#__content'))
      ->where($db->quoteName('catid') . ' = 2');    
$db->setQuery($query);     
$rows = $db->loadObjectList();

foreach ( $rows as $row ) {
    echo $row->introtext;
}
有一个内置函数,可以使用route.php获取文章,我相信这就是Accordions等的使用方法,但是对于最简单的方法,请使用上面的方法

注意:不要忘记将catid值从2更改为适合您需要的值


希望这有帮助

我会使用文章模型

JLoader::import('joomla.application.component.model');
JModelLegacy::addIncludePath(JPATH_SITE.'/components/com_content/models', 'ContentModel');
$model = JModelLegacy::getInstance('Articles', 'ContentModel');
$model->getState();
$model->setState('list.limit', 10);

$articles = $model->getItems();

如果您正在创建一个模块,您可以只创建一个具有类型项目类别的模块。然后,在右侧,单击筛选选项,然后在那里选择要显示的类别。

我创建了一个小函数来获取类别并返回所有带有自定义字段的文章

function getArticlesByCategory($categoryId, $limit = "")
{
    if (is_int($limit) && !empty($limit)) {
        $limit = "LIMIT $limit";
    }

    $articles = JFactory::getDBO()->setQuery('
    SELECT
        C.*,
        CONCAT(
            "{",
            GROUP_CONCAT(CONCAT(\'"\',F.name,\'"\', ":",\'"\',V.value,\'"\')),
            "}"
        ) AS \'additional_fields\'
    FROM
        #__content AS C
    LEFT JOIN #__fields_values AS V
    ON
        V.item_id = C.id
    LEFT JOIN #__fields AS F
    ON
        F.id = V.field_id
    WHERE
        C.catid = \'' . $categoryId . '\' AND F.context = "com_content.article"
    GROUP BY
        C.id ' . $limit
    )->loadObjectList();

    if($articles){
        foreach ($articles as $article) {
            $article->additional_fields = json_decode($article->additional_fields);
        }
    }

    return $articles;
}
用法

$categoryId = 9;
$limit = 4;
getArticlesByCategory(9,2);
在Joomla上测试!3.8.11


我不喜欢这样的解决方案,但是Joomla!让我这么做。

扩展where'catid=2'的最佳方式是什么,以便只获取已发表的文章,并将它们按最新文章的顺序排在第一位?事实上,我自己刚刚解决了这个问题:简单地说,'where'catid=2,state=1'