2009-07-28 74 views
1

我有一个Drupal6职员列表。如何在Drupal中设置电子邮件字段的样式?

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

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

因此,我有一个使用自定义内容类型的职员列表。我在那里使用CCK电子邮件模块的电子邮件字段。当我显示职员的节点时,它只显示电子邮件地址。我的客户想让工作人员在每个工作人员的每个节点都被称为“联系乔纳森”,如果该工作人员被命名为“乔纳森麦克丹尼尔斯”等。当点击“联系乔纳森”或“联系萨拉”时,它应该执行普通的mailto://超链接的东西。

回答

0

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

require_once('node_hooks.php'); 

现在建立在你的主题文件夹中的文件node_hooks.php。这给你一个给定节点的巨大力量。您应该开始通过在您的node_hooks中执行此操作来了解$ node变量。PHP文件:

<?php 
    print_r($node); 

刷新页面节点,然后在其浏览器中做了查看源文件。这将向您显示$ node内的对象和每个数组元素。

在我的情况下,我有一个'职员'类型的节点,因为这就是我创建它时所调用的。我还有一个名为CCK Email的特殊CCK字段,并用它创建一个名为field_staff_email的字段。这存储了像[email protected]这样的值。所以,正因为如此,我可以添加到这个我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); 
} 
0

纯粹解决此问题的Drupal里面没有自己的PHP代码,你将在Drupal 6需要这些模块:

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

不幸的是,CCK电子邮件模块不能解决这个问题。

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

Contact [title] 

在默认值,设置员工邮箱网址:

mailto:[email protected] 

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

现在,只有使用名字而不是全名,你有几个选择。您可以使用field_staff_firstname和field_staff_lastname(您创建的自定义文本字段),而不使用节点的标题(又名[title]标记)。另一种方法是在页面上加载PHP或者在页面加载Javascript,查找这个节点元素,拦截它,并且只显示Contact +名字。

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”

希望这会有所帮助。

相关问题