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

Уменьшение цены на определенный процент в Ubercart

18 января 2011 в 9:46

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

 

Процентные скидки - uc_percentage_price

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

[Решено] Проблема с FileField Paths и токеном [term]

17 января 2011 в 21:15

Есть тип материала, к которому прикрепляется файл с помощью FileField. Материалу присваивается термин словаря таксономии.
Задача: файл из FileField должен загружаться в папку files/имя_термина

На первый взгляд всё просто. Ставлю FileField Paths.
В настройках типа материала для поля FileField задаю путь(File path): [term]

Устанавливаю File path cleanup settings:
+ Convert to lower case.
+ Transliterate.

Сохраняю параметры поля.

При создании материала файл загружается не в папку files/term , а тупо в папку files.
Если, редактируя уже созданный материал, удалить загруженный файл и загрузить новый (можно тот же самый) файл, то он попадает куда надо.

В процессе экспериментов выяснилось, что в момент первого сохранения материала токены [term], [term], [term-id], [termpath] имеют пустые значения. При обновлении уже существующего файла значения токенов правильные. Не смотря на то, что термин таксономии задается при создании материала как обязательный.

Решение.
Проблема решается созданием своего, правильного токена. Ставлю Custom Tokens. Создаю свой токен, выдающий имя термина таксономии.

Token id: token_custom_first_term
Тип токена: материал.
Код токена (PHP replacement:):

<?php  if ( (count($node->taxonomy)>0))
  {
      
$a=$node->taxonomy;

      

reset($a);
      
$jj=(int)current($a);

      return 

taxonomy_get_term($jj)->name;
  }

return 

'';?>

Быстрый хак модуля Livejournal Crossposter (ljxp) для работы с полями CCK

15 января 2011 в 15:49

Довольно распространенный модуль Livejournal Crossposter (ljxp) предназначен для автоматической публикации материалов Drupal-сайтов на Livejournal-совместимых сервисах. Я уже как-то писал о его установке и настройке у себя в блоге и на Drupal.ru. Но у модуля есть один существенный недостаток - он кросспостит в ЖЖ только стандартные заголовки ноды и ее тело (body) в виде тизера или полного текста. Поля CCK в нем полностью игнорируются.

OpenStore - моя сборка Drupal+Ubercart (тот самый философский камень)

14 января 2011 в 23:39

Несколько запоздало (в свете выхода 7-й версии) представляю свою сборку Drupal 6.x + Ubercart 2.x под названием OpenStore.

Сайт проекта OpenStore

Скачать OpenStore

UPD от 22.01.2011 Качаем последний dev!

Более 2-х лет назад я столкнулся с такой штукой как Drupal пятой модели. Мой интерес был практический - сделать интернет-магазин, который можно было бы расширять по мере необходимости, имел бы понятную архитектуру, и тд... До этого у меня были непродолжительные романы с другими решениями для e-commerce вроде Oscommerce и проч., к которым я довольно быстро охладел.

Drupal был свеж, заманчив, обещал много разных благ, а в связке с Ubercart, похоже, должен был дать всё то, о чём я и не мечтал. Я решил смастерить свой свечной заводик в течении месяца-два... Но, господа, недаром Друпликон ухмыляется как Мона Лиза Smile

Самостоятельная разботка интернет-магазина на основе Drupal для человека, незнакомого с API Drupal, и, тем более, с php, и, тем более, с базовыми знаниями CSS+HTML представляет собой кромешный ад и не может быть рекомендована, если вы хотите просто начать свой бизнес в сети, т.е вас интересует немедленный результат

Drupal 7 - сделать выпадающее меню администратора

14 января 2011 в 22:49

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

[##523640][/##]Теперь о том как сделать верхнее меню админа раздвижным:

drupal 7 - легко делаем Full HTML для авторов по умолчанию

14 января 2011 в 22:24

Друзья, спешу вас обрадовать в друпал 7 решена проблема с неудобным выбором Формата ввода.
Авторам/админу в шестой ветке приходилось выбирать при создании ноды формат ввода FullHtml
или пользоваться сторонним модулем Better Formats

В семерке одним из преимуществ является то, что функции BF уже встроены в ядро.
«Most of the features in BF are in Drupal 7 core now.»

Модуль расчета доставки EMS Russian Post - для Ubercart

14 января 2011 в 18:38

По мотивам обсуждения http://drupal.ru/node/53748 сделал модуль расчета доставки средствами EMS Russia.
Модуль использует родные поля доставки, предоставленные уберкартом.
Т.е. человек при оформлении заказа выбирает область, и вписывает город. город при необходимости (если не найден в базе ems) чистится от "г,пос,...", и проверяется еще раз. Если фейл - считаем как до региона. Есть поддержка международных отправлений.

Адрес проекта: http://drupal.org/project/uc_ems

Скрины:
EMS Russian Post

"Нет связи с EMS":
EMS no connection

Страница сеттингов:
EMS settings page

Как видите, есть настройки типа добавочной стоимости.

В итоге был так же создан багрепорт в Уберкарт (устарели регионы России, модуль это пока решает динамической подменой вводимых пользователем данных):
http://drupal.org/node/1027060

Если кто-то хочет материально отблагодарить разработчика, т.е. меня, я не против Smile
В комментарии к переводу просьба писать "ems от [ник на drupal.ru]", если хотите быть упомянуты на странице модуля drupal.org - сообщайте с каким урлом/именем.
Yandex.money
transfer-pay@yandex.ru
или номер счета: 4100190415303
Webmoney
Z352678179207
R114412215620
E406623242647

Темизация вывода ноды в RSS-трансляции. Нужно ли решение?

14 января 2011 в 14:20

Здравствуйте!

Всем известно, что у нас ноды на выводе бывают в двух состояниях - это ТИЗЕР и ПОЛНАЯ НОДА.

Удобно темизировать создавая в папке с темой файл node-[node_type].tpl.php. В этом файле среди прочих доступна переменная $teaser: Flag for the teaser state, по которой удобно ориентироваться, в каком состоянии ноду требуется показать. Полный набор информации на эту тему тут (http://drupal.org/node/190815).

Возникла задача - создать RSS ленту. На сайте проекта большое количество разных типов нод, больше половины из них требуется анонсировать через RSS. Как водится, пошел во Views, создал вид RSS. Думаю, сейчас сделаю Row Style = Материал - Аннотация и тизеры моих нод попадут в мою RSS ленту.

Но не тут то было.

В RSS выводятся ноды со всеми полями и метками к полям, короче ужас. И вот о чем я задумался. Почему учтены состояния ТИЗЕР и ПОЛНАЯ НОДА, но нет такого состояния как НОДА В ЛЕНТЕ (или RSS ITEM).

В общем, итогом моих размышлений стал модуль, который позволяет темизировать вывод ноды в RSS ленте, создавая в папке с темой файл node-[node_type]-rss.tpl.php и работая с ним так-же как обычно работаешь с темизацией ноды для тизера либо полной версии.

В связи с этим вопрос, нужен ли этот модуль в продакшн-виде для нашего сообщества? Или оставить его в текущем проекте и забыть?

Автоматическая установка Drupal 7 с командной строки

13 января 2011 в 21:05

В 7-й версии появилась возможность автоматизировать процесс установки, создав конфигурационный файл install.site.php, где site - название вашего сайта. Этот файл нужно поместить туда же, где расположен стандартный install.php (в корне сайта). В файл install.site.php добавить следующий скрипт:


<?php
include_once 'install.php';
$settings = array(
  
'parameters' => array(
    
'profile' => 'default',
    
'locale' => 'en',
  ),
  
'forms' => array(
    
'install_settings_form' => array(
      
'driver' => 'mysql',  //тип базы данных
      
'database' => 'my_db_name'//имя базы данных
      
'username' => 'my_db_username'//имя пользователя базы данных
      
'password' => 'my_db_password' //пароль к базе данных
    
),
    
'install_configure_form' => array(
      
'site_name' => 'My site',  //название для вашего сайта
      
'site_mail' => 'admin@mymail.com'//email сайта
      
'account' => array(
        
'name' => 'admin',  //имя суперпользователя сайта
        
'mail' => 'admin@mymail.com',  //email суперпользователя (обычно совпадает с email сайта)
        
'pass' => array(
          
'pass1' => 'password_for_site',  //пароль суперпользователя
          
'pass2' => 'password_for_site',  //подтверждение пароля суперпользователя
        
),
      ),
      
'update_status_module' => array(=> TRUE),  //включить иодуль Update Manager
      
'clean_url' => TRUE,  //включить чистые ссылки
    
),
  ),
);
install_drupal($settings);
?>