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