Тэг ‘drupal’

drupal поиск: search, partial substring, fuzzysearch, apache solr search, sphinxsearch

Поиск в Drupal 7 реализован с возможностью расширения. Возможно добавление сторонних движков (apache solr, sphinxsearch), реализация собственных поисковых индексов. При помощи модулей реализованы не только поиск по слову (из коробки поиск работает по количеству совпадений слов в индексе), но и поиск с учётом морфологии (porterstemmer http://www.phpguru.org/static/PorterStemmer.html , fuzzy search). Читать целиком »

Опубликовано Январь 31, 2013 | автор: levik  |  Комментарий (1) »

CKeditor режет тэги и атрибуты class, id у div - Drupal

При редактировании контента CKeditor режет пустые тэги и некоторые атрибуты (class id) у непустых тэгов.

В редактор CKeditor 4 версии добавлена опция конфига

config.allowedContent = true;

Также можно добавить свои правила обработки контента к правилам по умолчанию (default rules)
CKEDITOR.editorConfig = function( config ) {
config.extraAllowedContent = '*[id](*)'; // удаляем '[id]',
}

Более подробная документация по
http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules

CKeditor 3 версии
config.ignoreEmptyParagraph = false;

WEB WYSIWYG Редакторы

Настроить CKeditor в Drupal

Если используется drupal модуль ckeditor из официального репозитория, настройка значений config, передаваемых в редактор производится на странице admin/config/content/ckeditor после выбора нужного профиля (Advanced/Full) и действия изменить для него.

Далее в панели-спойлере “Дополнительные настройки” в блоке “Пользовательская конфигурация JavaScript” вводим нужные значения config.allowedContent = true; // разрешаем

При использовании других фильтров (на странице профиля CKeditor выбираем Панель “Безопасность” -> фильтры безопасности)

Устанавливаем и включаем модуль Wysiwyg Filter.
Выбираем чекбокс в разделе “Enabled filters” напротив W

В блоке HTML tags размещаем допустимые правила обработки тэгов

@[style|class],
a[!href|target<_blank|title|rel],
div[align

p[align img[src|width|height|alt|title|rel],
h1,h2,h3,h4,br,hr,span,em,strong,
cite,code,blockquote,pre,ul,ol,li,dl,dt,dd

При необходимости ставим галки напротив “color” и “background-color” (или других стилей)

Ниже можно прописать правила для class

rte*,
justify,
image-left,
image-right,
standalone-image

Опубликовано Январь 23, 2013 | автор: levik  |  Нет комментариев »

Drupal 7 Batch API - используем API

https://api.drupal.org/api/drupal/includes!form.inc/group/batch/7

Для групповых операций (которые могут занимать длительное время) рекомендуется разбивать процесс на “порции”. В Drupal имеется встроенный механизм “порционирования” пакетных операций - Batch API

Для примера - конвертацию поля в термин таксономии проведём с использованием DRUPAL Batch API
Читать целиком »

Опубликовано Январь 19, 2013 | автор: levik  |  Нет комментариев »

drupal как сконвертировать поле field в термин таксономии (taxonomy term)

При пакетном импорте в ноды была сохранена информация в текстовом виде, однако в дальнейшем было принято решение использовать её в связках taxonomy (к примеру, брэнды были сохранены как текст.. потребовалось сделать “Каталог брэндов”)

0. сохраняем резервную копию базы данных
Читать целиком »

Опубликовано Январь 15, 2013 | автор: levik  |  Нет комментариев »

Drupal 7 перенос поля field из одного типа в другой

В  Drupal 7 гибкое управление полями достигается за счёт продуманной структуры информации о полях (field) (отличается от структуры CCK в друпал 6, хотя принципы node и taxonomy сохранились). Сохранение полей происходит в базе (да-да) и под каждое поле создаётся как минимум 2 таблицы - об этом чуть ниже. Читать целиком »

Опубликовано Январь 8, 2013 | автор: levik  |  Нет комментариев »

drupal - EntityMetadataWrapperException: Unable to get the data property data as the parent data structure is not set

Ошибка Drupal, связанная с невозможностью доступа к сущности (Entity)

EntityMetadataWrapperException: Unable to get the data property data as the parent data structure is not set. в функции EntityStructureWrapper->getPropertyValue() (строка 442 в файле drupal\sites\all\modules\entity\includes\entity.wrapper.inc).

может быть вызвана рядом причин. Читать целиком »

Опубликовано Декабрь 25, 2012 | автор: levik  |  Нет комментариев »

Drupal - Как удалить shortlink из тэга head

Drupal 7 версии на каждой странице node выводит тэг shortlink, даже если у ноды определён синоним:

<link href="/node/..." rel="shortlink" />

Чтобы убрать вывод shortlink в секции head можно использовать хук
Функцию следует разместить в template.php. Аналогичным способом можно удалить любой элемент из head, не только shortlink.

function {THEMENAME}_html_head_alter(&$head_elements) { // заменить на имя темы
foreach ($head_elements as $key => $element) {
if (isset($element['#attributes']['rel']) && $element['#attributes']['rel'] == 'shortlink') {
unset($head_elements[$key]);
}
}
}

Опубликовано Декабрь 10, 2012 | автор: levik  |  Нет комментариев »

DRUPAL warning: array_keys() [function.array-keys] menu.inc on line 1224

Сайт на друпал (версия в возрасте) стал выдавать предупреждение

…includes/database.mysql.inc on line 174
array_keys() [function.array-keys]: The first argument should be an array in /…/includes/menu.inc on line 1224
Wrong parameter count for min() in file …/includes/menu.inc on line 1224

Что-то с меню :) проблема при разборе массива.

Заходим в includes/menu.inc - в указанной строчке там “пустота” (т.е. menu не присваивается). Получение значений должно происходить в этом же файле в функции menu_get_menu (около 200 строчки начало функции), а около 210 следующий код:
if ($cached = cache_get($cid, 'cache_menu')) {
$_menu = unserialize($cached->data);
}

Если закомментировать первую ветку (в if), то ошибка пропадает. Меню достаётся целиком из базы.
Не забываем вернуть кэширование на место..

Опубликовано Декабрь 1, 2011 | автор: levik  |  Нет комментариев »

Вывести в Ubercart описание категорий в каталоге

Для вывода описания категории в каталоге на странице категории следует настроить вид (View) Taxonomy Term. Для вывода описания категории после каталога сделал следующее:

В настройках вида (Taxonomy Term), который используется для магазина Ubercart выбираем раздел Footer (Подвал php код) и вводим следующее:

$category = taxonomy_get_term(arg(2));
echo "{$category->description}";

Всё.. После этого при редактировании Taxonomy Term в поле Description следует вводить соответствующее описание категории.

Да.. Редактирование SEO-заголовков (и Meta-тэги) и описания категорий искать в Содержание - Таксономия - Список (а не на странице категории). А вот вид (View), если повезет, можно изменить непосредственно на странице категории (если в меню появляются ссылки “Изменить Экспорт Clone”)

Опубликовано Ноябрь 8, 2010 | автор: levik  |  Комментарии (2) »

drupal - шпаргалка по структуре

Из заметок по drupal уже были выбраны некоторые полезности drupal. В этом посте - неполная шпаргалка по структуре drupal.

В drupal все элементы (так называемые Ноды | node) хранятся в специальной таблице node . Начиная с версии __ появилась таблица node_revision(?), в которой хранятся истории изменений (nid -node ID, vid - reVision ID)

Ноды (Node) могут быть  различного типа (type). От самого простой - Page до замысловатых (товар в интернет магазине с кучей характеристик, галерея… )

Таксономия (taxonomy) в drupal - один из наиболее гибких и мощных инструментов. Она позволяет реализовать практически любую каталогизацию (категории в несколько уровней, теги, свойства и т.д.) для выбранного типа node

Таблица vocabulary (?) - “словарики” (терминов таксономии)   содержит типы возможных “терминов” (тэги, категории товаров, разделы и т.д.)

SELECT *
FROM `term_data` td
INNER JOIN `term_hierarchy` th ON td.tid = th.tid
WHERE td.vid =5';
--td.vid - как раз и есть id словаря (
select * FROM `node` n
INNER JOIN `content_type_type1` c1 ON n.nid = c1.nid
INNER JOIN `term_node` tn ON tn.nid = n.nid
--выбираем все ноды, связанные с CCK-типом type1 и таксономией
--(будут дубли, в оригинальном запросе требовалось дополнительное условие)

Таблицы типа content_type_type1 (вместо type1 может быть, например, product) создаются CCK-плагином. Плагин позволяет добавлять дополнительные поля (field_pole, field_newname) - все поля начинаются со префикса field_

таблицы с префиксом view_ относятся к плагину view (вид), который позволяет настраивать отображение группы элементов (нод).

Иногда в таблицах могут присутствовать нестандартные недокументированные поля (добавленные предыдущими разработчиками) - бывает всякое =)

Опубликовано Август 25, 2010 | автор: levik  |  Нет комментариев »