我有一个新闻聚合器项目。 在这个项目中,我有这样的类别。
上面的树显示了用户希望如何聚合新闻。
我将所有选定和未选择的分类法保存在数据库中每个用户的两个不同变量中作为数组宽度函数 variable_set
现在我想在运动分类页面,默认的drupal页面,只显示足球和篮球是他们的类别的节点,并且不会显示网球和排球的节点。
我的意思是覆盖默认分类法页面的行为。 我知道这可能发生在视图模块中,但是分类的数量并不固定。它将在新闻聚合网站的生命周期中越来越多。现在它们的数量超过340种分类法。
现在我写了这段代码。这段代码。这个代码运行良好,但我想在父分类页面,节点显示用户收集了他们的子分类。
function caspian_bartik_menu_alter(&$menu) {
$menu['taxonomy/term/%taxonomy_term']['page callback'] = 'caspian_bartik_term_page';
$menu['taxonomy/term/%taxonomy_term']['access arguments'] = array('access content');
$menu['taxonomy/term/%taxonomy_term']['page arguments'] = array(2);
}
function caspian_bartik_term_page($term){
$voc = taxonomy_vocabulary_load($term->vid);
// here you generate the actual content of the page
// could be done e.g. with an entityfieldquery as follows
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
->fieldCondition('field_category', 'tid', $term->tid , '=')
->fieldCondition('field_category', 'tid', array(135) , 'NOT IN')
->propertyOrderBy('created', 'DESC');
$result = $query->execute();
if (!empty($result['node'])) {
$build['content']['nodes'] = node_view_multiple(node_load_multiple(array_keys($result['node'])), 'teaser');
} else {
$build['content']['status']['#markup'] = t('No results found for term ID !tid.', array('!tid' => $term->tid));
}
return $build;
}
此行不起作用
->fieldCondition('field_category', 'tid', array(135) , 'NOT IN')
感谢您的帮助。
答案 0 :(得分:0)
当你说
时此行不起作用
PHP应用程序是否崩溃,或者您没有得到预期的结果?
这个查询逻辑似乎很奇怪
->fieldCondition('field_category', 'tid', $term->tid , '=')
->fieldCondition('field_category', 'tid', array(135) , 'NOT IN')
想象一下你的$term->tid = 1
。您选择的是field_category
,其中tid为1
和$term->tid NOT IN (135)
。这将为您提供附加到1个类别而非多个的节点...这是您想要的吗?