Drupal - 只允许内容类型的1个节点“特色”

时间:2015-02-19 17:23:21

标签: drupal drupal-7

我有一个Drupal 7网站,其中包含多种自定义内容类型。 对于一个"横幅",有一个字段(复选框)将横幅标记为特色。 (在显示的地方更突出)。

如何限制"横幅广告的内容类型?只允许1个已发布的项目随时出现?

4 个答案:

答案 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易于使用,如果是用于客户端,他们可以非常轻松地将其切换出来而无需修改代码。