Делаю магазин на базе сборки оупенсторе, но в друпале разбираюсь плохо, в связи постоянно возникают какие-то сложности, которые без вашей помощи не преодолеть. У меня есть несколько вопросов, может с чем сталкивались: 1) Можно ли реализовать аякс корзину на основе виевз ? Аякс карт ставил, но возможности маловаты. Если нет, то как ограничить число товаров, отображаемое в корзине? 2)Аякс карт и Аякс драйвен карт - это одно и то же? Если нет, дайте, пожалуйста, ссылка на скачкавние второго, сам не нашел. 2) Есть ли модуль, меньший кнопку добавить в корзину (или только ее класс) после нажатия? Т.е было Хочу это, ткнул, стало хочу еще. Если нет, то как на пхп задать условие, что данный товар уже есть в корзине? Необходимо сделать это как в каталоге, так и в файле ноде-продакт.райт.тпл.пхп. Код будет разный? 3) существует ли модуль, реализуящий эффект перелетания товара в корзину при нажатии на добавить в корзину?
Комментарии
Сказано как то не политкоректно, но правильно.
Есть дугой путь - стать веб-разрабом.
я сам хочу научиться, какой найми
а можно ли вместо шоу_карт_баттом вставить универсальный хтмл код, который подходил бы для любго товара? Код из исходника не работает, добавляет один и тот же товар на любой странице. Хоть логику объясните по вышеуказанным вопросам, как это примерно сделать можно, бог с ним с кодом, вы ж тут опытные разработчики, некоторые даже с хх стажем
дел
Ну... Толя, ты мне льстишь... значит я либо гений, либо лютый инфернальный учоный, либо (даже боюсь этого предположить) в себе сочленил первое со вторым.
В друпале, в отличие от многих других CMS, есть очень стройная логика и идеология, поняв которую, далее оч. легко работать.
попунктно
1) можно и на основе views, что внутри корзины отображается темизируется все, и какую именно часть корзины вам нужна на основе views, то что отображается такое маленькое или когда человек уже в оформление заказа заходит или по ссылке в саму корзину, когда там таблица выскакивает со всем что он в корзину положил?
2) вывод товаров в корзине модуля uc_ajax_cart темезируется, но правда в режиме кэширования для анонимусов, в других режимах не знаю, но думаю также
2) по поводу кнопки, ручками на js можно заблокировать кнопу добавить в корзину пока ваш товар летит в корзинку и не получено ajax подтверждение что товар добавлен, тогда дважды кликнув по ней добавится только один товар, а не два. js поможет и кнопку уменьшить и остальное.
3) не знай, есть ли, модуль не нашел, пришлось самому сделать. лятает. модуль с летящим товаром в корзину имеет смысл только если корзина типа ajax :), когда страница не перезагружается.
могу заранее добавить еще 5-й пункт, придется делать ajax корзину которая умеет для анонимных пользователей в режиме кэширования drupal работать. Но сочетание модуля uc_ajax_cart + ваш код темизации решит и эту проблему.
PS: знание php, css, js, drupal api, theming, hooking, templating обязательны.
На основе виевз нужна корзина, которая будет отображаться в блоке при просмотре каталога товаров и обновляться без перезагрузки страницы. Аякс карт да, темизируется в аякс.карт.тпл.пхп. Но там только четыре допустимые переменные, а мне нужены еще. В частности, нет переменной стоимость товара, есть только общая стоимость данного вида товара(цена одного умноженая на колчество), плюс никак не выходит заменить отображение грн на руб, а в виевз это делается в два клика. В общем, на виевз удобней и понятней для меня, поэтому хотелось бы на нем это реализовать. Вот допустим сделал я блок с выводом всего необходимого, как же сделать чтоб обновлось на аяксе? Я поэтом и спрашивал про аякс дивен карт, он вроде, как я где-то читал, позволяе это реализовать, но самого модуля нет ни на д.орг, ни на уберкарт.орг. На счет корзины, которая работает в режиме кэширования, есть модуль, который это реализует на проме аякс карт, название забыл, но он точно есть. А ваш ПС меня пугает:)
Думаю смогу сделать летающие товары, скрипт на аяксе нашел, но чтобы он работал, необходимо обернуть изображение в див и задать ему класс, но что-бы этот класс не повторялся у других товаров в каталоге. Другими словами, нужна переменная, наприме ид товара. Такая переменная есть вообще? ид ноды не подходит, он не выводится в этом шаблоне. Я пробовал в виде, который выводит страницу продактс, задать у поля Изображение префикс и суффикс что-то типа див ='имя' и /див, но при просмотре исходного кода заметил, что они не выводятся, почему?
Так-то оно так, но потому как быть того не может, кабы чего-нибудь да не было. И не потому, что оно вообще, а когда оно что, вот тогда оно и пожалуйста.
модуль для режима кэширования может и есть, но только вот опять где же он и стабильно ли работает, да и дописывать все равно надо, блок корзины вы ведь свой хотите на основе views. Я делал на основе uc_ajax_cart, так как его api оказалось более менее вменяемым и логичным чтобы обойтись чистой темизацией и хуками в tamplate.php без изменения самого модуля кажется и в режиме работы друпала кэширования для анонимусов.
к тому же советую обратить внимание на то сколько сайтов использует тот или иной модуль очень не хочется в случае обновления оказаться в ситуации когда модуль умер.
насчет идентификации своим классом летающего товара в корзину, у меня летит когда жмут кнопку добавить в корзину, как правило кнопка находится в форме, поэтому:
{
var form_id = jQuery14(this).parents('form').eq(0).attr('id');
....
далее подобно можно добраться до div-а в котором у вас описание конкретно этой единицы товара, на случай если у вас таблица где туча товаров, и потом спустится до картинки, так получите изображение и скормите его тому скрипту.
содержимое корзины у меня собирается так, насколько помню это почти точная копия того что в uc_ajax_cart лежит, никто не мешает вам в items напихать все что угодно, а уже в
хуке uc_cart_block_content использовать это чтобы выводить как вам надо.
{
$cart_content = uc_cart_get_contents();
//drupal_set_messages("hehe:" .print_r($cart_content, TRUE));
$product_count = count($cart_content);
$items = FALSE;
$item_count = 0;
$total = 0;
if ($product_count) {
foreach ($cart_content as $item) {
$display_item = module_invoke($item->module, 'cart_display', $item);
if (!empty($display_item)) {
$items[] = array(
'nid' => $display_item['nid']['#value'],
'qty' => t('qty×', array('qty' => $display_item['qty']['#default_value'])),
'title' => $display_item['title']['#value'],
'price' => $display_item['#total'],
'desc' => isset($display_item['description']['#value']) ? $display_item['description']['#value'] : FALSE,
//'not_ship' => isset($item->not_ship) ? true : false,
);
}
if (!isset($display_item->not_ship))
{
$item_count += $item->qty;
$total += $display_item['#total'];
}
}
}
// Build the item count text and cart links.
$item_text = format_plural($item_count, '<span class="num-items">count</span> Item', '<span class="num-items">count</span> Items');
$summary_links = array(
'cart-block-view-cart' => array(
'title' => t('View cart'),
'href' => 'cart',
'attributes' => array('rel' => 'nofollow'),
),
);
// Only add the checkout link if checkout is enabled.
if (variable_get('uc_checkout_enabled', TRUE)) {
$summary_links['cart-block-checkout'] = array(
'title' => t('Checkout'),
'href' => 'cart/checkout',
'attributes' => array('rel' => 'nofollow'),
);
}
$block = array(
'subject' => theme('uc_cart_block_title', $title, $icon_class, $collapsible),
'content' => theme('uc_cart_block_content', $help_text, $items, $item_count, $item_text, $total, $summary_links),
);
return $block;
}
Спасибо большое за ответы, буду пробовать!