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

Создание страниц для печати с помощью модуля Printer

9 июля 2011 в 21:01

Подключил для создания печатной версии страниц модуль Printer.
Но автозапуск печати не заработал. Здесь предложили два варианта:
1. заменить в файле \sites\all\modules\print\print.pages.inc строку

<?php
$print
['sendtoprinter'] = $print_html_sendtoprinter "<script type='text/javascript'>Drupal.behaviors.print = function(context) {window.print();$window_close}</script>" '';
?>

на

<?php
$print
['sendtoprinter'] = $print_html_sendtoprinter "Drupal.behaviors.print = function(context) {setTimeout(\"window.print();$window_close\",1000);}" ''
?>

но это не помогло.

2. Вбить яваскрипт, который будет запускать печать, после загрузки страницы:

<body onload="window.print()">

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

Т.е. в результате в файле \sites\all\modules\print\print.pages.inc нужно заменить строку

<?php?>

Активный пункт меню, breadcrumbs зависящие от отображаемой ноды

8 июля 2011 в 16:29

Собственно была задача сделать каталог продукции. Каждая нода привязана к словарю с терминами каталога.
Долго бился над активным пунктом меню, но н осилил чрез API. Если у кого есть опыт, как сделать актывный пункт меню в Taxonomy menu, то отпишите, пожалуйста, а то моск сломал.
Реализовал следующим образом:
1. Для хлебных крошек в template.php добавил:


<?php
function THEME_breadcrumb($variables) {
  if ( 
arg(0) == 'node' && is_numeric(arg(1)) ) {
    
$node node_load(arg(1));
    if (
$node->type=='product') {
      
$current taxonomy_term_load($node->field_ИМЯ_ПОЛЯ['ru'][0]['tid']);
      
$breadcrumb[] = l($current->name'taxonomy/term/' $current->tid);
      while (
$parents taxonomy_get_parents($current->tid)) {
       
$current array_shift($parents);
       
$breadcrumb[] = l($current->name'taxonomy/term/' $current->tid);
      }
      
$breadcrumb[] = l(t('Home'), NULL);
     
      
$breadcrumb array_reverse($breadcrumb);
    }
  }
  else {
    
$breadcrumb $variables['breadcrumb'];
  }
  if (!empty(
$breadcrumb)) {
    return 
'<div class="breadcrumb">'implode(' » '$breadcrumb) .'</div>';
  }
}
?>

2. Меню пришлось сделать вручную через снипет в блоке:


<?php
$vid 
1;  // Номер словаря

//Получаем tid ноды

$active_tid NULL;
$active_parent NULL;
if (
arg(0)=="node" && is_numeric(arg(1))) {
  
$node node_load(arg(1));
  
$res =db_query("SELECT ti.tid FROM {taxonomy_index} ti  INNER JOIN {taxonomy_term_data} td ON td.tid=ti.tid ?>

Подлкючение плагина OCUpload в CKEditor

7 июля 2011 в 18:04


Проделал все, что было сказано в readme по установке OCUpload. Но в редакторе CKEditor кнопка так и не появилась. Внимательно приглядевшись, заметил вкладку Plugins в разделе EDITOR APPEARANCE, где необходимо отметить флажок напротив данного плагина. Кстати, там же есть и IMCE, но он работает даже в "не отмеченном состоянии")

Замена названий скачиваемых файлов

7 июля 2011 в 17:35

Замена названий скачиваемых файлов:

Цель: при сохранении файла по умолчанию подставлять в название содержимое атрибута title
т.е. например, чтобы по нажатию на ссылку
<a href="proba.zip" title="Пробный архив">скачать</a>
, предлагало сохранить "Пробный архив.zip"
и так для любого интересующего расширения (doc, pdf, jpg ..)

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

Краткий алгоритм:

  1. Пройтись по все ссылкам в интересующем месте, выбрать те, что ссылаются на файлы типа zip, rar, doc и т.п. Отлавливать клики по ним, отменяя стандартное действие, вместо которого отправлять в php-файл путь ссылки и нужное название
  2. В php-файле настроить header-ы на загрузку
  3. Привязать все это к друпалу

Первый пункт (javascript):

window.onload = function(){              
               
                //взять все ссылки, из содержимого статьи
                var links = document.getElementById("content").getElementsByTagName("a");

                //перебрать все найденные ссылки
                for(var i=0;i<links.length;i++){
                                        $href= links[i].getAttribute("href");
                                       
                                        //если у ссылки есть путь
                                        if($href!=null && $href!=""){
                                       

Лишний пейджер в D7

7 июля 2011 в 15:01

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

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

По этому идем в настройки пейджера этой самой вьюхи и в поле "Pager ID" ставим, допустим, единичку вместо нолика, или двоечку, в зависимости от количества используемых пейджеров на странице.
Там же можно прочитать описание ин инглиш:
Unless you're experiencing problems with pagers related to this view, you should leave this at 0. If using multiple pagers on one page you may need to set this number to a higher value so as not to conflict within the ?page= array. Large values will add a lot of commas to your URLs, so avoid if possible.

Wysiwyg модуль для подключения Яндекс.Спеллера к редактору TinyMCE

6 июля 2011 в 15:29

После того как я прочел статью Макса Кириленко о Яндекс.Спеллер (http://www.drupal.ru/node/31864) очень захотелось прикрутить этот спеллер к себе на сайт, тем более что пишу я безграмотно Smile
Оказалось, что это не совсем просто для новичка, хотя объем кода - минимальный. Вот решил поделится результатом.

Это wysiwyg модуль-расширение для одного единственного редактора - tinymce (он мне просто очень нравится). Достаточно установить и включить модуль. После этого в редакторе TinyMCE появится кнопка проверки орфографии (АВС) - это стандартный плугин из пакета TinyMCE, но бэкендом к нему выступает Яндекс.Спеллер. Обращение к бэкенду происходит на строне сайта (файл yspeller_xmlrpc.php в комплекте модуля), для его работы php модуль curl включать не надо (в отличии от скрипта предлагаемого на http://api.yandex.ru/speller/doc/dg/tasks/how-to-spellcheck-tinymce.xml).
Прошу попробовать и поругать...

Сниппет для вывода количества комментариев

6 июля 2011 в 8:53

Себе на заметку и другим в помощь.
Сниппет выводит общее количество ВСЕХ опубликованных (подтверждённых) комментариев сайта.

<?php
$result 
db_query("SELECT COUNT(cid) AS count FROM {comments} WHERE {comments}.status = 0");
print 
'<a href="/comments" title="Все комментарии сайта">Все комментарии (';
$row db_fetch_object($result);
print 
$row->count;
print 
')</a>';
?>

Или оформление в виде функции в template.php

<?php
function get_comments_count() {
  
$result db_query("SELECT COUNT(cid) AS count FROM {comments} WHERE {comments}.status = 0");
  
$row db_fetch_object($result);
  return 
'<a href="/comments" title="Все комментарии сайта">Все комментарии (' $row->count ')</a>';
}
?>

В последующем можно вставлять в любом месте page.tpl.php используя вызов

<?php
print get_comments_count();
?>

Ну, не-нарадуюсь IT-Patrol хостингом!

5 июля 2011 в 14:08

Вот, пишу заказной рекламный пост в форум про супер хостинг.
Шутка Smile

А серьёзно? шаред хостинг с такой мощью да за 100руб. в мес!!!
Ни один хостинг провайдер не предложил пока 256мб для PHP на шаред хостинге!!!
На it-patrol все мои проекты, в которых порой задействовано под СОТНЮ модулей - летают! Даже никаких намёков, что вот-вот и хостинг подвиснет или выкинет ошибку 500 или 502.

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

Спасибо вам, Егор и всей твой команде за вашу работу и качественный хостинг для Drupal систем.

PS
Написать этот пост меня подтолкнула очередная сложная ситуация на другом хостинге. У меня опыт работы с 5-ю хостерами и их службой технической поддержки.

Обновление сайта Drupal с 6 до 7 на мультисайтинге

4 июля 2011 в 18:08

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