Начало

Аватар пользователя roma4ke roma4ke 20 августа 2012 в 23:28

Так как в последнее время плотно подсел на друпал,а дневник разработчика я вел скрытно, для себя. Так как сам обучался на материалах и блогах других людей, решил создать блог по теме разработки на друпал.ру,почему на друпал.ру а не на личном блоге ? причина - кофициент полезности информации, проще информацию накапливать в одном месте чем раскидывать по интернету. Хочу выкидывать код и размышления по поводу друпала. Надеюсь это кому нибудь поможет.
Я уже год как знаком с друпалом. С разработкой модулей пока не сталкивалася - не было необходимости, пока без них обходился. А в целом темизацию развил неплохо. На этом хватит. Ближе к делу.
Мои размышления по поводу модуля e-commerce.
Нужно сделать магазин. Простой магазин для индивидуального дизайнера. Это значит немного вещей, чтобы был, и что бы было элегантно. Я поставил екомерс - разбирался 5 часов и понял, что функционал который я хочу - будет сложно осуществить. Сложность заключаетсья в том, что нужно лесть в хуки, разбираться в функциях и так далее. А "хороший программист - ничего не пишет" - так говорил мой начальник. А по большому счету я хотел что-бы было все просто - галлерея товаров, страница с товаром, потом обзор карзины и сразу кнопка чекаут на пейпал.
После долгих разборов полета в комерсе, я загугли слово "е-комерс" и нашел в одном посте быстрое и элегантное решение на http://simplecartjs.com/ - все реализованно на javascripte. Я разобрался за 1 час был готов рабочий магазин. Конечно "хороший программист - ничего не пишет" - я не хотел писать свою cms, начал создавать тему для друпала. А именно - на главное странице галлерея с фильтраций quicksand.js, потом страница продукт с галлереей gallerefic.js и конечно подключить simplecartjs.
Я не буду описывать все ньюансы, если будут вопросы, конечно то отвечу, а пока что в голове то и буду писать. Абстрактно пока,что :
Шапка и главное меню - всю просто и понятно.
Дальше нужно категории для сортировки товара для quicksand.js. Создал таксономию и создал меню c помощью специального модуля. Изменил вывод вот так вот:

function cargo_menu_link__menu_category(&$variables) {
  $element = $variables['element'];
  $sub_menu = ''; // это тоже мне не нужно, ну да ладно.
  $output = '<a class="button" href="#" data-type='.$element['#title'].'>'.$element['#title'].'</a>'; // класс для отслеживания нажатия, href - пустышка, data-type - для quicksand.js
  return '<li>'. $output ." /</li>\n"; - добавил слеш для стиля.
}

Отлично - разобрался как стилизовать любое меню.
Дальше вывод товара. Создал тип product. и node--product.tpl.php , сначала тизер - не страница :

<?php if (!$page): ?> // не страница , значит - тизеры на главной, то что нужно.
        <li data-id="product-<?php print $node->nid; ?>" data-type="<?php print $category; ?>" class="product"> // data-type для сортировки в сендбокс должна совпадать с категориями.
                <a href="<?php print $node_url; ?>" title="<?php print $title; ?>" class="product-a"> // тут все понятно
                        <img class="product-img" src="<?php print $front_img_src; ?>" alt="<?php print $title; ?>">  // дальше идут переменные, нужно смотреть в темпейлт препроцесс
                        <div class="product-info">
                                <h3><?php print $title; ?>
                                <br><span class="line">&nbsp;</span>
                                <span class="currency_sign">$</span><?php print $price; ?></h3>
                        </div>                 
                </a>
        </li>
       
<?php else: ?>

Итак препроцесс для node--product

 
function cargo_preprocess_node(&$variables, $hook) { // эта функция отслеживает типы контента

   $function = __FUNCTION__ . '_' . $variables['node']->type;
  if (function_exists($function)) {
    $function($variables);
  }
}
// и вот сама функция для продукта, тут все переменные
//field_fetch_field_values - функция выхватывает переменные из полей. нашел <a href="http://drupal7ish.blogspot.com/2011/03/getting-field-data-out-of-entitie...тут</a>
function cargo_preprocess_node_product(&$variables) {  
 $node = $variables['node'];
 $content = $variables['content'];
 $price = field_fetch_field_values('node', $node, 'field_price', 0);
   /* if-statment cos in page it's return different array, and bacicly i don't need it anymore */
 if(!$variables['page']){
         $category = field_fetch_field_values('node', $node, 'field_categories',0)->name;
         $variables['category'] = $category;     
 }
 
 $img_uri = field_fetch_field_values('node', $node, 'field_image', 0,'uri');
 if($variables['page']){
         $gallery = field_fetch_field_values('node', $node, 'field_gallery',NULL,'uri');
       
        foreach ($gallery  as $item=>$img_uri) {
         
         $full_img_src = image_style_url('large', $img_uri);
         $thumb_img_src = image_style_url('product_thumb', $img_uri);
         
         $variables['gallery'][$item]='<li><a class="thumb" name="two" href='.$full_img_src.' title="image of '.$variables['title'].'">
                <img class="item_thumb" src='
.$thumb_img_src.' />
                        </a>
                 </li>'
;
        }
       
 }
 $front_img_src = image_style_url('product_front_thumb', $img_uri);
 
 $variables['price'] = $price;
 $variables['front_img_src'] = $front_img_src;
 
}

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

Комментарии

Аватар пользователя roma4ke roma4ke 20 августа 2012 в 23:33

P.S. Когда закончу проект с simplecart.js конечно постараюсь повторить такой же функционал и для e-commerce

Аватар пользователя alex_shut alex_shut 21 августа 2012 в 0:04

"roma4ke" wrote:
Хочу выкидывать код

выкидывать не надо. Лучше аккуратно здесь выкладывай )))

Аватар пользователя Andruxa Andruxa 21 августа 2012 в 1:32

"roma4ke" wrote:
"хороший программист - ничего не пишет"

в таком случае стоит смотреть в сторону филдов и их форматтеров, и вместо темплейтов с препроцессами использовать панели

Аватар пользователя roma4ke roma4ke 21 августа 2012 в 2:52

Что это за сторона такая - филды и форматеры, можно поподробнее. Вообще все это ради галлереи, там нужно конкретные названия классов для каждого дива.