我有一个Drupal 7网站,其中包含多种自定义内容类型。 对于一个"横幅",有一个字段(复选框)将横幅标记为特色。 (在显示的地方更突出)。
如何限制"横幅广告的内容类型?只允许1个已发布的项目随时出现?
答案 0 :(得分:1)
您是否正在使用标记模块进行标记?
无论你是不是,你都想要编写一些自定义代码,无论是使用Flags API来确定是否已经有一个标志,或者使用一些自定义SQL或实体查询来拉出标志一切,如果有的话,那么就应该采取相应行动。
答案 1 :(得分:1)
你不能这样做。但请查看显示这些横幅的部分 - 可能它是一个视图,因此将其限制为1。
答案 2 :(得分:0)
据我所知,将需要自定义代码。
在下面的示例中,我正在检查名为“featured_article”的属性,可以使用Custom Publishing Options模块轻松添加。
如果您的“特色”字段只是您添加到节点的标准复选框字段,则需要稍加修改,但逻辑保持不变。
首先,在hook_node_submit中,检查相关的'featured_article'属性是否已启用(将其添加到自定义模块或template.php):
function <THEME_OR_MODULE_NAME>_node_submit($node, $form, &$form_state)
{
// If featured is set, set all other nodes to not featured
if ($form_state['node']->featured_article == 1 && $form_state['node']->type == 'banners') {
<THEME_OR_MODULE_NAME>_set_as_only_featured_node($form_state['node']->nid);
}
}
然后添加上面调用的函数,检查是否启用了其他函数,并根据需要禁用它们:
function <THEME_OR_MODULE_NAME>_set_as_only_featured_node($nid)
{
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'banners')
->propertyCondition('nid', $nid, '!=')
->propertyCondition('featured_article', 1);
$results = $query->execute();
if (!empty($results['node'])) {
foreach ($results as $result) {
$node = node_load(key($result));
$node->featured_article = 0;
node_save($node);
}
}
}
答案 3 :(得分:0)
一种非常简单的方法是设置Nodequeue并将队列设置为仅允许该内容类型的一个项目。 Nodequeue UI易于使用,如果是用于客户端,他们可以非常轻松地将其切换出来而无需修改代码。