在Category List组件中添加where查询

时间:2013-05-16 03:54:46

标签: php mysql joomla

我在Category List组件中添加了新参数,

这是一个组合框 过滤器类型

  1. 全部
  2. 本月
  3. 本周
  4. 过去
  5. 我可以使用代码$ params-> get('filter_type')来获取值。

    现在我陷入了在com_contents中添加自定义查询位置的问题。这可能吗?

    谢谢!

2 个答案:

答案 0 :(得分:0)

此处没有太多内容,但这是一般方法:

$sql = 'SELECT whatever FROM com_contents';
switch ($params->get('filter_type')) {
case 'This Month':
  $sql .= ' WHERE EXTRACT(YEAR_MONTH FROM my_date) = EXTRACT(YEAR_MONTH FROM CURRENT_DATE)';
  break;
case 'This Week':
  $sql .= ' WHERE YEARWEEK(my_date) = YEARWEEK(CURRENT_DATE)';
  break;
case 'Past':
  $sql .= ' WHERE <whatever "past" means>';
  break;
}
... and then execute the query

请注意,case选项没有All;那是因为它不需要WHERE子句。

答案 1 :(得分:0)

当您查看#__categories表时,您会看到自定义参数以json格式存储在params列中。

您有两种解决方案:

  • 解析所有类别参数(使用本机JCateogies或自定义代码)。请注意,这可能对性能不利
  • 提出能够从json数据中检索参数的智能SQL查询

在这两种情况下,您都必须创建自己的类别列表视图

ad 1(未测试):

// Get Extension Categories helper
$catInstance = JCategories::getInstance($extension);

// Get Root
$catRoot = $catInstance->get('root');

// Get Children
$categories = $catRoot->getChildren(true);

// Uncompress parameters and set duration
foreach ($categories as $childId => &$child)
{
    $params = $child->getParams();
    $child->duration = $params->get('duration', 0);
}

// Sort by duration
JArrayHeper::sortObjects($categories, 'duration', $direction = 1);