goodboy

Главные вкладки

user-icon

Сергей goodboy

Добавление страницы с PHP кодом и Views

Аватар пользователя goodboy

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

Как же добавить такую страницу? Ничего нет проще - включаем модуль PHP Filter, создаем ноду и пишем код в поле Body, выбрав формат PHP.

0 Спасибо

Добавление материалов пользователями

Аватар пользователя goodboy

На сайте потребовалось, чтобы анонимные пользователи оставляли свои отзывы и они автоматически публиковались. Создал тип материала "Отзывы" с полями "Имя","Email","Раздел"(taxonomy_term) и "Отзыв". Дал пользователям права на создание ноды типа "Отзыв" и отчитался, что все сделано!

Но, оказалось не все так просто. Мне был предъявлен ряд запросов и недостатков:

  1. В заголовке, вместо "Создание материала Отзыв", необходимо "Добавить отзыв"
  2. Кнопку отправки в форме назвать "Добавить"
  3. Вывести специальное сообщение после создания материала
  4. Убрать "лишнюю" информацию в форме добавления ноды - информация о формате, подсказки...
  5. Использовать AJAX, вывод результатов валидации в том же окне
0 Спасибо

Формы в одностраничниках

Аватар пользователя goodboy

Потребовалось срочно создать одностраничный сайт, мини-лендинг на полтора экрана. Сделали статичный html-файл, сверстали, все красиво. В самый последний момент было сказано, что нужно добавить форму обратной связи.

Как сделать форму, используя только текстовый редактор? Последний раз подобное я делал в 1999 году.
Нужна клиентская валидация полей формы (в т.ч. на корректность введенного Email), красиво вывести ошибки без перезагрузки. Нужен sendform.php, на которое бы указывал action формы. В нем, серверная проверка вводимых данных, борьба со злоумышленниками, ботами... Далее, необходимо вводить в senform.php список Email получателей, формировать формат писем... Но самое страшное, что данные, введенные в форму, необходимо хранить и отображать при необходимости.

0 Спасибо

Как мы делали версию для слабовидящих

Аватар пользователя goodboy

Поступил заказ для созданного нами сайта сделать версию для слабовидящих. В качестве образца был дан http://special.kremlin.ru/events/president/news . Было принято решение не создавать отдельный поддомен, а сделать отдельную тему и для переключения тем использовать модуль  switchtheme

1. Модуль switchtheme

Модуль выводит форму выбора темы из списка установленных.
Но, возник ряд вопросов:

1.1 Тем может быть больше двух (как минимум - еще тема для админки). Нужно как-то скрывать лишние.
1.2 Темы нужно назвать по-русски, понятно для пользователей. Хоть модуль имеет настройку для переименования тем, в форме она не срабатывает.
1.3 В списке тем сразу должна быть выбрана нужная тема, а не текущая. Вообще, текущей темы не должно быть в списке.

0 Спасибо

Программная установка offset во вьюсах

Аватар пользователя goodboy

Понадобилось динамически назначать offset для views.

Вызываю вьюв /articles?page1=3, хочу перейти на 4-ю страницу.

function MYMODULE_views_pre_execute(&$view)
{

if ($view->name == 'articles' ) {

  $currpage = 0;
  if ( isset($_GET['page1'])) { $currpage = $_GET['page1']; }
  print "currpage=$currpage";

  if ($currpage > 0) {

      $items_per_page = $view->display[$view->current_display]->handler->view->get_items_per_page();
      $offset = $view->display[$view->current_display]->handler->view->get_offset();
      print "items_per_page=$items_per_page offset=$offset";
      if ($items_per_page>0) {
         $new_offset =  $currpage*$items_per_page;
         print "new_offset=$new_offset";

0 Спасибо

Как отредактировать содержимое мини-панели context_frontpage?

Аватар пользователя goodboy

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

0 Спасибо

Требуется drupal-программист для удаленной работы

Аватар пользователя goodboy

Удаленная работа, имеется несколько проектов.Возможно постоянное сотрудничество.Прямой работодатель, Москва. Оплата через банк.

Требуется программист под Drupal 7,6. Знание основ администрирования серверов будет большим плюсом. От вас качественная, своевременная работа. Быстрое реагирование, сжатые сроки. Ответственность. Зарплата обсуждается.

Контакты: m_mark@inbox.ru

0 Спасибо

Webform: как сделать выпадающий список из значений view?

Аватар пользователя goodboy

На D6 часто использовал webform с выпадающим списком, который формируется из значений вьюва. Для этого использовал модуль  webform_viewreference.
На 7-ке не могу сообразить, как поступить, версии под D7 нет, да и эту версию друпала только осваиваю. Подскажите, пожалуйста.

0 Спасибо

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

Аватар пользователя goodboy

Решил написать свою версию функции format_date(), позволяющую склонять названия месяцев на русском(и других языках): "3 сентября 2011".

<?php

//Склонение на русском языке
function month_declination_ru ( $long_month_name, $month  ) {
   $long_month_name = ( $month == 3 || $month == 8 ) ?
          $long_month_name . 'а' : drupal_substr($long_month_name, 0, drupal_strlen($long_month_name)-1) . 'я';  
   return $long_month_name;
}

//Склонение на украинском языке
function month_declination_ua ( $long_month_name, $month  ) {  
   if ( $month == 2 ) return  drupal_substr($long_month_name, 0, drupal_strlen($long_month_name)-2) . 'ого';
   if ( $month == 11 ) return  $long_month_name . 'а';
   if ( drupal_substr($long_month_name, -3) == 'ень' )
         return drupal_substr($long_month_name, 0, drupal_strlen($long_month_name)-3) . 'ня';

   return $long_month_name;
}

//Функция форматирования даты
function format_date2($timestamp, $type = 'medium', $format = '', $timezone = NULL, $langcode = NULL) {
  if (!isset($timezone)) {
    global $user;
    if (variable_get('configurable_timezones', 1) && $user->uid && strlen($user->timezone)) {
      $timezone = $user->timezone;
    }
    else {
      $timezone = variable_get('date_default_timezone', 0);
    }
  }

  $timestamp += $timezone;

  switch ($type) {
    case 'small':
      $format = variable_get('date_format_short', 'm/d/Y - H:i');
      break;
    case 'large':
      $format = variable_get('date_format_long', 'l, F j, Y - H:i');
      break;

0 Спасибо

Модуль для связки плагина Mediaembed для CKEditor (под Wysiwyg)

Аватар пользователя goodboy

Пользуюсь редактором CKEditor 3-й версии в связке с модулем  Wysiwyg. Понадобилось установить плагин Media Embed. Делал вроде бы по инструкции, но не получилось, а установить надо было быстро.

0 Спасибо

Перенос базы пользователей (c Друпал5 на Друпал6) [Выполнено]

Аватар пользователя goodboy

Возникла задача перенести базу пользователей с сайта на Drupal5 на сайт на Drupal6. База пользователей - это список пользователей с аккаунтами, ролями, профилями и картинками. Насколько я понял, это таблицы files, profile_fields, profile_values, role, users, users_roles.

Я установил на обоих сайтах модуль Backup&Migrate, экспортировал указанные таблицы (структуру и данные) и импортировал на сайте с Drupal6. Теперь на новом сайте эти таблицы имеют формат Drupal5, что приводит, например к проблеме при создании материала (из-за отсутствия поля signature_format в таблице users); да и непонятно, что будет при добавлении новых файлов или пользователей, так как в Drupal6 поля-идентификаторы в этих таблицах стали автоинкрементными; и т.д. Я надеялся, что update.php исправит ситуацию, но этого не произошло. Кроме как воспользоваться phpmyadmin и вручную править структуру в таблицах (или же вручную править INSERT в файле экспорта) ничего на ум не приходит. Но это как-то ненадежно. Прошу помощи у сообщества, возможно кто-то уже решал подобную задачу.

0 Спасибо

Требуется верстальщик для удаленной работы

Аватар пользователя goodboy

Удаленная работа, имеется несколько проектов.
Возможно постоянное сотрудничество.
Прямой работодатель. Оплата через банк.

Требуется верстальшик под Drupal 6.
Работа с шаблонами. Знание jQuery приветствуется.
От вас качественная, своевременная работа.
Правильная верстка под все используемые браузеры.
Быстрое реагирование, сжатые сроки.
Ответственность.

Контакты: m_mark@inbox.ru

0 Спасибо

Галереи: мой опыт

Аватар пользователя goodboy

Хочу для себя обобщить свой опыт создания галерей на Друпале. (Галерея представляет из себя двухуровневую структуру Альбом-Фотография:  Альбом состоит из фотографий.)
Галерею можно делать при помощи готовых модулей (http://drupal.org/project/modules?text=gallery) или связки Views(сниппет) + CCK ImageField (Image) + ImageCache +лайтбоксы(Lightbox2, Thiсkbox, …)+ jQuery плагины(jCarousel, Circle, Serial Scroll, …)
 
Способы конструирования галерей:

1. Альбом-нода, Фотография-поле

Альбом является нодой, а Фотографии множественным полем ImageField.
 
Достоинства: малое количество нод, встроенная сортировка фотографий
Недостатки: невозможность работать с фотографией как с нодой: сделать оценку, получить дату создания и т.д.

2. Альбом-нода, Фотография-нода

И альбом и фотография являются нодами. Связь между альбомом и нодой осуществляется при помощи CCK Node Reference ( Фотография ставит ссылку на Альбом ).  Кроме того, что для фотографии можно указать несколько альбомов, очень легко переносить фотографию из одного альбома в другой.

0 Спасибо

Мои инструментарий

Аватар пользователя goodboy

Сделав некоторое количество сайтов на Друпал, заметил за собой повторяемость в подходах к созданию сайтов. Этот пост - памятка для самого себя, а не поучение "вот, смотрите, как надо делать".
Однако, буду рад услышать конструктивную критику.

  1. Модули
    • Базовые: Pathauto (+Tokens), CCK, Views
    • Изображения: Imagecache (+ImageAPI), Lightbox2
    • Профиль пользователя: Content Profile, Auto Assign Role, Automatic Nodetitles
    • Редактор: Wysiwyg, IMCE (+IMCE Wysiwyg API bridge), Excerpt
    • Рейтинг: FiveStar (+Voting API)
    • Прочее: Date, jQuery Update
  2. Темизация и форматирование
    • Стандартную ленту материалов на главной не вывожу. Чтобы ее скрыть - делаю пустой материал типа Story, и затем пустой node-story.tpl.php
    • Display fields для полей CCK не использую - делаю Hidden. Все форматирование вывода производится в шаблонах темы (в том числе, шаблонах Views)
    • Значения Title и Alt изображений - заголовок ноды. Изображение является ссылкой на ноду (кроме вывода непосредственно в ноде)
  3. Программирование
    • Создаю модуль myapi, куда помещаю собственные функции.
    • Использую сниппеты для блоков: программный вывод views, сниппеты типа "Статьи по теме"
  4. Экспорт и трансляция
    • RSS (Яндекс, Google), LiveJournal, Twitter
0 Спасибо

Пустая дата и проблемы с timezone

Аватар пользователя goodboy

PHP 5.2.11
Друпал 6.14
Модуль Date 6.x - 2.4

В admin/settings/date-time установлено Пользовательские-конфигурируемые часовые пояса.: Включено.
Использую CCK поле тип дата. Диапазон лет: -3;+3
Пользователь устанавливает свой часовой пояс ("Европа/Москва") и получает диапазон лет -3...3 вместо 2006...2012
Если ставить по умолчанию ("Europe/Moscow") - все ok.

Иду в модуль Date:

1) В функции _date_content_generate ( /date/date_content_generate.inc )

<?php
$year 
date_format(date_now(), 'Y') - $back mt_rand(0, ($forward $back));

// date_format(date_now(), 'Y') возвращает 0

?>

2) В date_api.module

<?php
    
function date_now($timezone NULL) {
  return 
date_make_date('now'$timezone); //Возвращает пустое значение
}

function date_make_date($date$timezone NULL$type DATE_DATETIME$granularity = array('year''month''day''hour''minute')) {
      ...
      
// $timezone = "Европа/Москва";
      // timezone_open($timezone) возвращает FALSE
      //
      
return date_create('now'timezone_open($timezone)); //Возвращает пустое значение
      
... 
}
?>

3) Функция date_create http://ua.php.net/manual/en/function.date-create.php

<?php
DateTime date_create  
([ string $time "now"  [, DateTimeZone $timezone NULL  ]] )

//Оказывается, date_create('now', NULL) совсем не то же самое, что date_create('now');
//И отсюда все проблемы

?>

Варианты решения:

1) Убрать перевод t("Europe/Moscow")
2) Переписать функцию date_make_date

Вместо
<?php?>

0 Спасибо

CAPTCHA и Cookies

Аватар пользователя goodboy

На сайте, на котором Анонимам даны права на комментирование, пришлось поставить капчу (стандартный  модуль CAPTCHA). Captcha работает исправно, но Анонимы перестали комментировать, потому как теперь в браузере необходимо включать cookies и пользователи не знают как/не хотят их включать. Я в небольшой растерянности, что делать: отказаться от капчи или написать подробную инструкцию как включать кукисы для популярных браузеров.

0 Спасибо

Public Download Count для 5-го Друпала

Аватар пользователя goodboy

Появилась необходимость подсчитывать количество закачек файлов. Модуль Download count не подошел - побоялся перехода с Public на Private способ закачки. Нашел Public Download Count, а он только для 6-ки, сайт на 5-м Друпале. Никто не собирается ближайшим часом переводить на 5-й этот модуль? Я бы поучаствовал в тестировании.

0 Спасибо

Создание произвольного XML [Решено]

Аватар пользователя goodboy

Понадобилось создать уж очень нестандартный RSS - проще сделать руками, чем переделывать views_rss или views_yandex_rss.
Содержимое xml я сгенерирую сам, непонятно - как добиться, чтобы Друпал при обращению к url выдал xml.
Могу ли я сделать это сниппетом (используя drupal_set_header('Content-Type: text/xml; charset=utf-8'); ) или писать модуль ( делая hook_menu ).

Пока теряюсь в догадках. Может, кто делал - подскажите.

0 Спасибо

Обновление при переезде

Аватар пользователя goodboy

Решил переезд на другой хостинг совместить с обновлением версии.
Сейчас 5.5, хочу установить свежий 5.16

Что планирую сделать:

  1. На новом месте инсталлировать Drupal 5.16
  2. Поставить модуль Backup and Migrate
  3. Скопировать модули (sites/all) и темы
  4. Сделать бекап на старом сайте при помощи Backup and Migrate
  5. Восстановить базу из бекапа на новом сайте при помощи Backup and Migrate
  6. Выполнить update.php

Надеюсь, ничего не упустил. Буду признателен за замечания и уточнения.

0 Спасибо

Проблемы с VPS на мастерхост

Аватар пользователя goodboy

С утра 17 февраля наш сайт ( виртуальный сервер на masterhost.ru ) неожиданно перестал работать. Одновременно утерян доступ к панелям управления сервера . Саппорт отвечает на один запрос из десяти в духе "у вас что-то не так". Есть смутные подозрения, что это связано с переездом на европейские площадки.

UPD: Похоже, мне одному не повезло. Действительно, при миграции, данные сайта (файлы и база данных) были безвозвратно утеряны мастерхостом! Был сайт - и нет его. Нормально?

0 Спасибо