Сниппеты

Небольшой код, который облегчает жизнь

Темизация user_register формы

В template.php перезаписываем функцию:

function betpebet_theme(){

  return array(

    'user_register' => array(

      'arguments' => array('form' => NULL),

      'template' => 'user-register', // this is the name of the template

    )

  );

}

Затем создаем файл шаблона user-register.tpl.php. В нем выводим наши поля:

Автоматическая отправка письма при помощи модуля Webform

Недавно возникла необходимость в обратной отправке письма при помощи модуля webform (drupal.org/project/webform), т.е. задача моя была следующей - на сайте имеется блок с формой (созданной при помощи модуля Webform) и полями Имя, Фамилия, e-mail. Значения данных полей нужно было отображать в теле письма, т.е. они должны автоматически вставляться в письмо, а также адрес получателя письма должен был дергаться из поля e-mail. А в теле письма присутствуют изображения.

Заполнить поле в модуле profile при регистрации

Бывает очень полезно, если поле скрытое, например если нужно указать тариф для пользователя.

<?php
function my_module_user($op, &$edit, &$account, $category = NULL) {
  if ($op == 'insert') {
    db_query("INSERT INTO {profile_values} (fid, uid, value) VALUES (%d, %d, '%s')", id_поля, $account->uid, значение);
  }
}
?>

Добавляем поле "Цена" на страницу корзины в Ubercart

На странице /cart в Уберкарте показываются только такие поля:

Общая сумма, и кол-во элементов.

В одном проекте мне потребовалось добавить в таблицу корзины индивидуальную цену одного элемента, вот так:

после некоторого ковыряния, решилось десятком строк.

1. Создаем свой модуль.

2. Реализовываем в нем хук вашмодуль_tapir_table_alter. Это позволяет расширять многие таблицы, созданные через вспомогательный конструктор таблиц - tapir. Как вы могли догадаться, корзина в Уберкарте сделана именно через tapir.

3. Делаем хук похожим на мой:

Удаление ссылки - “username’s blog” или Блог пользователя...

Как же удалить ссылку Блог пользователя такого то? Очень просто.

В template.php добавляем функцию:

<?php
function моятема_links($links, $attributes = array()) {
// Удаление ссылки на блог пользователя
if (isset($links['blog_usernames_blog'])) {
unset($links['blog_usernames_blog']);
}
return theme_links($links, $attributes);
}
?>

Осталось только сбросить кеш.

Сниппет: показывать блок только определенной роли

Всем привет, сегодня я столкнулся с проблемой отображения блока для созданной роли "moderator". Так вот, в друпале, по умолчанию всем зарегестрированным пользователям автоматически присваевается роль "authenticated user", т.е. если я в видимости блока поставлю галочку ->

То, пользователи с ролью "moderator" будут видеть блок для "authenticated user". Для этого используем сниппет:

<?php

global $user;

$notallowed = array('anonymous user','moderator');

$valid=TRUE;

Разворачивающийся тизер при клике на заголовок ноды

Поступила заявка, сделать следующий урок: "Пример: страница с перечнем новостей, но показываются только тайтлы + дата публикации и автор. Нажимаешь на тайтл и под ним разворачивается на js тизер с ссылкой на полную ноду."

Для начала нам нужен будет вот такой код в файле node.tpl.php:

Views: Иконка, если загружена фотография

Потребуется модуль Views Custom Field

 Добавляю поле Customfield: PHP-код, прописываю:

<?php
$c = count( $data->node_data_field_photo_field_photo_fid[0]['data']);
if ($c!=0)print '';
?>

Где node_data_field_photo_field_photo_fid - имя поля. Доступные переменные можно посмотреть в массиве $data.

В css прописать стиль для класса photo.

Результат:

Возможно есть другое решение, но я не нашел.

Убрать автора из переменной $submitted

Просто убираем автора ноды:

<?php if ($submitted): ?>

<?php print format_date($node->created) ?>

<?php endif; ?>

Если хотим изменит вид даты, то:

<?php $date_type = 'custom';

$custom_type = 'l jS F Y';

print format_date($node->created,$date_type,$custom_type);

?>

В результате получим "Tuesday 10th January 2005"

Используя этот метод, вам не нужно менять настройки времени в админке, если вы хотите сохранить их для других нод и т.д.

Показать views программно

Если нужно просто показать созданный views, можно использовать код:

<?php
$view = views_get_view('имя_вьюс');
print $view->preview('default');
?>

Если есть необходимость в передаче аргументов, то:

<?php
$args = array(аргумент(ы));
$view = views_get_view('имя_вьюс');
print $view->preview('default', $args);
?>

<?php
  print views_embed_view('my_view', 'block_1', $arg1, $arg2);
?>

RSS-материал