Так как в последнее время плотно подсел на друпал,а дневник разработчика я вел скрытно, для себя. Так как сам обучался на материалах и блогах других людей, решил создать блог по теме разработки на друпал.ру,почему на друпал.ру а не на личном блоге ? причина - кофициент полезности информации, проще информацию накапливать в одном месте чем раскидывать по интернету. Хочу выкидывать код и размышления по поводу друпала. Надеюсь это кому нибудь поможет.
Я уже год как знаком с друпалом. С разработкой модулей пока не сталкивалася - не было необходимости, пока без них обходился. А в целом темизацию развил неплохо. На этом хватит. Ближе к делу.
Мои размышления по поводу модуля e-commerce.
Нужно сделать магазин. Простой магазин для индивидуального дизайнера. Это значит немного вещей, чтобы был, и что бы было элегантно. Я поставил екомерс - разбирался 5 часов и понял, что функционал который я хочу - будет сложно осуществить. Сложность заключаетсья в том, что нужно лесть в хуки, разбираться в функциях и так далее. А "хороший программист - ничего не пишет" - так говорил мой начальник. А по большому счету я хотел что-бы было все просто - галлерея товаров, страница с товаром, потом обзор карзины и сразу кнопка чекаут на пейпал.
После долгих разборов полета в комерсе, я загугли слово "е-комерс" и нашел в одном посте быстрое и элегантное решение на http://simplecartjs.com/ - все реализованно на javascripte. Я разобрался за 1 час был готов рабочий магазин. Конечно "хороший программист - ничего не пишет" - я не хотел писать свою cms, начал создавать тему для друпала. А именно - на главное странице галлерея с фильтраций quicksand.js, потом страница продукт с галлереей gallerefic.js и конечно подключить simplecartjs.
Я не буду описывать все ньюансы, если будут вопросы, конечно то отвечу, а пока что в голове то и буду писать. Абстрактно пока,что :
Шапка и главное меню - всю просто и понятно.
Дальше нужно категории для сортировки товара для quicksand.js. Создал таксономию и создал меню c помощью специального модуля. Изменил вывод вот так вот:
$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 , сначала тизер - не страница :
<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"> </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;
}
Ну вот главная страница готова. Страница продукта в процессе - как сделаю расскажу, потом выкину весь проект на обозрение. А пока жду комментариев , стоит ли вообще разжуванием заниматься, достучусь ли я до аудитории ? какие мысли у сообщества ?
Комментарии
P.S. Когда закончу проект с simplecart.js конечно постараюсь повторить такой же функционал и для e-commerce
выкидывать не надо. Лучше аккуратно здесь выкладывай )))
в таком случае стоит смотреть в сторону филдов и их форматтеров, и вместо темплейтов с препроцессами использовать панели
Что это за сторона такая - филды и форматеры, можно поподробнее. Вообще все это ради галлереи, там нужно конкретные названия классов для каждого дива.
Field Formatter