【问题标题】:How Do I Style An Email Field in Drupal?如何在 Drupal 中设置电子邮件字段的样式?
【发布时间】:2009-07-28 23:27:15
【问题描述】:

我有一个 Drupal6 中的员工列表。

我需要设置一个节点的样式,以便工作人员的电子邮件字段显示为“联系人[全名字段的第一个单词]”。单击它会打开一个 mailto:// 链接。顺便说一句,我知道这不是推荐的程序,因为联系表格或验证码会更有效,但我的客户需要它。

是的,我也在使用 CCK 模块和 CCK 电子邮件模块。

所以,我有一个使用自定义内容类型的员工列表。我有一个使用 CCK 电子邮件模块的电子邮件字段。当我显示工作人员的节点时,它只显示电子邮件地址。如果工作人员名为“Jonathan McDaniels”,我的客户想让它说“联系 Jonathan”,以此类推每个工作人员的每个节点。当点击“Contact Jonathan”或“Contact Sara”时,它应该执行普通的 mailto:// 超链接操作。

【问题讨论】:

    标签: drupal-6 cck


    【解决方案1】:

    另一种方法是使用 PHP。您可以在主题文件夹中创建一个文件 node.tpl.php,将其从 garland 主题复制过来。但是,在它的顶部添加这个调用:

    require_once('node_hooks.php');
    

    现在在您的主题文件夹中创建一个文件 node_hooks.php。现在,这为您提供了对给定节点的巨大权力。您应该通过在 node_hooks.php 文件中执行此操作来开始学习 $node 变量:

    <?php
        print_r($node);
    

    刷新您的节点页面,然后在浏览器中查看源代码。这将显示 $node 中的对象和每个数组元素。

    在我的例子中,我有一个类型为“staff”的节点,因为我在创建它时就是这么称呼它的。我还有一个名为 CCK Email 的特殊 CCK 字段,并用它创建了一个名为 field_staff_email 的字段。这是存储像 jonathan@test.com 这样的值。因此,正因为如此,我可以将其添加到我的 node_hooks.php 文件中以对内容进行搜索和替换,以便我得到“联系乔纳森”而不是电子邮件地址:

    <?php
    
    if ($node->type == 'staff') {
        adjustStaffContactField($node, $content);
    }
    
    function adjustStaffContactField(&$node,&$content) {
        $asWords = explode(' ',$node->title);
        $sContact = htmlentities(strip_tags($asWords[0]));
        $sContact = trim($sContact);
        $sContact = "Contact $sContact";
        $sLink = $node->field_staff_email[0]['email'];
        $sContact = "<a href='mailto:$sLink'>$sContact</a>";
        $sLookingFor = "<a href=\"mailto:$sLink\">$sLink</a>";
        $content = str_replace($sLookingFor, $sContact, $content);
    }
    

    【讨论】:

      【解决方案2】:

      要完全在 Drupal 内部解决此问题,无需您自己的 PHP 代码,您将需要 Drupal 6 中的这些模块:

      1. CCK 模块
      2. CCK 链接模块
      3. CCK 令牌模块

      很遗憾,CCK 电子邮件模块无法解决此问题。

      复制到站点/所有/模块并激活后,您可以为员工获取自定义内容类型,并创建一个字段员工电子邮件作为“链接”类型。然后,将该链接的标题设置为静态标题并将文本设置为:

      Contact [title]
      

      在默认值中,将员工电子邮件 URL 设置为:

      mailto:test@test.com
      

      并设置帮助文本来解释默认格式要求。请注意,如果他们在没有 mailto: 的情况下输入此错误,则链接最终将作为节点传递,这是不正确的。也许有人可以想出一个钩子来在 PHP(或表单加载时的 Javascript)的这个字段上测试这个,如果忘记了就动态交换它。

      现在,对于只使用名字而不是全名,您有几个选择。您可以使用 field_staff_firstname 和 field_staff_lastname(您创建的自定义文本字段)而不使用节点的标题(又名 [title] 令牌)。另一种方法是在表单加载时用 PHP 或 Javascript 挂钩页面,查找此节点元素,拦截它,并仅显示联系人 + 名字。

      【讨论】:

        【解决方案3】:

        我在尝试将 cck 字段转换为 mailto 链接时遇到了同样的问题。我找到了这篇文章,但找到了另一种相当简单的方法。它是通过覆盖 cck 主题模板来完成的:content-field.tpl.php。这是输出字段值的模板,因此您可以对其进行编辑以更新所需的值。将模板复制到你自己的主题文件夹中(不要覆盖原来的),然后我替换了这一行:

                  <?php print $item['view'] ?>
        

        (这是我模板中的第 42 行),带有:

                     <?php
                 // new lines for email field to turn it into a mailto link
                 ?>
                 <?php if ($field_name=='field_email') : ?>
                    <?php // print_r($item);?>
                    <?php print "<a href='mailto:" . $item['value'] . "'>". $item['value'] ."</a>"; ?>
                <?php else : ?>
                <?php
                // original line
                ?>
              <?php print $item['view'] ?>
                <?php endif; ?>
                <?php
                // end edit
                ?>
        

        在本例中,我的字段名为“field_email”

        希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-10-02
          • 2011-05-22
          • 2020-01-19
          • 2021-11-17
          • 1970-01-01
          • 2014-03-10
          • 2015-11-08
          • 1970-01-01
          相关资源
          最近更新 更多