У меня есть список сотрудников в Drupal6.

Мне нужно оформить узел таким образом, чтобы поле электронной почты сотрудника отображалось как «Контакт [Первое слово поля полного имени]». При нажатии на нее открывается ссылка mailto: //. Кстати, я знаю, что это не рекомендуемая процедура, потому что контактная форма или капча были бы более эффективными, но мой клиент желает этого.

Да, я использую модуль CCK и модуль электронной почты CCK.

Итак, опять же, у меня есть список сотрудников, использующих настраиваемый тип контента. У меня есть поле электронной почты с помощью модуля электронной почты CCK. Когда я показываю узел сотрудника, он просто показывает адрес электронной почты. Мой клиент хочет, чтобы он говорил: «Свяжитесь с Джонатаном», если сотрудника зовут «Джонатан МакДэниелс», и так далее с каждым узлом каждого сотрудника. Когда щелкают "Связаться с Джонатаном" или "Связаться с Сарой", он должен выполнить обычную гиперссылку mailto: //.

1
Volomike 29 Июл 2009 в 03:27

3 ответа

Лучший ответ

Еще один способ сделать это - использовать PHP. Вы можете создать файл node.tpl.php в папке своей темы, скопировав его из темы гирлянды . Однако в верхней части добавьте этот вызов:

require_once('node_hooks.php');

Теперь создайте файл node_hooks.php в папке с темами. Это дает вам огромную власть над данным узлом. Вы должны начать изучать переменную $ node , сделав это в своем файле node_hooks.php :

<?php
    print_r($node);

Обновите страницу узла, а затем выполните на ней просмотр исходного кода в браузере. Это покажет вам объект и каждый элемент массива внутри $ node.

В моем случае у меня был узел типа «персонал», потому что я так назвал его при создании. У меня также было специальное поле CCK под названием CCK Email, и я использовал его для создания поля с именем 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);
}
0
Volomike 29 Июл 2009 в 07:56

Чтобы решить эту проблему исключительно внутри Drupal без вашего собственного PHP-кода, вам потребуются следующие модули в Drupal 6:

  1. Модуль CCK
  2. Модуль связи CCK
  3. Модуль токенов CCK

К сожалению, модуль электронной почты CCK не решит эту проблему.

После копирования в sites / all / modules и активации вы можете взять свой собственный тип контента для Staff Member и создать поле Staff Email в качестве типа «Link». Затем установите Заголовок этой ссылки на Статический заголовок и установите текст на:

Contact [title]

В качестве значения по умолчанию установите URL-адрес электронной почты персонала на:

mailto:test@test.com

И установите текст справки, чтобы объяснить требования к формату по умолчанию. Обратите внимание, если они введут это неправильно без mailto :, тогда ссылка будет выдана за узел, что неверно. Возможно, кто-то может придумать ловушку, чтобы проверить это в этом поле в PHP (или Javascript при загрузке формы) и поменять его на лету, если он забыт.

Теперь, чтобы использовать только имя вместо полного имени, у вас есть несколько вариантов. Вы можете использовать field_staff_firstname и field_staff_lastname (настраиваемые текстовые поля, которые вы создаете) и не использовать заголовок узла (он же токен [title]). Другой способ - перехватить страницу на PHP или с помощью Javascript при загрузке формы, найти этот элемент узла, перехватить его и показать только Контакт + имя.

0
Volomike 29 Июл 2009 в 07:57

У меня была такая же проблема при попытке превратить поле 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.

Надеюсь это поможет.

Бен

0
Ben 11 Мар 2010 в 13:38