Предлагаю решение

До и после. Перевод на правильную платформу

28 декабря 2010 в 9:13

До и После Теоретически я всегда знал, что лучше использовать популярную CMS, чем какой либо непонятный "самопис"... Но я не предполагал, что есть умники, которые пытаются выдать более менее нормальную цмс за свое поделие, при этом изуродовав исходники...
Небольшой сказ о том, как перевести сайт на правильную систему управления (не забываем на каком ресурсе находимся ;))

Порядок действий

Анализ существующего сайта

На это этапе необходимо выявить существующие недостатки сайта и способы их устранения. Вполне может получится так, что переводить его на другой движок смысла не будет, но проще доработать имеющееся. Стоит так же обратить внимание на посещаемость сайта и источники пользователей, а так же наличие внешних работающих ссылок. Если их количество достаточно большое, продумайте как сохранить адреса (лучше не просто редирект сделать, но оставить УРЛы старыми). Определите технические недостатки: верстка, скорость работы, наличие мета-тегов и тд.

Определение способов решений

И вот Вы определились, что старый движок не справляется с задачами проекта, и нужно его менять. Не буду заострять внимание, почему именно выбран Drupal, холиваров на эту тему хватает. Под "способами решений" я подразумеваю набор используемых модулей. Рекомендую включать модули, имеющие хорошую поддержку и высокую статистику, находящиеся в стабильном состоянии, а главное удовлетворяющие (а может даже и с заделом на будущее) текущим требованиям проекта.

Модуль сайтмап -> напильник

28 декабря 2010 в 0:10

Дано: модуль сайтмап + таксономия + сайтмап xml

Чтобы убрать конечный аргумент all, идём в файл модуля и ищем строку:

<?php
    
// Display the $term.
    
$output .= "\n<li>";
    
$term_item '';
    if (
$forum_link) {
      
$term_item .= l($term->name'forum/'$term->tid, array('attributes' => array('title' => $term->description)));
    }
    elseif (
$term->count) {
      
$term_item .= l($term->name, ($cat_depth 0) ? taxonomy_term_path($term) : "taxonomy/term/$term->tid/$cat_depth", array('attributes' => array('title' => $term->description)));
    }
    else {
      
$term_item .= check_plain($term->name);
    }
    if (
variable_get('site_map_show_count'1)) {
      
$term_item .= " ($term->count)";
    }
?>

Меняем на:

<?php
    
// Display the $term.
    
$output .= "\n<li>";
    
$term_item '';
    if (
$forum_link) {
      
$term_item .= l($term->name'forum/'$term->tid, array('attributes' => array('title' => $term->description)));
    }
    elseif (
$term->count) {
      
$term_item .= l($term->name, ($cat_depth 0) ? taxonomy_term_path($term) : "taxonomy/term/$term->tid", array('attributes' => array('title' => $term->description)));
    }
    else {
      
$term_item .= check_plain($term->name);
    }
    if (
variable_get('site_map_show_count'1)) {
      
$term_item .= " ($term->count)";
    }
?>

Проблема описана тут

Добавить в menu block функционал jquerymenu

27 декабря 2010 в 18:41

Привет.

Модуль jquerymenu позволяет сделать удобное меню для сайдбара - с разворачиванием подпунктов меню без перезагрузки страницы, но при этом у него есть один существенный недостаток - нельзя указать, с какого подпункта меню начинать вывод, и его глубину.

Этого недостатка лишен модуль menu block, но он лишен функционала jquery.

Итак, скрещиваем ужа с ежом.

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

function название-темы_menu_item__menu_block__номер-блока($link, $has_children, $menu = '', $in_active_trail = FALSE, $extra_class = NULL) {
  $class = ($menu && $in_active_trail ? 'parent open' : ($has_children ? 'parent closed' : 'leaf')); // Для того, чтобы
// menu_block выводил на страницу все подпункты меню, а не только верхнего уровня
// (а то разворачивать будет нечего), нужно либо в настройках меню, либо в настройках
// блока menu_block раскрыть все подпункты меню, но в таком случае оно будет изначально
// выводиться на страницу полностью раскрытым, что не есть хорошо. Здесь всем пунктам
// меню назначается класс closed, кроме тех, которые in_active_trail

//  if (!empty($extra_class)) {     Тут добавляются дополнительные классы,
//    $class .= ' '. $extra_class;  вроде lirst, last, menu-его номер
//  }                               мне они без надобности, поэтому отключаю

  if ($in_active_trail) {         // Добавляется класс active-trail
    $class .= ' active-trail';    // чтобы меню разворачивалось до
  }                               // активного пункта

Все Seo Drupal модули

26 декабря 2010 в 11:41

Всем привет! Данная статья не для профессионалов, которые уже всё знают :), а для новичков. Уверен, многим пригодится на ниве раскрутки и оптимизации сайта на движке Drupal.
Материал представляет собой вольный перевод статьи "A List of the Best Drupal SEO & Social Media Modules", достопочтенного Джейсона, http://www.themesnap.com/blogs/jason

Полный перевод с ссылками на модули представлен на сайте SEO программы со скидками


Список лучших SEO и социальных модулей для Drupal

SEO DRUPAL

Вы найдете много подборок и списков лучших Drupal SEO модулей, если воспользуетесь поиском Google или Яндекс.Однако многие из этих списков не включают модули, которые используются для повышения внутренней значимости страницы, эффективности и даже отслеживания за произведенными пользователем действиями.В списке ниже мы опишем несколько SEO Drupal модулей, которые используются, не только для повышения места вашего сайта в поисковых системах, но и для ваших драгоценных пользователей.Мы также включили большой перечень социальных модулей SMO, чтобы "оживить" ваш сайт на Drupal.Поехали!

Наиболее распространенные модули Drupal SEO

[Решено] advanced_catalog + filter

21 декабря 2010 в 15:27

Подскажите как вывести в advanced_catalog ubercarta Vews-filter. Фильтр, работает только не отображается.

Решено:
в advanced_catalog запрещено использование раскрытых фильтров, сделал views, ее прикрутил к выводу каталога (http://www.drupal.ru/node/15405), и все работает.

CSV файлы из Excel в node_import

21 декабря 2010 в 11:11

Пришла и моя очередь столкнуться с проблемой противостояния Windows и кодировки UTF-8.

Проблема известна многим, кто имел дело с модулем [module=node_import]. Суть в том, что файлы CSV, сохраняемые из Excel, имеют кодировку CP-1251 (Windows), а модуль работает с "кошерной" кодировкой UTF-8.

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

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

И еще - оформил issues на drupal.org. Гуру, посмотрите, все ли правильно - как-никак мой первый патч на "оргах": http://drupal.org/node/1004030

DrupalCamp Kiev 2010 - drupal 7 entity examples

20 декабря 2010 в 16:30

Модуль, написанный для летней презентации на DrupalCamp Kiev 2010 требует тестирования - он становится субмодулем Examples

Очень рекомендуется для изучения людям пишущим код и изучающим новый механизм сущностей (Entity) в drupal 7.

Префиксы в БД Drupal 6

19 декабря 2010 в 3:18

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

Заменить CSS модулей своими

18 декабря 2010 в 13:55

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

Решения:
1. Править файлы css, которые лежат в папках с модулями - некошерно.

2. Отключить файлы CSS и прописать стили в своих CSS - они будут грузиться всегда, вне зависимоси от участия модуля в рендере страницы.

Решил заменить таблицы стилей модулей своими, используя решение с ДрупалКукБука:
в template.php своей темы в функции имя-темы_preprocess_page добавил:

  $path_to_theme = drupal_get_path('theme', 'имя-темы');
  foreach ( $vars['css']['all']['module'] as $css =>$val ){
        $vars['css']['all']['module'][$path_to_theme . '/css/' . basename($css)] = $val;
        unset($vars['css']['all']['module'][$css]);
  }
  $vars['styles'] = drupal_get_css($vars['css']);
  unset($path_to_theme);

Остается скопировать файлы CSS из папок с модулями в подпапку /css своей темы, и править их как угодно.

Недостатки - при добавлении модулей надо помнить о необходимости копирования его стилей в свою тему.
решено, вопрос - по нагрузке (я не ощутил) и кошерности кода (N лет назад кодил на vb6, php - со словарем)

How to! - nginx версия два.

17 декабря 2010 в 20:00

Я писал как настроить ngnix здесь, но эта метода плоха сама в себе, плюс какое-то обновление удалило куку DRUPAL_UID из друпала. Короче, вот новое решение.

Требования.
Модуль [module=logincookie]. В нем устанавливаем куку NOCACHE когда пользователь залогинился, и удаляем ее когда он вышел.
Тестировал под nginx0.7, под nginx0.8 почему-то не кэшировал, так что смотрите, я вас предупредил.

Сам конфиг отдающий закэшированые страницы анонимусам: