Блог пользователя - olk

Растягиваем основное меню на ширину контента

2 апреля 2013 в 14:06

Репост с моего блога Растягиваем основное меню на ширину контента

Иногда необходимо "растянуть" основное горизонтальное меню сайта на всю ширину основного контента.
Предлагаю решение при помощи небольшого javascript-а.
1. Для начала нам надо немного преобразовать вывод меню, для того что бы в дальнейшем можно было его легче обработать скриптом (нам необходимо ввести дополнительный признак "глубины" пункта меню, что бы обработать только самый верхний уровень меню.
Для этого в своей теме в файле template.php создаем (или переопределяем) функцию
ВАША_ТЕМА_menu_link__main_menu(array $variables)

Оптимизируем дисковое пространство на хостинге

11 марта 2013 в 10:51

Это репост небольшой заметки с моего блога Оптимизируем дисковое пространство на хостинге, там же лежит сам скрипт в zip архиве.

Используйте данный скрипт на свой страх и риск Smile лучше предварительно забэкапить ваши директории.

Речь пойдет о конкретном хостинге it-patrol.ru (но думаю это реализуемо и на других хостингах).

Руссифицируем date_popup

13 сентября 2012 в 22:19

calendar
Иногда возникают вопросы как при установке модуля date (а в частности при включении в качестве виджета поля типа date_popup) руссифицировать всплывающий календарь.
Предлагаю одно из решений.
1. В директории вашей темы создаем файлик с именем (например) date_popup_ru.js следующего содержания.

/**
 * Attaches the calendar behavior to settins ru language
 */

Drupal.date_popup_ru = Drupal.date_popup_ru || {};
(function ($) {
  Drupal.behaviors.date_popup_ru = {
    attach: function (context) {
    if($.datepicker != undefined) {
    $.datepicker.regional['ru'] = {
      closeText: 'Закрыть',
      prevText: '<Пред',
      nextText: 'След>',
      currentText: 'Сегодня',

Виджет Commerce product reference subform

11 сентября 2012 в 14:47

widget
Кроспост с моего сайта Виджет Commerce product reference subform, там же и сам модуль.

Довольно часто при создании небольших интернет магазинов (в которых реализована простая связь 1 к 1 (товар <-> представление товара)), концепция раздельного заведения представления товара и самого товара не совсем удобна.
Далее приводиться одно из решений (на самом деле данное решение «подсмотрено» на сайте www.gizra.com у нашего товарища из Телявива)

Подключение своих шаблонов для страниц 403 и 404

24 апреля 2012 в 17:44

Есть несколько способов создать свои «красивые» страницы для ошибок 403 и 404.
Я расскажу как я это делал через переопределение шаблона.
1. В каталоге текущей темы создаем шаблон для вывода страницы с ошибкой
Я его назвал page--error.tpl.php
Содержимое файла самое простое:

<?php
/**
 * @file
 * $error_code - Error num (403 or 404)
 * $error_content - HTML error content
 */

?>
<div class="page clearfix" id="page-<?php print $error_code;?>">
<div class="content-page-<?php print $error_code;?>">
<h2>
<?php print l($site_name, '<front>', array('attributes' => array('title' => t('Home')), 'html' => TRUE)); ?>
</h2>
<h1><?php print $error_code;?></h1>
<?php print render($error_content); ?>
</div>
</div>

Темизируем форму комментариев Друпал 7

13 апреля 2012 в 14:17
1

Данный материал не учебный, а скорее познавательный. В нем я расскажу о том, как темизировал форму комментариев для сайта www.hotel-prog.ru Т.е. это не руководство как это надо делать, а просто материал о том как это делал я.
Итак из дополнительных модулей я установил:

  • Модуль comment_notify
  • Модуль CAPCHA
  • Модуль ccfcollapse (из ccfilter) - используются внутренние функции и js-функционал для сворачивания полей и формы комментария

Изменяем размер аватар в нодах и комментариях

4 апреля 2012 в 14:24


Иногда бывает необходимо что бы при выводе материалов и комментариев размер (а возможно и вид) автарки отличался от размеров заданных в профиле пользователя.
Одно из решений — использовать модуль image с его пресетами.
Добавляем (или редактируем если он уже есть) файл theme-settings.php в каталоге вашей темы.
Если данный файл есть и в нем есть функция  function Ваша_тема_form_system_theme_settings_alter(&$form, $form_state) , то нижеприведенный код добавляем в данную функцию, иначе добавляем саму функцию.

/**
* @file
* theme-settings.php
*/

function Ваша_тема_form_system_theme_settings_alter(&$form, $form_state){

Сайтик на критику перед сдачей заказчику

16 сентября 2011 в 10:57


Так подстраховаться перед сдачей на выявление мелких несуразностей Smile в ИЕ6- можно не смотреть - не заточен ...
Вологда-лес.РФ

Мультисайтинг на Drupal 7 или как я делал магазин

9 сентября 2011 в 11:33

avr-shop

Косспост с моего блога Мультисайтинг на Drupal 7 или как я делал магазин

Была поставлена следующая задача:
1. Небольшой розничный Интернет-магазин на отдельном домене avr-shop.ru
2. Мелкооптовый магазин на домене avr-shop.com имеющий несколько региональных отделений на субдоменах вида subdomen.avr-shop.com
3. Ассортимент товара одинаковый на всех но по своим ценам и возможностью исключать товар из показа на той или иной площадке.
4. Простейшая корзина покупателя (без систем оплаты)

Решение:
Для решения поставленной задачи была выбрана связка – Drupal 7 + Ubercart на мультисайтинге.
В основном каталоге сайта в директории sites был создан файл sites.php со следующим содержанием:

$sites = array(
'avr-shop.ru'=>'avr-shop.ru', // Розничный магазин
'avr-shop.com'=>'avr-shop.com', // Общий врапер для оптовых магазинов
'spb.avr-shop.com'=>'spb.avr-shop.com', // Первый региональный оптовый магазин
'msk.avr-shop.com'=>'msk.avr-shop.ru', // Второй региональный оптовый магазин
);
?>

Соответственно были созданы аналогичные директории в каталоге sites
avr-shop.ru
avr-shop.com
spb.avr-shop.com
msk.avr-shop.com

Так как большинство таблиц было общими, то при создании мультисайтинга я пошел путем от обратного.

Модуль ссtags под Друпал 7

21 июня 2011 в 16:59

cctags

На днях перевел свой модуль cctags с шестой версии на седьмую.
Сctags – это альтернатива широко известного модуля tagedelic. Т.е. модуль формирует блок и/или страницу облака тэгов таксономии с атрибутом (классом) зависящим от частоты употребления данного термина в опубликованных нодах.
В чем преимущество данного модуля перед tagedelic.

Tagedelic – формирует ровно столько блоков (и страниц) сколько определено словарей в вашей системе причем не позволяет смешивать словари, т.е. один словарь – одно облако.
В модуле Cctags мы имеем:
Гибкие настройки и расширенные возможности по темизации вывода облака (отдельные файлы шаблонов для тэгов, названия словаря, страницы облака).
Возможность (через настройки включать несколько словарей (а для словарей с древовидной структурой - кроме этого включать/выключать нужный уровень)) вывода тэгов.
Автоматическая генерация нужного количества блоков и/или страниц.
Помимо этого вы можете сформировать практически одинаковые по содержанию блоки и разместить их в разных регионах для разных страниц сайта.

Концепция модуля Cctags основана на понятии элемента cctags.
Элемент cctags – это совокупность настроек для отображения одного блока и/или страницы терминов.
Вы можете добавить необходимое количество элементов и настроить каждый из них отдельно, причем разные элементы могут содержать один и тот же словарь или словари в любой комбинации.

Модуль cczoom как альтернатива cloud zoom

20 мая 2011 в 13:17

Работая над вялотекущим проектом под Drupal 7, понадобилось мне показывать масштабируемые превьюхи. Поиск дал несколько результатов, но под D7 был выбран, более менее приемлемый модуль Cloud zoom, основанный на одноименном jQuery плагине jQuery Cloud zoom.
Но к сожалению автор модуля , использовал возможности jQuery плагина лишь на 10%, а точнее через данный модуль практически невозможно настроить плагин, а там, тем не менее достаточно много такого, с чем можно «поиграться»(приведу спецификацию параметров без перевода, кому надо надеюсь сами переведут).

Parameter Description (from V1.0.0) Default Value
zoomWidth The width of the zoom window in pixels. If 'auto' is specified, the width will be the same as the small image. 'auto'
zoomHeight The height of the zoom window in pixels. If 'auto' is specified, the height will be the same as the small image. 'auto'
position Specifies the position of the zoom window relative to the small image. Allowable values are 'left', 'right', 'top', 'bottom', 'inside' or you can specifiy the id of an html element to place the zoom window in e.g. position: 'element1' 'right'

Ошибка во Views Contextual filters - Term synonym

8 апреля 2011 в 13:21

Значить вьюсы 7.x-3.0-beta3
появилась проблемка, когда пытаюсь построить вьюс с Contextual filters, где в качестве параметра используется Таксономия: Term synonym
вылазит ошибка
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'olkit.taxonomy_term_synonym' doesn't exist

Модуль ccfilter под Drupal 7 - продолжение

10 марта 2011 в 20:13


++++
23.03.2011

Dev версия модуля выложена в репозитарий d.o
ccfilter

++++
15.03.2011

Модуль изменен:
1. Добавлена возможность создавать скрытый контент (ccfhidden)в комментариях
2. Устранен один «баг» (не правильно нумеровались скрытые фрагменты)
После переустановки обязательно запустите update.php
Если были ноды созданные с применением фильтра ccfhidden, пересохраните их.
++++
14.03.2011
Внесены небольшие изменения в модули.
1. Так как операция загрузки ноды в качестве скрытого фрагмента либо сворачиваемого текста (в модулях ccfhidden и ccfcollapse)не совсем безопасны
(Опасность заключается в том что в обоих фильтрах, если пользователю доступен соответствующий фильт, то возможен просмотр срытых нод, а также злоумышленик может и «положить» сайт создав ноду с рекурсивным содержанием)ю
Добавлены соответствующие пермишены в модули ccfhidden и ccfcollapse (т.е. вы можете разрешить например зарегистрированным пользователям использовать данный фильтр, но в то же время не давать им возможность использовать атрибут node (ajax-node)).

2. Исправлены некоторые «баги» и добавлены пермишены на настройку модулей (ccfhidden и ccfcollapse).
++++
11.03.2011

исправил небольшую ошибку в модуле ...

[Решено] Что то с модулем Image в d7

21 февраля 2011 в 12:15

Это я туплю или все же что то с ядреным модулем Image в D7, а именно не создаются пресеты.
Значит так:
1. Добавляю к типу материалу поле типа Image (Изображение) виджет (Изображение)
2. Устанавливаю отображения поля
метка (скрыто) размер(Medium) тип (ссылка на файл)
3. Пересбрасываю пресеты
4. Прикрепляю изображение к ноде
сам файл загружатся в sites/default/files/field/image
a пресеты не создаются Sad

На сколько я понимаю для прикрепленных полей изображения для всех пресетов должны создаваться каталоги типа
sites/default/files/styles/пресет/public/field/image
- так вот они не создаются
причем для примера ядра каталоги и файлы в нем создаются
- имеется ввиду sites/default/files/styles/пресет/public/modules/image/sample.png

Что я делаю не так и почему не едут лыжи ...

Решено (частично):
Пришлось отдебажить модуль Image, но как всегда проблема оказалась не там (т.е. не в Друпале)...
Проблема оказалась в кэшировнии nginx-ом изображений Sad пока отключил кэшировние, пресеты стали нормально создаваться ...

Но до конца все же проблема не решена, т.е. откуда растут ноги понятно но как и оставить кэширование и создание пресетов буду думать
( проблема в том что пресет создается в момент первого обращения к файлу с нужным пресетом,
например к файлу http://www.example.com/sites/default/files/styles/small/public/field/ima...,
nginx - честно говорит, что page not found и соответственно не передает на обработку в апач который бы в свою очередь запустил обработчик пресетов.),

Проба пера или мой первый модуль под Drupal 7 (добавлен функционал)

7 февраля 2011 в 12:35

ccfcollapse
Вот и вышел долгожданный релиз Drupal 7. В целом продукт мне понравился, и для того, что бы получше изучить новое АПИ я решил постепенно перевести написанные мной модули под новую платформу. Первой ласточкой стал один из элементов модуля ccfilter - collapse text. Но, что бы было поинтересней, я не просто перевел его под D7, но и несколько расширил функциональность.

Новый модуль ccfcollpase позволяет встраивать при помощи специальных тэгов (аля BBCode) в материалы сворачиваемый/разворачиваемый текст.
По сравнению с версией для D6, данный фильтр позволяет вставлять вложенные элементы, кроме того предусмотрен блок врапера, который позволяет разворачивать/сворачивать все элементы находящиеся внутри данного врапера. Также можно установить с помощью дополнительных атрибутов индивидуально для каждого сполера некоторые параметры поведения, как то скорость сворачивания/разворачивания и метод сворачивания/разворачивания (пока доступны три метода slide, fade, slidefade).

В дальнейшем данный фильтр будет использован как один из составляющих элементов ccfilter под D7.

Примечание: далее в тексте примеров , что бы не срабатывал фильтр я заменил английскую букву c на русскую с.

Общий синтаксис:

/**
 * Стркутра обрабоки фильтра
 * в треугольные скобки помещены не обязательные значения (сами они не нужны)
 * одинарные кавчки в параметрах обязательны, порядок параметров произволный
 *

Ajax_comments и форма комментариев выше комментариев

26 ноября 2010 в 2:26

Есть замечательный модуль Ajax_comments от neochief, который позволяет открывать форму комментария непосредственно под комментарием (посредством AJAX). И есть статья этого-же (кстати многоуважаемого лично мной) автора про перенос формы ввода комментария непосредственно под сам пост, перед списком остальных сообщений - Модуль «Форма комментариев поверх комментов» и даже есть модуль который все это реализует - Comment form above comments. Но есть один нюанс - не дружат эти модули между собой (по крайней мере у меня не получилось их подружить напрямую).
Просматривая исходные коды данных модулей в надежде их все таки подружить, я заметил что в принципе метод предложенный neochief, а именно подменой темы на некотором этапе рендеринга, на свою не единственный (опять же гибкость Drupal в этом плане меня поражает).

Поэтому хочу предложить свой метод, основанный на хуке hook_menu_alter, ведь в принципе ни кто нам не запрещает полностью переопределить вывод ноды подменив стандартный коллбэк «node/%node».

Статья достаточно объемная, с исходными кодами поэтому кому интересно можно посмотреть здесь
Ajax_comments и форма комментариев выше комментариев, там же находиться и архив с модулем.

Темизация не стандартными методами

3 ноября 2010 в 20:45

Работая над небольшим проектом, столкнулся с проблемой – если какой-либо модуль не предоставляет хуков по темизации вывода своего контента, то довольно сложно темизировать представить информацию в нужном виде. Но как всегда – Друпал гибок и могуч, и эту проблему можно обойти если модуль использует (и регистрирует) свои функции темизации в общем реестре.

Опишу суть проблемы. В моем проекте использовался свой тип материала (определенный соответствующим модулем), который (тип материала) посредством этого модуля выводился в две колонки (при этом был переопределен вывод ноды, что в общем то не важно) . Но кроме этого в данном типе материала использовались несколько словарей, определяющих некоторые специфичные свойства данного типа материала. Термины данных словарей выводились в ноде в виде активных ссылок при клике на которых должны выводиться ноды с соответствующим признаком. Вся проблема заключалась в том, что вывод должен осуществляться в точно в том же виде как и основной вывод предоставляемый модулем (т.е. в нашем случае в две колонки) и при этом модуль taxonomy не предоставляет интерфейса по переопределению вывода, но при этом имеет зарегистрированную функцию темизации taxonomy_term_page.

Домашний хостинг

31 мая 2010 в 16:13

Много вопросов возникает про хостинг. Расскажу еще одно решение.
Для небольших проектов их отладки и стартапов (а так-же например для презентации проектов заказчику) вполне достаточно домашнего хостинга.
Естественно для этого необходим выделенный канал (и желательно безлимитный по трафику, хотя исходящий трафик провайдеры иногда не считают, что нам и надо).
Сервер 24/7 (можно мини-сервер), на первое время пойдет и домашний ББ, если вас не напрягает его шумность и расход энергии.
Статический IP (многие провайдеры предоставляют такую услугу за небольшие деньги), можно и динамический с использованием dyndns - но это хуже.
Ну и желателен роутер с возможностью использования DMZ и защитой от различных атак (иначе замучаетесь с защитой своей домашней сети).

Что бы совсем было интересно расскажу как я делал свой мини-сервер.

Ни для кого не секрет, что у каждого уважающего себя «итишника» со временем скапливается куча устаревшего оборудования, которое вроде уже и не используется и выкинуть жалко.
Вот и я, наводя в очередной раз порядок в своих «закромах», обнаружил интересное устройство - внешний CD-RW девайс от фирмы HP.

Новый модуль cclive (Прямой эфир)

24 мая 2010 в 16:55

cclive
Пока только для тестирования.
Новый модуль реализует показ блока и страницы так называемого "Прямого эфира", т.е. показывает информацию по самым последним изменениям при комментировании материалов.
Отличается от аналогичных модулей широкими возможностями по темизации вывода.
Т.е. вы можете настроить вывод (через шаблоны tpl.php) практически в любом удобном для вас формате.
В модуле реализован вывод шаблоны практически для всех элементов.

Оригинал материала на моем сайте там-же можно посмотреть как это выглядит.

Темизация страницы:
cclive-page-wrapper.tpl.php
Шаблон вывода страницы
доступны переменные
$livedata - непосредственно данные
$pager - стандартный пэйджинг

<?php
<div id="cclive-page">
<
table>
<
tbody>
<?
php print $livedata?>
</tbody>
</table>
<?php print $pager?>
</div> 
?>

Шаблон вывода страницы элемента (одной записи в странице)
cclive-page-item.tpl.php

доступны переменные
$zebra - (odd,even)
$cclive_item - массив с данными записи
$cclive_item['node_title'] - заголовок ноды
$cclive_item['node_title_link'] - заголовок ноды в виде ссылки на ноду
$cclive_item['node_title_link_to_comment'] - заголовок ноды в виде ссылки на последний комментарий
$cclive_item['node_type'] - тип ноды
$cclive_item['node_type_name'] - наименование типа ноды
$cclive_item['node_timestamp'] - дата время создания ноды в виде timestamp