我需要获取当前的文章类别ID,在我使用的较旧的joomla版本中:
<?php $catid = JRequest::getInt('catid'); echo $catid; ?>
但在Joomla 3.2中我得到0。
答案 0 :(得分:6)
您可以通过利用文章模型实例被缓存的事实来消除额外的数据库查询,因此当前文章的查询结果也是如此。因此,使用内容模型类来获取您所追求的内容。
$app = Jfactory::getApplication();
$input=$app->input;
if ($input->getCmd('option')=='com_content'
&& $input->getCmd('view')=='article' ){
$cmodel = JModelLegacy::getInstance('Article', 'ContentModel');
$catid = $cmodel->getItem($app->input->get('id'))->catid;
}
注意,如果您在呈现应用程序之前从系统插件中调用此方法,则还必须使用require_once来包含内容模型。上述代码在大多数情况下都可以正常使用,例如模板或内容插件。
答案 1 :(得分:1)
我知道这是一个老帖子,但它帮助我找出了我需要的东西。
获取catid,view和layout:
$a = JFactory::getApplication();
$input=$a->input;
$catId = $input->getCmd('id');
$view = $input->getCmd('view');
$layout = $input->getCmd('layout');
答案 2 :(得分:0)
这取决于您的背景。在joomla 3中,当您显示文章时,类别ID不在www查询中。所以你需要从文章项目中获取它。要调查某些变量中catid是否可用,您可以尝试:
<?php print_r($this); ?>
或
<?php print_r(get_defined_vars()); ?>
要直接在模板中获取catid,如果上面的输出中没有catid,您可能会执行以下操作:
$input=Jfactory::getApplication()->input;
if($input->getCmd('option')=='com_content'
&& $input->getCmd('view')=='article' ){
$db=JFactory::getDbo();
$db->setQuery('select catid from #__content where id='.$input->getInt('id'));
$catid=$db->loadResult();
}
(这会产生一些额外的数据库流量) 尊重乔纳斯
答案 3 :(得分:0)
试试这个
<?php echo $this->item->catid;?>
这项工作在blog_item.php中的类别文件夹,以及文章文件夹的blog.php。
答案 4 :(得分:0)
你必须仔细查看网址。
代替:
<?php
$catid = JRequest::getInt('catid');
echo $catid;
?>
可能是:
<?php
$catid = JRequest::getInt('id');
echo $catid;
?>
以下是我拥有的示例网址:
index.php?option=com_content&view=category&layout=blog&id=8&Itemid=103
您可以在 id=8