1

我在 Drupal6 中有一个工作人员列表。

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

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

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

4

3 回答 3

0

要在没有您自己的 PHP 代码的情况下完全在 Drupal 内部解决此问题,您将需要 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 挂钩页面,查找此节点元素,拦截它,并仅显示联系人 + 名字。

于 2009-07-29T02:15:07.033 回答
0

另一种方法是使用 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);
}
于 2009-07-29T03:56:13.747 回答
0

我在尝试将 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”

希望这可以帮助。

于 2010-03-11T10:38:11.053 回答