Drupal snippets

Матеріал з Wiki.Zina
Версія від 15:19, 20 березня 2018, створена >Zina
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)
Перейти до навігації Перейти до пошуку

Темизация

[ред. | ред. код]

Добавить span в пункты меню

[ред. | ред. код]

Необходимо переопределить в template.php функцию темизации пунктов меню (theme_menu_item_link()).

function phptemplate_menu_item_link($link) {
  if (empty($link['localized_options'])) {
    $link['localized_options'] = array();
  }
  $link['localized_options']['html'] = true;
  return l('<span>' . check_plain($link['title']) . '</span>', $link['href'], $link['localized_options']);
}

Убрать ссылку у элемента меню

[ред. | ред. код]

Необходимо переопределить в template.php функцию темизации пунктов меню (theme_menu_item_link()).

function phptemplate_menu_item_link($item) {
  // Адрес для которого нужно убрать ссылку node/34
  if ($item['link_path'] == 'node/34') {
    $attributes['title'] = $item['description'];
    return '<span'. drupal_attributes($attributes) .'>'. $item['title'] .'</span>';
  }
  else {
    return l($item['title'], $item['href'], !empty($item['description']) ? array('title' => $item['description']) : array(), isset($item['query']) ? $item['query'] : NULL);
  }
}

Кнопка поиска картинкой

[ред. | ред. код]
function THEMENAME_form_search_block_form_alter(&$form, &$form_state) {
  $form['actions']['submit']['#type'] = 'image_button';
  $form['actions']['submit']['#src'] = drupal_get_path('theme', 'THEMENAME') . '/images/button-search.png';
}

Исправление темизации submit/button

[ред. | ред. код]

Даже если задать тип кнопки button, Drupal все равно выводит submit, это происходит изза того, что в функции темизации жестко прописан type="submit".

Исправить этот баг можно двумя путями:

1.исправить функцию темизации input’a в include/form.inc:theme_button()

Исправить строку

return '<input type="submit" '. (empty($element['#name']) ...

на

return '<input type="'.$element['#type'].'" '. (empty($element['#name']) ...

2. написать свою функцию темизации (phptemplate_button) в template.php

Добавление на странице нового региона

[ред. | ред. код]

В info-файле темы должны быть строчки вида:

regions[left] = Left sidebar
regions[right] = Right sidebar
regions[content] = Content
regions[footer] = Footer

Если этих строк нет - их нужно добавить, иначе все остальные регионы исчезнут.

Ниже нужно дабавит нечто вроде:

regions[con_top] = Content top

Чтобы содержимое нового региона выводилось на странице нужно в файл page.tpl.php темы добавить строку:

<div id="content_top"><?php echo $con_top?></div>

Чтобы изменения вступили в силу нужно очистить кэш (Администрирование › Настройка сайта › Производительность)

Темизация CCK-полей

[ред. | ред. код]

Для начала необходимо скопировать шаблон полей с модуля CCK (/sites/all/modules/cck/theme/content-field.tpl.php) в каталог с темой. Все изменения вносить в content-field.tpl.php темы.

Например, чтобы добавить каждому значению поля уникальный класс, нужно заменить строку

<div class="field-item <?php print ($count % 2 ? 'odd' : 'even') ?>">

на

<div class="field-item field-item-<?php print $delta; ?> <?php print ($count % 2 ? 'odd' : 'even') ?>">

Выровнять элементы формы в строку

[ред. | ред. код]
function ИМЯМОДУЛЯ_form_alter(&$form, &$form_state, $form_id) {
	dpm($form_id); // показывает ID формы
	dpm($form); // показывает все элементы массива формы
	if ($form_id == 'ID_ФОРМЫ') {
		// Добавить к тэгу <form> class="container-inline"
		$form['#attributes'] = array('class' => array('container-inline'));
	}
}

Вывод списка дочерних терминов на странице термина

[ред. | ред. код]

Block category: Lists (Views)

relationship: Parent term

contextual filters: Taxonomy term: Parent term

fields: taxonomy term: Name

Передача данных из PHP в JS

[ред. | ред. код]

Для подключения JavaScript'ов и передачи параметров в Drupal используется функция drupal_add_js()

PHP код:

drupal_add_js(array(
  'section' => array(
    'param' => 'value'
  )
), 'setting');
  • section — имя секции(не обязательно)
  • param — имя параметра


JavaScript:

alert(Drupal.settings.section.param);

Получить список всех словарей

[ред. | ред. код]
function _get_vocabularis(){
  $vids = array();
  $r = db_query("SELECT v.vid FROM {vocabulary} v");
  while($row = db_fetch_object($r)){
    $vids[] = $row->vid;
  }
  return $vids;
}

Разное

[ред. | ред. код]

Подключить внешние js или css в тему

[ред. | ред. код]

Подключать внешние js/css файлы непосредственно в page.tpl.php нельзя! Все дополнительные файлы подключаются через файл ИМЯ_ТЕМЫ.info. Подключение css (общие):

stylesheets[all][] = ИМЯ_СТИЛЯ.css

Стили только для печати:

stylesheets[print][] = ИМЯ_СТИЛЯ.css

JavaScript:

scripts[] = ИМЯ_СКРИПТА.js

После изменения info-файла необходимо очистить кеш.

Сброс пароль админа

[ред. | ред. код]

Через phpMyAdmin или команду mysql перейти в базу данных сайта и выполнить запрос

UPDATE users SET pass=MD5('NEWPASS') WHERE uid = 1;