Acar - AJAX cart for Ubercart

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

Аватар пользователя aRpi aRpi 2 мая 2012 в 9:05

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

!!!ВНИМАНИЕ!!!

Модуль Acar позволяет манипулировать содержимым корзины ubercart. Это всевозможные поля и кнопки, для отображения и изменения параметров, помещенных в корзину продуктов.

Все манипуляции, над содержимым корзины осуществляются мгновенно, согласованно с сервером через AJAX. Без перезагрузки страницы.

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

Acar корзину можно темизировать. Придавая ей, уникальный вид, по всем правилам html. Тем самым реализуя, любые дизайнерские задумки.

ВложениеРазмер
Иконка пакета uc_acar-6.x-2.11.zip46.38 КБ
Иконка пакета uc_acar-7.x-2.11.zip46.37 КБ
Иконка пакета uc_acar-7.x-2.11-ubercart-3.1.zip46.36 КБ
Иконка пакета colorbox_leaf-7.x-1.1.zip14.07 КБ
Иконка пакета acaptcha-7.x-1.0.zip3.98 КБ

Комментарии

Аватар пользователя aRpi aRpi 19 октября 2015 в 13:28

Acar - Модуль ajax корзины для магазина Ubercart, CMS Drupal.

Введение.

Модуль Acar позволяет манипулировать содержимым корзины ubercart. Это всевозможные поля и кнопки, для отображения и изменения параметров, помещенных в корзину продуктов.

Все манипуляции, над содержимым корзины осуществляются мгновенно, согласованно с сервером через AJAX. Без перезагрузки страницы.

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

Acar корзину можно темизировать. Придавая ей, уникальный вид, по всем правилам html. Тем самым реализуя, любые дизайнерские задумки.

Использование.

Сразу после установки, форма корзины, доступна в двух местах. На своей собственной странице /shopping-cart. И на стандартной странице корзины ubercart, в виде дополнительной панели. Настроить панели, можно в настройках ubercart /admin/store/settings/cart/panes. Обе эти формы темизируется шаблоном uc-acar-pane.tpl.php.

Ещё одна форма корзины доступна как блок. Который необходимо предварительно активировать. А темизируется она, шаблоном uc-acar-bloc.tpl.php.

Для вывода формы добавления или формы корзины на странице продукта, а так же при помощи views. Предназначены специальные field и views поля: "Acar – Form produc or cart". Для этих полей в настройках, необходимо указывать используемый шаблон. Он может быть любым, но по идеи это должен быть шаблон uc-acar-adde.tpl.php, для формы добавления в продукте, и uc-acar-view.tpl.php для формы добавления в views. Для управления field полями в типе материала не забудьте включить модуль Field UI.

Таким образом, нам придется иметь дело, со следующими шаблонами:
uc-acar-pane.tpl.php - Шаблон формы корзины, на странице корзины: /cart и / shopping-cart.
uc-acar-bloc.tpl.php - Шаблон формы корзины, отображаемой в блоке.
uc-acar-adde.tpl.php - Шаблон формы добавления в продукте.
uc-acar-view.tpl.php - Шаблон формы добавления в views.
Это конечно все условно, вы можете именовать свои шаблоны как вам угодно.

Поиск шаблона, осуществляется в каталоге текущей темы оформления. Если он там отсутствует, то берётся шаблон null.tpl.php из каталога модуля Acar.

Изначально после установки, используется шаблон демонстрирующий возможности корзины. Это шаблон null.tpl.php в каталоге модуля Acar.

В каталоге templates, находяться несколько каталогов с шаблонами действительно пригодными для использования. Чтобы приступить к темизации Acar корзины, необходимо скопировать содержимое одного из этих каталогов, в каталог темы оформления. И уже там, если нужно изменять скопированные шаблоны, придавая корзине требуемый вид.

Темизация.

Файл шаблона, темизирующий форму корзины или форму добавления, представляет из себя, самый обыкновенный html/php. Где внутри как правило, но не обязательно, скриптовых элементов, размещается html код шаблонов, в целом и отвечающих за темизацию.

А именно, это так называемый шаблон список, он должен быть помечен классом $lis:

<script class="$lis" type="text">...</script>

И шаблон пункт, помечаемый классом $ite:

<script class="$ite" type="text">...</script>

На самом деле шаблоны могут быть размещены в абсолютно любых html элементах, главное что бы у них был помечен класс $lis и $ite.

<div class="$lis">...</div>
<div class="$ite">...</div>

Здесь нужно учитывать, что script работает быстрее, так как передает в себе чистый текст. Однако проблема при передачи шаблона через script в том, что невозможно создать корзину загружаемую через ajax, например при помощи colorbox. В будущем постараюсь устранить этот недостаток. Размещение шаблона в любом другом элементе конечно спасает. Но и здесь есть один недостаток. Невозможно будет написать шаблон корзины, основанной на таблице где $ite является tr элементом.

Самый простой шаблон, выводящий просто список продуктов в корзине может выглядеть, например так:

<script class="$lis" type="text"><div class="$$par"></div></script>
<script class="$ite" type="text"><div><a class="@tit()"></a></div></script>

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

Шаблон список - это шаблон своего рода ёмкости для продуктов, поэтому он необходим для формы корзины. В то время как шаблон пункт - это шаблон отдельного продукта, и применяется как для формы корзины, так и для формы добавления.

При темизации формы корзины, что бы было понятно, в какой именно элемент корзины вставлять продукты, этот самый элемент, в шаблоне список, следует пометить классом $$par. Однако если требуется вставлять продукты не внутрь элемента, а перед каким либо элементом, то такой элемент следует пометить классом $$chi.

<div class="$$par"></div>
<div class="$$chi"></div>

Для наделения, какого либо элемента способностью отображать или изменять параметры продукта или корзины, этот самый элемент необходимо оснастить соответствующим функционалом. Осуществляется это за счет передачи через атрибут class функционала, который необходимо внедрить в элемент.

Оформляется подобное внедрение внутри атрибута class, следующим образом:

@fun(arg0,arg1,arg2,...)

В начале, символ '@', далее идентификатор функции, после него, в скобках перечисляются аргументы. Желательно избегать использования пробелов, вместо них лучше использовать юникод пробел '\u0020'.

При всем при этом атрибут class, по прежнему сохраняет своё изначальное предназначение. Вы можете смело через пробел указывать применяемые к элементу стили.

Например, следующий input элемент, размещённый в шаблоне пункта, при помощи функции @qty, позволит отображать и изменять количество продукта.

<input class="@qty(true)" type="text"/>

Эту функцию, как и любую другую, можно применить к любому элементу, например к div. Количество продукта будет так же отображаться, но изменить его, по причине того что это div не получится.

<div class="@qty(true)"></div>

Для отображения и изменения параметров корзины или продукта, предоставлено множество функций. В один элемент может быть внедрено сразу несколько функций, однако будьте внимательны, комбинации некоторых функций могут перекрывать работу друг друга, хотя и не вызовут ошибок.

Функции.

Применяя функцию к элементу, в зависимости от назначения функции, элемент становиться способным влиять на состояние корзины, или отображать какое либо из них.

Функция @img.

@img(exe = true) <a></a> <img/> $ite

Выводит изображение продукта.

exe - Условие использования*.

Применяется к элементу img, делая его картинкой продукта. Более того, если родительский элемент является ссылкой, эта ссылка начинает ссылаться на продукт:

<a><img class="@img(true)"/></a>

Если применять функцию, к любому другому элементу, то размещает внутри этого элемента картинку продукта. А сам элемент, если это ссылка, начинает ссылаться на продукт:

<a class="@img(true)"></a>

Использовать функцию @img, для создания картинки продукта, совсем необязательно. Путь к картинке можно достать из ресурсов, обратившись к свойству uc_acar.reso.ite[nid].img.

Например, при помощи функции @ScR можно устанавливается значение атрибута href. Присвоив в него путь к картинке продукта, взятый из ресурсов. Идентификатор продукта тогда, берется из свойства this.$vie.mod.nid:

<img class="@ScR(true,'this.src=uc_acar.reso.ite[this.$vie.mod.nid].img;')"/>

Функция @tit.

@tit(exe = true) <a></a> $ite

Отображает название продукта, а так же создает на него ссылку.

exe - Условие использования*.

Размещает внутри элемента, к которому применяется функция текс, с названием продукта. Если функция применяется к элементу input, название продукта присваивается атрибуту value.

Если элемент, является ссылкой, эта ссылка начинает ссылаться на продукт.

<a class="@tit(true)"></a>

Функция @qty.

@qty(exe = true) <input type="text"/> $ite

Отображает и изменяет количество продукта.

exe - Условие использования*.

Для формы добавления, эта функции позволяет не просто изменить количество продукта, но и добавить или удалить продукт из корзины.

<input class="@qty(true)"/>

Функция @qtc.

@qtc(exe = true, qtc = 1) <input type="button"/> $ite

Изменяет количество продукта при щелчке, на определенную величину.

exe - Условие использования*.
qtc - Величина на которую следует менять количество продукта.

Применяется, как правило, к элементу кнопки. Для формы добавления, эта функция не просто изменяет количество, но и когда это имеет смысл, добавляет или удаляет продукт из корзины.

Особенностью данной функции, как и некоторых других предназначенных специально для кнопок, является обработка события нажатия. При котором фоновое изображение, сдвигается вниз и вправо на 1 пиксель, когда кнопка нажата.

Функция @CHE.

@che(exe = true, val = 1) <input type="checkbox"/> $ite

Функция позволяет добавить или удалять продукт, при помощи чекбокса.

exe - Условие использования*.
val – Потенциальное количество.

Данная функция, хотя и предназначена специально для чекбокса, может быть применена к любому другому элементу. Щелкая по которому, точно так же можно, удалить или добавить продукт.

При добавлении в корзину добавляется количество продукта равное так называемому потенциальному количеству. На которое кстати может влиять функция @qtx.

Благодаря этому если про помощи чекбокса удалить продукт, а потом снова добавить его, то количество добавленного продукта будет таким же как и до удаления.

Эта функция, работает согласованно с функцией @qtx, которую необходимо применять к текстовому полю. Влияющая на потенциально количество. Функция @qtx так же как и функция @qty позволяет отображать и изменять количество продукта. Но в отличии от последней не позволяет добавлять или удалять его. Вместо этого, когда продукт отсутствует в корзине, отображает и изменяет то самое, потенциальное количество продукта, которое будет добавлено в корзину если поставить галочку в чекбоксе.

Примеры:

<input type="text" class="@qtx(true,1)"/>
<input type="button" class="@qtc('inc',-1) @sty('inc',{disabled:false}) @sty('exc',{disabled:true})" value="-"/>
<input type="button" class="@qtc('inc',+1) @sty('inc',{disabled:false}) @sty('exc',{disabled:true})" value="+"/>
<input type="checkbox" class="@CHE(true)"/>

Функция @qtx.

@qtx(exe = true, val = 1) <input type="text"/> $ite

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

exe - Условие использования*.
val - Потенциальное количество.

Это функция специально предназначена для согласованной работы вместе с чекбоксом, функцией @CHE.

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

<input class="@qtx(true,1)"/>

Функция @qta.

@qta(exe = true) <input type="text"/> $ite $lis

Отображает общее количество продуктов лежащих в корзине.

exe - Условие использования*.

Функция @pri.

@pri(exe = true, sig = false, frm = false) <input type="text" readonly/> $ite

Отображает стоимость одного экземпляра продукта.

exe - Условие использования*.
sig - Знак валюты*.
frm - Формат числа*.

Функция @tot.

@tot(exe = true, sig = false, frm = false) <input type="text" readonly/> $ite

Отображает стоимость количества продукта.

exe - Условие использования*.
sig - Знак валюты*.
frm - Формат числа*.

Функция @abs.

@abs(exe = true, sig = false, frm = false) <input type="text" readonly/> $ite $lis

Отображает общую стоимость всего содержимого корзины.

exe - Условие использования*.
sig - Знак валюты*.
frm - Формат числа*.

Эта функция может быть использована как в шаблоне пункт, так и в шаблоне список, так как её работа никак не связана с каким-то конкретным продуктом.

Функция @atr.

@atr(exe = true, cla = uc_acar.atri.atri, sty = undefined) <span></span> $ite

Выводит атрибуты продукта.

exe - Условие использования*.
cla - Класс, определяет способ вывода атрибутов.
sty - Стиль*, применяемый к атрибутам.

Используется в форме добавления, для настройки атрибутов добавляемого продукта, а в форме корзины для изменения атрибутов продукта. Так же позволяет просто отображать значение атрибутов в виде списка. Определяется это классом.

Доступно два класса:

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

Стиль, применяемый к атрибутам, устанавливает для элементов составляющих атрибуты значение их css-стиля, класса, и атрибутов. Тем самым, позволяя темизировать атрибуты.

Для обоих классов имеется соответствующий каждому стандартный стиль. И если не указывать какой-то конкретный стиль, к атрибутам будет применён стандартный стиль соответствующий классу.

Стили для класса uc_acar.atri.atri:

uc_acar.atri.atri.sty.def - Стандартный стиль, используется по умолчанию.

Стиль для класса uc_acar.atri.imge:

uc_acar.atri.imge.sty.def - Стандартный стиль, используется по умолчанию.
uc_acar.atri.imge.sty.min - Красивый стиль с мелкими буквами.

Функция @SKU.

@sku(exe = true) <span></span> $ite

Выводит SKU продукта.

exe - Условие использования*.

Что бы выводился корректный SKU для различных комбинаций атрибутов, необходимо в настройках активация опции "подключение информации о SKU", иначе будет выводиться всего лишь базовый SKU продукта.

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

<div>SKU: <span class="@SKU(true)"></span></div>

Функция @sto.

@sto(exe = true) <span></span> $ite

Выводит запас товара на складе.

exe - Условие использования*.

Для продуктов, у которых склад не настроен функция ничего не выводит.

Для работы данной функции, необходимо что бы в настройках была активирована опция "подключения информации о складе". Иначе функция будет вести себя так будто бы склад для данного продукта не настроен.

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

Функция может работать с учетом комбинаций атрибутов. Но для этого должна быть активирована опция "подключения информации о SKU".

<div>Stock: <span class="@sto(true)"></span></div>

Функция @tra.

@tra(exe = true, tra = undefined) <input type="button"/> $ite $lis

Осуществляет переход при щелчке, на страницу продукта или по указанному адресу.

exe - Условие использования*.
tra - Адрес для перехода.

Если адрес для перехода не указан, переход осуществляется на страницу продукта.

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

Если к элементу применяется несколько функций, эту функцию очень важно размещать последней. Иначе переход может осуществиться, а последующие функции просто не успеют сделать свою работу.

Функция @sty.

@sty(exe = true, sty) <div></div> $ite $lis

Накладывает на элемент указанный стиль.

exe - Условие использования*.
sty - Стиль* применяемый к элементу.

Функция @dis.

@dis(exe = true, dis = undefined) <div></div> $ite $lis

Позволяет если нужно скрывать или отображать элемент, в зависимости от условия использования.

exe - Условие использования*.
dis - Значение устанавливаемое для свойства display в случаи успеха.

Если условие использования истинно делает свойство display, равным переданному аргументу. Либо если аргумент не передан, таким которым оно было у элемента изначально.

Если условие использования ложно, делает свойство display раным none, тем самым заставляя элемент исчезнуть со страницы.

Для формы продукта вызов всех функций выполняется каждый раз при добавлении и удалении продукта, а так же при смене атрибутов. Это может быть очень полезно, так как позволит, при помощи функции @dis отображать или не отображать, какие либо данные в зависимости от условия использования.

Кстати подобную работу можно было бы осуществить и при помощи функции @sty.

Примеры:

Отобразить надпись если у продукта есть атрибуты.

<div class="@dis('atr')">У этого продукта есть атрибуты!!!</div>

Отображение надписи говорящей о том есть ли в корзине текущий продукт. Подобную конструкцию имеет смыслы использовать в форме добавления. Каждый раз при добавлении или удалении продукта надпись будет меняться.

<div class="@dis('inc')">Продукт добавлен в корзину.</div>
<div class="@dis('exc')">Продукт отсутствует в корзине.</div>

Функция @ScR.

@scr(exe = true, scr) <div></div> $ite $lis

Выполняет javascript выражение.

exe - Условие использования*.
exp - Javascript выражение.

Javascript выполняется от имени того элемента, к которому применяется функция. Это значит, что этот элемент будет доступен нам через this.

Примеры:

Следующим образом можно установить значение атрибута value.

<input class="@ScR(true,'this.value=65536;')" type="text"/>

Здесь устанавливается текс для span.

<span class="@ScR(true,'this.textContent=123456;')"></span>

Аргумент условие использования.

Аргумент условие использования, передается абсолютно во всех функциях. С его помощью, можно настроить при каких обстоятельствах следует внедрять функцию в элемент.

Это либо логическое значение. Либо строка содержащая в себе javascript выражение. Результат работы которого и определяет следует ли применять к элементу данную функцию.

Если это логическое значение то тут все понятно, оно однозначно говорит следует ли применять функцию к элементу.

Если же это javascript выражение, то оно будет исполняться в области видимости, либо текущего вида, либо ресурса. Соответствующего продукту или корзине, что зависит от шаблона $ite или $lis.

Здесь под видом понимается понимается вид в рамках архитектуры MVC. А под ресурсом объект хранящий исчерпывающею информацию о продукте или корзине.

Исполнение javascript, в области видимости вида или ресурса, определяется последним символом в этом самом javscript выражении. Если это символ ';' то javascript исполняется в области видимости ресурса, в противном случаи в оласти видимости вида.

Из вида доступны следующие переменные булевого типа:

add - Истинно если это форма добавления.
car - Истинно если это форма корзины.
inc - Подтверждает наличие продукта в корзине. Только для $ite.
exc - Подтверждает отсутствие продукта в корзине. Только для $ite.
atr - Подтверждает наличие у продукта атрибутов. Только для $ite.

Данные доступные из ресурса, описаны немного ниже, в соответствующей главе.

Примеры:

Функция применяется к элементу, условие использования логическое значение true:

<div class="@img(true)"></div>

Функция не применяется к элементу, условие использования логическое значение false:

<div class="@img(false)"></div>

Функция применяется к элементу, если у продукта есть атрибуты:

<div class="@img('atr')"></div>

Функция применяется к элементу, если у продукта НЕТ атрибутов:

<div class="@img('!atr')"></div>

Функция применяется к элементу, если продукт присутствует в корзине. Подобное условие актуально только лишь для формы добавления, так как в форме корзины продукт не может, не присутствовать.

<div class="@img('inc')"></div>

Что бы в форме добавления, элемент имел различную раскраску в зависимости, от наличия продукта в корзине, нужно использовать две функции @sty, каждая из которых срабатывает при различных обстоятельствах:

<div class="@sty('inc','background:#faa;') @sty('exc','background:#05f;')">-=***=-</div>

Функция применяется к элементу, если цена продукта больше 50. Обратите внимание, здесь аргумент условие использования заканчивается символом ';', благодаря чему выражение исполняется в области видимости объекта ресурсов:

<div class="@ScR('pri>50;','alert(1234);')></div>

Аргумент знак валюты.

Аргумент знак валюты используется в функциях вывода стоимости.

Если это false знак валюты не выводится, если true выводится знак валюты настроенный в ubercart.

Если же, в качестве знака валюты передается массив. То первый аргумент определяет собственно знак валюты в виде строки, а второй аргумент его расположение, в виде логического значения, слева или справа, от цены.

Примеры:

Вывод общей стоимости всех продуктов, без знака валюты.

<input class="@abs(true,false,false)" readonly/>

Со знаком валюты настроенным в ubercart.

<input class="@abs(true,true,false)" readonly/>

Наш вариант, где знак валюты 'Руб.' и расположен он справа от цены.

<input class="@abs(true,['Руб.',true],false)" readonly/>

Сам по себе знак волюты можно достать из ресурсов корзины, из свойства uc_acar.reso.lis.cur.sig. А что бы его вывести, можно воспользоваться функцией @ScR.

<span class="@ScR(true,'this.textContent=uc_acar.reso.lis.cur.sig;')"></span>

Аргумент формат числа.

Аргумент формат числа, применяется в функциях вывода стоимости чего либо.

Если это false, выводится число как есть, без всякой обработки, если true, используется формат, установленный в настройках ubercart.

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

Аргумент стиль.

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

Способы передачи стиля: класс, стиль, атрибуты.

• Класс.

Строка содержащая название класса.

<div class="@sty(true,'classname')">...</div>

• Стиль.

Строка содержащая css стиль. Должна обязательно заканчиваться символом ';'.

<div class="@sty(true,'background:#ffaa00;')">...</div>

• Атрибуты.

Объект, каждое из свойств которого соответствует атрибуту.

<a class="@sty(true,{href:'http://www.drupal.ru'}>LINK</a>

Данным способом можно установить любой атрибут элемента. Атрибут передается в виде строки.

Что бы обеспечить гибкость, имеется несколько уникальных дублирующих свойств:

$typ - Соответствует атрибуту type.
$nam - Соответствует атрибуту name.
$cla - Соответствует атрибуту class (className).
$sty - Соответствует атрибуту style (style.cssText).

Для применения стиля к дочерним элементам, предназначено свойство $chi. Представляющие собой массив стилей. Каждый из них применяется, в зависимости от его порядка, с периодичностью по кругу, к соответствующему дочернему элементу.

Благодаря тому что стили применяются с периодичностью по кругу. Дочерние элементы, можно раскрасить разными "цветами", в зависимости от порядка элемента, например "четный/нечетный".

<div class="@sty(true,{$chi:['black','white']})"><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p></div>

Ресурсы.

Для корзины, а также для каждого отдельного продукта имеются ресурсы.

Ресурсы хранят в себе всю необходимую информацию о корзине или продукте.

uc_acar.reso.lis - Ресурсы корзины.
uc_acar.reso.ite - Массив ресурсов продуктов.

Ресурс корзины:

uc_acar.reso.lis.ver - Текущая версия Acar корзины.
uc_acar.reso.lis.pth - Базовый путь, в котором лежит сайт, обычно '/'.
uc_acar.reso.lis.cur - Информация о знаке валюты.
uc_acar.reso.lis.cur.sig - Знак валюты.
uc_acar.reso.lis.cur.aft - Расположение знака валюты, слева или справа, булево значение.
uc_acar.reso.lis.cur.pre - Число десятичных знаков после запятой.
uc_acar.reso.lis.cur.dec - Десятичный разделитель, обычно точка.
uc_acar.reso.lis.cur.tho - Разделитель тысяч, обычно запятая.
uc_acar.reso.lis.csh - Информация для перехода на страницу продолжения покупок.
uc_acar.reso.lis.csh.tex - Текст ссылки перехода на страницу продолжения покупок.
uc_acar.reso.lis.csh.url - Адрес страницы продолжения покупок.

Ресурс продукта:

uc_acar.reso.ite[nid].nid - Идентификатор продукта.
uc_acar.reso.ite[nid].tit - Название продукта.
uc_acar.reso.ite[nid].pri - Стоимость продукта (изначальная, без учета атрибутов).
uc_acar.reso.ite[nid].img - Картинка продукта (строка в виде html).
uc_acar.reso.ite[nid].atr - Атрибуты продукта (внутренний формат).

Здесь nid это идентификатор продукта.

Вывести значения ресурса в шаблоне можно при помощи функции @ScR.

<input class="@ScR(true,'this.value=uc_acar.reso.lis.cur.sig')"/>

Для шаблона пункта $ite, идентификатор продукта доступен через this.$vie.mod.nid. Здесь this - это элемент к которому применена функция.

<input class="@ScR(true,'this.value=uc_acar.reso.ite[this.$vie.mod.nid].tit')"/>

Примеры:

Вывод ссылки на страницу продолжения покупок.

<a class="@ScR(true,'this.href=uc_acar.reso.lis.csh.url') @ScR(true,'this.textContent=uc_acar.reso.lis.csh.tex')"></a>

Передача в корзину данных со стороны сервера.

Что бы отобразить в корзине любые другие данные, эти самые данные необходимо передать в ресурсы.

Осуществляется это при помощи функций: имятемы_uc_acar_reso_lis и имятемы_uc_acar_reso_ite, размещенных в файле template.php, в каталоге темы оформления.

Эти функции позволяют передать в ресурсы продукта или корзины, любые данные со стороны сервера. Каждая из них, должна возвращать ассоциативный массив передаваемых данных.

Функция имятемы_uc_acar_reso_lis.

function имятемы_uc_acar_reso_lis(&$var)

Функция имятемы_uc_acar_reso_lis используется для передачи в объект ресурсов корзины, данных со стороны сервера. Вызывается она один раз.

function имятемы_uc_acar_reso_lis(&$var){
        return array(
                'parametr1' => 'value1',
                'parametr2' => 'value2',
                'parametr3' => 'value3',
        );
}

Функция имятемы_uc_acar_reso_ite.

function имятемы_uc_acar_reso_ite($var)

Функция имятемы_uc_acar_reso_ite используется для передачи данных в объект ресурса продукта. Вызывается каждый раз для каждого отдельного продукта. Внутри этой функции нода продукта доступна через переменную $var['ite'].

function имятемы_uc_acar_reso_ite($var){
        return array(
                'length' => $var['ite']->length,
                'width' => $var['ite']->width,
                'height' => $var['ite']->height,
        );
}

Если возникнут сложности с поиском необходимого поля, содержимое ноды можно отпечатать, использовав функции print_r. А в браузере увидеть результат нажав ctrl+U. И уже там разбираться, где же находится, или как называется требуемое вам поле.

function имятемы_uc_acar_reso_ite(&$var){
        print_r($var['ite']);
        return array();
}

После того как нужные нам данные переданы в объект ресурсов, они становятся доступными для вывода, при помощи функции @ScR.

<input class="@ScR(true,'this.value=uc_acar.reso.ite[this.$vie.mod.nid].length')" type="text"/>
<input class="@ScR(true,'this.value=uc_acar.reso.ite[this.$vie.mod.nid].width')" type="text"/>
<input class="@ScR(true,'this.value=uc_acar.reso.ite[this.$vie.mod.nid].height')" type="text"/>

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

Осуществить такую проверку можно через аргумент условие использования. Он обязательно должен заканчиваться символом ';', что бы работать в области видимости объекта ресурса.

<div class="@ScR('length!=0;','this.value=&amp;quot;Длина: &amp;quot;+uc_acar.reso.ite[this.$vie.mod.nid].length')"></div>
<div class="@ScR('width!=0;','this.value=&amp;quot;Ширина: &amp;quot;+uc_acar.reso.ite[this.$vie.mod.nid].width')"></div>
<div class="@ScR('height!=0;','this.value=&amp;quot;Высота: &amp;quot;+uc_acar.reso.ite[this.$vie.mod.nid].height')"></div>

Здесь мнемоника &quot; используется вместо кавычки ".

Отображение формы продукта или формы корзины в любом другом месте.

Форму корзины и форму добавления можно вставить где угодно. Для этого предназначены функция uc_acar_vie. Имеется ввиду внутри любой формы.

Функция uc_acar_vie

function uc_acar_vie($frm, $tpl, $nid = null)

Возвращает javascript код, создающий форму корзины, на основе указанного шаблона.

$frm – Тип формы, 0 - продукта или 1 - корзины.
$tpl - Полный путь к файлу шаблона.
$nid – Идентификатор ноды, для формы продукта.

Эта функция при первом запуске выполняет все необходимые инициализации и подключение всех требуемых ресурсов. И возвращает javascript который должен быть размещён в теле html документа. Форма корзины будет создана в том же самом месте, где и этот самый javascript, при его исполнении.

Для размещения формы продукта или корзины, внутри формы drupal, можно использовать свойство '#markup'.

Создание формы корзины:

$form[] = array(
        '#markup' => uc_acar_vie(1, path_to_theme().'/uc-acar-pane.tpl.php'),
);

Создание формы продукта, nid которого равен 155:

$form[] = array(
        '#markup' => uc_acar_vie(0, path_to_theme().'/uc-acar-adde.tpl.php', 155),
);

Функция qtc в качестве аргумента qtc принимает число и только его.
@qtc(exe = true, qtc = 1) $ite

Дополнение 1.

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

uc_acar.func.qtc = {};

//Коннект - при создании
uc_acar.func.qtc.$cnt = function(exe, qtc){
        // переменная _ - это объект хранящий внутри себе переменные текущей функции, здесь мы для нашей функции можем хранить все что угодно, почему не элемент использовать, а потому что к 1 элементу может быть повешено множество функций
        if(_.exe = uc_acar.func.exe(this, exe)){//какой то важный управляющий объект, возвращает "истину" если условие использования прокатило
                this.Qtc = qtc || 1;//аргумент переданное в функцию qtc
                _.lis = this.addLis("click", uc_acar.func.qtc.han);//регистрируем слушатель события
        };
        uc_acar.func.clic.ini.call(this);//что бы смещалась картинка на кнопке, нужно было через css делать
};
//Дисконнект - при удалении (отрабатывает при удалении продукта)
uc_acar.func.qtc.$dnt = function(){
        uc_acar.func.clic.dei.call(this);//что бы смещалась картинка на кнопке, нужно было через css делать
        if(_.exe){
                this.subLis(_.lis);//удаляем слушатель события
                this.Qtc = undefined;
        };
};
//Обработчик клика по кнопке
uc_acar.func.qtc.han = function(){
        var qty = this.$vie.mod.qty*1+this.Qtc;//получаем новое значение количества продукта которое нужно установить данно функцией.
//здесь this.Qtc - количество установленное в шаблоне в функции @qtc
//this.$vie.mod.qty - текущее количество продукта в корзине
//this.$vie.mod - модель продукта в рамках паттерна MVC
//this.$vie - вид корзины в рамках паттерна MVC - т.е. этот тот самый "шаблон корзины"
//this - это вроде html элемент точно не помню.
//this.$con - это контроллер корзины (всей корзины)
//this.$con.$mod - это модель корзины (всей корзины) в рамках MVC

        if(this.$vie.add){//this.$vie.add - говорит о том что у нас форма добавления
//для формы добавления
                if(this.$vie.inc){//this.$vie.inc - говорит о том что продукт уже есть в корзине
                        this.$con.$mod.apl(this.$vie.mod, {qty: 0 < qty ? qty : ""});//этот метод изменят количество товара в корзине
                        if(qty <= 0)//если новое количество товара которое мы пытаемся поместить в корзину < 0
                                this.$con.$mod.rem(this.$vie.mod); //удаляет товар из корзины
                }else{
                        if(0 < this.Qtc)
                                this.$con.$mod.ins({nid: this.$vie.mod.nid, dat: this.$vie.mod.dat, qty: this.Qtc}); //добавляет новый товар в корзину
//здесь:
//{
//nid: this.$vie.mod.nid,// - id ноды
//dat: this.$vie.mod.dat,// - хранит в себе комбинацию атрибутов для добавляемого продукта
//qty: this.Qtc// - значение количество продукта которое будет лежать в корзине
//}
                };
        }else
        if(this.$vie.car){//this.$vie.car - говорит что у нас форма корзины
//для формы корзины
                this.$con.$mod.apl(this.$vie.mod, {qty: qty}); //этот метод изменят количество товара в корзине
        };
};
uc_acar.adde[0].qtc = uc_acar.func.qtc;//что бы данная функция была доступна в шаблоне добавления
uc_acar.cart[1].qtc = uc_acar.func.qtc;//что бы данная функция была доступна в шаблоне корзины для продукта

Аватар пользователя sv2109 sv2109 2 мая 2012 в 18:04

Зашел на http://u6167.moko.vps-private.net/catalog/1 начал кликать по кнопкам (добавлять, удалять товары в корзину)
Один раз перестала работать кнопка с 3 плюсиками, при нажатии на нее ничего не происходило
Второй увидел вот такие ошибки:
Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! в функции EntityAPIController->load() (строка 184 в файле /home/u6167/domains/u6167.moko.vps-private.net/sites/all/modules/entity/includes/entity.controller.inc).
Notice: Undefined offset: 0 в функции Acar_Mode_Apl() (строка 103 в файле /home/u6167/domains/u6167.moko.vps-private.net/sites/all/modules/Acar/Acar.module).
Notice: Trying to get property of non-object в функции Acar_Mode_Apl() (строка 103 в файле /home/u6167/domains/u6167.moko.vps-private.net/sites/all/modules/Acar/Acar.module).
Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! в функции EntityAPIController->load() (строка 184 в файле /home/u6167/domains/u6167.moko.vps-private.net/sites/all/modules/entity/includes/entity.controller.inc).
Notice: Undefined offset: 0 в функции Acar_Mode_Apl() (строка 103 в файле /home/u6167/domains/u6167.moko.vps-private.net/sites/all/modules/Acar/Acar.module).
Notice: Trying to get property of non-object в функции Acar_Mode_Apl() (строка 103 в файле /home/u6167/domains/u6167.moko.vps-private.net/sites/all/modules/Acar/Acar.module).

Аватар пользователя sv2109 sv2109 3 мая 2012 в 22:59

aRpi wrote:
Выложил новую версию 1.0001, должна работать.

"sv2109" wrote:
Зашел на http://u6167.moko.vps-private.net/catalog/1

Какой у вас броузер?
Нажимали ли кнопку назад?
Слишком большую сумму не вводили? случайно?[/quote]
Chrome 15.0.874.121 Linux
Кнопку назад не нажимал. Суммы да, вводил разные.

ПС Вроде уже все работает.

Аватар пользователя demetr demetr 4 мая 2012 в 10:07

Набрал хлеб, молоко, чипсы. Потом в блоке уменьшил кол-во до 0, и перешел в оформление заказа. Может запретить уменьшение кол-ва до 0, у вас же для этого есть кнопка "Х".

Аватар пользователя aRpi aRpi 4 мая 2012 в 11:18

"demetr" wrote:
Набрал хлеб, молоко, чипсы. Потом в блоке уменьшил кол-во до 0, и перешел в оформление заказа. Может запретить уменьшение кол-ва до 0, у вас же для этого есть кнопка "Х".

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

Аватар пользователя FORTIS FORTIS 19 мая 2012 в 20:00

не совсем понятно зачем в корзине меняется количество при вводе вручную количества у товара.
ввел я 10 сыров нажал добавить - в корзине стало 10. решил еще 15 добавить - ввожу в товаре 15 и собираюсь нажать добавить в корзину, но еще до нажатия количество в корзине стало равным 15, а я хотел получить 10 + эти 15

Аватар пользователя aRpi aRpi 19 мая 2012 в 22:53

"FORTIS" wrote:
не совсем понятно зачем в корзине меняется количество при вводе вручную количества у товара.
ввел я 10 сыров нажал добавить - в корзине стало 10. решил еще 15 добавить - ввожу в товаре 15 и собираюсь нажать добавить в корзину, но еще до нажатия количество в корзине стало равным 15, а я хотел получить 10 + эти 15

Наоборот, это для удобства:
Мы сразу видим сколько продукта в корзине, со страницы продукта или каталога, и прям там можем изменить это количество и даже удалить продукт из корзины, не переходя в неё. Так задумано.
"FORTIS" wrote:
ввел я 10 сыров

И они уже в корзине, (нажимать не нужно) уже добавлены. Такой способ добавления.
"FORTIS" wrote:
а я хотел получить 10 + эти 15

Такой возможности нет.

Аватар пользователя FORTIS FORTIS 19 мая 2012 в 23:56

"aRpi" wrote:
Мы сразу видим сколько продукта в корзине, со страницы продукта или каталога, и прям там можем изменить это количество и даже удалить продукт из корзины, не переходя в неё. Так задумано.

но есть же кнопка добавить в корзину и ее нужно нажимать при первом добавлении, почему при последющих не нужно - не логично, кнопка есть а нажимать не нужно. тем более что нажав на нее мы получим в корзину число которое введено +1. разве интуитивно?)

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

модуль нравится, спасибо. но подправлю под себя, замечания, как по мне - значимые.

Аватар пользователя aRpi aRpi 31 мая 2012 в 18:12

"AlexeyBorisenko" wrote:
Для Drupal 6 хотелось видеть корзину. Не хватает кнопок + и - в том что есть на 6 сейчас.

Для 6 друпал делать Acar корзину не планируется Smile
это же динозавр...
пока что в планах только, версия для комерц.

Аватар пользователя AlexeyBorisenko AlexeyBorisenko 1 июня 2012 в 6:38

"aRpi" wrote:
Для 6 друпал делать Acar корзину не планируется Smile
это же динозавр...

Может и динозавр, но люди пользуются ещё этой версией, да и обновляется же ядро, значит не заброшенный проект.
Может кто в блоке Ajax Driven Cart подскажет (можно и за некую сумму), как сделать кнопку прибавления и уменьшения закинутого в корзину товара (кнопки + и -)?

Аватар пользователя rimen rimen 1 июня 2012 в 10:43

Включите модуль uc_cart_links, в шаблоне блока uc_ajax_cart, где нужно, добавьте ссылки вида (с ходу не помню) /cart/add/{$nid}?q{$product_amount} - смотрите в хелпе к модулю cart_links.
+ не забудьте "аяксифицировать" эти ссылки, в ajax_cart в настройках должна быть опция (нужно указать класс)

Аватар пользователя AlexeyBorisenko AlexeyBorisenko 4 июня 2012 в 6:35

"rimen" wrote:
Включите модуль uc_cart_links, в шаблоне блока uc_ajax_cart, где нужно, добавьте ссылки вида (с ходу не помню) /cart/add/{$nid}?q{$product_amount} - смотрите в хелпе к модулю cart_links.
+ не забудьте "аяксифицировать" эти ссылки, в ajax_cart в настройках должна быть опция (нужно указать класс)

Спасибо, с добавление 1 позиции понятно, но вот в хелпе cart_links по удалению 1 позиции ничего не вычитал...

Аватар пользователя rimen rimen 5 июня 2012 в 12:30

Да, действительно.
Тогда остается сделать небольшой хак uc_ajax_cart, видимо, сам делал так.
В функции uc_ajax_cart_links_process добавить отработку отрицательного кол-ва товара $p['qty'] < 0 (сейчас должно быть скорее всего только для >0)
<?phpif ($p['nid'] > 0 && $p['qty'] > 0) {...?>
под рукой только 7-ка

Тут получить содержимое корзины uc_cart_get_contents(), из него текущее кол-ва товара в корзине, из него вычесть полученное кол-во и обновить item uc_cart_update_item_object().
Структуры подаваемых параметров проверяйте по описанию функций или их коду.
Если все верно сделать, то новые линки можно будет сделать вида add/cart/p1_q-1 для вычитания

Аватар пользователя AlexeyBorisenko AlexeyBorisenko 6 июня 2012 в 9:19

"rimen" wrote:
Да, действительно.
Тогда остается сделать небольшой хак uc_ajax_cart, видимо, сам делал так.
В функции uc_ajax_cart_links_process добавить отработку отрицательного кол-ва товара $p['qty'] < 0 (сейчас должно быть скорее всего только для >0)
<?phpif ($p['nid'] > 0 && $p['qty'] > 0) {...?>
под рукой только 7-ка
Тут получить содержимое корзины uc_cart_get_contents(), из него текущее кол-ва товара в корзине, из него вычесть полученное кол-во и обновить item uc_cart_update_item_object().
Структуры подаваемых параметров проверяйте по описанию функций или их коду.
Если все верно сделать, то новые линки можно будет сделать вида add/cart/p1_q-1 для вычитания

Что-то видимо не так делаю. Не получается. Уже пробовал и 7-ку ставить) но что-то Acar ошибку за ошибкой выдает.

Аватар пользователя rimen rimen 6 июня 2012 в 13:32

Штоп

"AlexeyBorisenko" wrote:
Может кто в блоке Ajax Driven Cart подскажет

- это разве не о uc_ajax_cart? ) я в его контексте отвечал.

Аватар пользователя AlexeyBorisenko AlexeyBorisenko 7 июня 2012 в 4:50

"rimen" wrote:
- это разве не о uc_ajax_cart? ) я в его контексте отвечал.

Да нет, всё правильно Smile только никак выше описанное воедино сложить не получается.
Просто ещё решил попробовать на D7 (а то мне выше говорили, что я на динозавре работаю), но он меня своими ошибками не вдохновила что-то пока)

Аватар пользователя aRpi aRpi 7 июня 2012 в 19:12

"AlexeyBorisenko" wrote:
Просто ещё решил попробовать на D7 (а то мне выше говорили, что я на динозавре работаю), но он меня своими ошибками не вдохновила что-то пока)

Надо было сразу сказать. Я и не знал что там ошибка...
Перезалил.

Аватар пользователя AlexeyBorisenko AlexeyBorisenko 8 июня 2012 в 10:04

"aRpi" wrote:
Надо было сразу сказать. Я и не знал что там ошибка...
Перезалил.

Да и сам D7 какбы ещё радует ошибками. Поэтому всё же хотелось бы Acar на D6 Smile

Аватар пользователя aRpi aRpi 8 июня 2012 в 19:25

"AlexeyBorisenko" wrote:
Да и сам D7 какбы ещё радует ошибками.

Drupal 7, или всё таки уберкарт с его модулями?
В уберкарте помню были глюки, если не то закачать.
Я устанавливаю minimal версию drupal. И скачиваю уберкарт и зависимые модули, в виде dev версии, кроме views, у него dev версия глючная, так что ubercart вполне работает...
"AlexeyBorisenko" wrote:
Поэтому всё же хотелось бы Acar на D6 :)

Напишу версию под 6ку попозже.

Аватар пользователя Splinter Splinter 15 июня 2012 в 11:18

Модуль отличный. Всё работает, но с самого начала, как только поставил появились такие ошибки

Warning: include(acar_pane): failed to open stream: No such file or directory в функции Acar_Reso_TplGet() (строка 208 в файле /var/www/eda/httpdocs/sites/all/modules/Acar/Acar.module).
Warning: include(): Failed opening 'acar_pane' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') в функции Acar_Reso_TplGet() (строка 208 в файле /var/www/eda/httpdocs/sites/all/modules/Acar/Acar.module).
Аватар пользователя aRpi aRpi 15 июня 2012 в 11:26

"Splinter" wrote:
Всё работает, но с самого начала, как только поставил появились такие ошибки

Это предыдущая, глючная версия.
Закачайте новую версию. Acar-7.x-1.0005.zip

Аватар пользователя slaj slaj 5 июля 2012 в 22:30

Решил потестить модуль, только установил и сразу получил.
Warning: include() [function.include]: Filename cannot be empty в функции Acar_Reso_TplGet() (строка 215 в файле /home/vivasanv/public_html/test/sites/all/modules/Acar/Acar.module).
Warning: include() [function.include]: Filename cannot be empty в функции Acar_Reso_TplGet() (строка 215 в файле /home/vivasanv/public_html/test/sites/all/modules/Acar/Acar.module).
Warning: include() [function.include]: Failed opening '' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php') в функции Acar_Reso_TplGet() (строка 215 в файле /home/vivasanv/public_html/test/sites/all/modules/Acar/Acar.module).

Очистка кэша не исправила ситуацию

Аватар пользователя aRpi aRpi 6 июля 2012 в 4:29

"slaj" wrote:
Решил потестить модуль, только установил и сразу получил.
Warning: include() [function.include]: Filename cannot be empty в функции Acar_Reso_TplGet() (строка 215 в файле /home/vivasanv/public_html/test/sites/all/modules/Acar/Acar.module).
Warning: include() [function.include]: Filename cannot be empty в функции Acar_Reso_TplGet() (строка 215 в файле /home/vivasanv/public_html/test/sites/all/modules/Acar/Acar.module).
Warning: include() [function.include]: Failed opening '' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php') в функции Acar_Reso_TplGet() (строка 215 в файле /home/vivasanv/public_html/test/sites/all/modules/Acar/Acar.module).

Очистка кэша не исправила ситуацию

Имя файла отсутствует...

Сам не знаю откуда такая ошибка может быть.
Он в качестве имени файла пустую строку передает.
У меня такая ошибка даже не встречается...

выложил чуть-чуть подправленную версию 1.07, может в этом дело...

если есть возможность киньте мне архив сайта+дамп базы(dumper), только так смогу разобраться...

Аватар пользователя aRpi aRpi 10 июля 2012 в 22:12

"slaj" wrote:
Отключил Cart links в Ubercart, ошибки исчезли.

Подключил cart links все работает, ошибок нет. Кнопка стандартная add to cart нажимается. Не пойму как им пользоваться, и зачем он нужен?

Аватар пользователя FORTIS FORTIS 11 июля 2012 в 13:40

за модуль и идею спасибо, но вы бы код оформили по стандартам - http://content-management-systems.info/node/917 (есть же автоформат кода, в phpstorm: alt+ctrl+L), модуль drupal.org/project/coder - поставьте, выполните все его рекомендации

имена переменных: $nam, $fil, $dlt, $blo - какая-то экономия на буквах,
комментариев в коде нет - стена не читаемого кода, в шаблонах и функциях тоже проблемы с именованием Acar_VieAdd, acar_bloc.tpl.php.

даже если с английским не гладко, есть же m.translate.ru

Аватар пользователя aRpi aRpi 11 июля 2012 в 14:04

"FORTIS" wrote:
за модуль и идею спасибо, но вы бы код оформили по стандартам - http://content-management-systems.info/node/917 (есть же автоформат кода, в phpstorm: alt+ctrl+L), модуль drupal.org/project/coder - поставьте, выполните все его рекомендации

имена переменных: $nam, $fil, $dlt, $blo - какая-то экономия на буквах,
комментариев в коде нет - стена не читаемого кода, в шаблонах и функциях тоже проблемы с именованием Acar_VieAdd, acar_bloc.tpl.php.

даже если с английским не гладко, есть же m.translate.ru

Комментариев нету, так как помню все наизусть.
На самом деле в исходниках, код находиться кусками в сотнях отдельных файлов, а перед окончательной сборкой они склеивается, так что я не путаюсь. Имена файла, в котором расположен код говорят за себя.

Комментировать нет смысла, так как разобраться в модуле будет все равно не возможно, там своя, особая MVC архитектура и "шаблонизатор".

модуль ведь 90% javascript, свой фреймворк Mvca.

"FORTIS" wrote:
имена переменных: $nam, $fil, $dlt, $blo - какая-то экономия на буквах,

ну это у меня стандарт свой именования...

Аватар пользователя Glavrach Glavrach 10 ноября 2015 в 11:48

Добавил функцию рассчета общего количества товаров в корзине в Acar.js.
Пример:
<div calss="$aqt(true)"></div>

Патч в аттаче.

Аватар пользователя aRpi aRpi 3 августа 2012 в 17:36

"Glavrach" wrote:
Добавил функцию рассчета общего количества товаров в корзине в Acar.js.
Пример:

Патч в аттаче.Прикрепленный файл Размер
absolute_quantity_1.07.patch - для версии 7.x-1.07 3.55 кб
absolute_quantity_1.08.patch - для версии 7.x-1.08 4.31 кб


ок, ввиду в 1.09, как то не догадался добавить
в 1.08, ошибка (в функции abs), тока щас заметил, выложу новую...
долго разбирались?

Аватар пользователя volocuga@drupal.org volocuga@drupal.org 3 августа 2012 в 23:53

Такое впечатление, что модуль мог бы быть в 2 раза меньше

"aRpi" wrote:
модуль ведь 90% javascript, свой фреймворк Mvca.

Mvca? Почему не Jquery? Грузить ваш фреймворк поверх Jquery ради корзины - перебор явно.

"aRpi" wrote:
ну это у меня стандарт свой именования...

У вас переменная $ite вместо $item - то это скорее атрибут говнокода, а не свой стандарт именования.

Аватар пользователя Glavrach Glavrach 4 августа 2012 в 1:44

"aRpi" wrote:
в 1.08, ошибка (в функции abs), тока щас заметил, выложу новую...

Там желательно строго следить за типом данных, а то будут складываться как строки.
"aRpi" wrote:
долго разбирались?

Да... пару часов, потом еще тестировал, пока шаблон под себе переверстывал. Потом обнаружил что версия вышла новая...
"<a href="mailto:volocuga@drupal.org">volocuga@drupal.org</a>" wrote:
Mvca? Почему не Jquery? Грузить ваш фреймворк поверх Jquery ради корзины - перебор явно.

За профессиональное достижение автору зачет. А вот замечание справедливо Sad Jquery сейчас на 99% проектах уже включен, что упростило бы и сам модуль и разработку.
Для меня не принципиально, задача быстрого старта Smile
При желании и знании jquery переписать модуль можно за вечер два, что будет не менее интересным и полезным достижением.

Аватар пользователя aRpi aRpi 9 августа 2012 в 10:49

Доступна новая версия 1.09.
Теперь и для Drupal 6, в том числе.

Добавлена функция @qta, вычисления общего количества продуктов в корзине.

Аватар пользователя aRpi aRpi 9 августа 2012 в 11:10

"aRpi" wrote:
Такое впечатление, что модуль мог бы быть в 2 раза меньше

Очень повезло что он не стал в 2 раза больше, пришлось подумать. Он такой "большой" потому что супергибкий, при добавлении нового функционала...
"<a href="mailto:volocuga@drupal.org">volocuga@drupal.org</a>" wrote:
Mvca? Почему не Jquery? Грузить ваш фреймворк поверх Jquery ради корзины - перебор явно.

Jquery для работы Acar корзины не нужен.
У Jquery и Mvca разные задачи, если бы использовал Jquery, пришлось бы все равно туже самую архитектуру и шаблонизатор, только на нём реализовывать.
"<a href="mailto:volocuga@drupal.org">volocuga@drupal.org</a>" wrote:
У вас переменная $ite вместо $item - то это скорее атрибут говнокода, а не свой стандарт именования.

Вам так кажется.
"Glavrach" wrote:
Там желательно строго следить за типом данных, а то будут складываться как строки.

Везде, слежу.

Аватар пользователя FORTIS FORTIS 9 августа 2012 в 13:42

Quote:
ну это у меня стандарт свой именования...

плохой стандарт, выглядит действительно как говнокод, есть стандарты программирования Drupal, тот же:
Quote:
«Naming Conventions
Functions and variables

Functions and variables should be named using lowercase, and words should be separated with an underscore. Functions should in addition have the grouping/module name as a prefix, to avoid name collisions between modules.»

Quote:

function Acar_VieCar($tpl, $cid = null){
        $cid = $cid ? $cid : uc_cart_get_id();
        Acar_Ini($cid);
        Acar_Reso_Tpl($tpl);
        return
'<script type="text/javascript">
var tpl = Acar.Reso.Tpl["'
.$tpl.'"];
Acar.Aca["'
.'$cid'.'"].VieCarNew({
        Thm: [{$Tpl: tpl.Lis}, {$Tpl: tpl.Ite}],
        She: Mvca.Scri.Par()   
});
</script>'
;
}[quote="aRpi"][/quote]

Для размещения формы корзины, внутри формы drupal, необходимо использовать свойство '#markup'.

$form[] = array(
        '#markup' => Acar_VieCar(path_to_theme().'/acar_pane.tpl.php'),
);

есть же #attached и Drupal.settings.xxx, рендер друпала и темизация есть же.
тут уже не свой стандарт, вы предлагаете этим пользоваться и учите плохому.

Аватар пользователя FORTIS FORTIS 9 августа 2012 в 13:41

"aRpi" wrote:

Комментировать нет смысла, так как разобраться в модуле будет все равно не возможно, там своя, особая MVC архитектура и "шаблонизатор".

именно потому что своя Smile а зачем?

"aRpi" wrote:
У Jquery и Mvca разные задачи, если бы использовал Jquery, пришлось бы все равно туже самую архитектуру и шаблонизатор, только на нём реализовывать.

взяли бы Ember.js

Аватар пользователя Glavrach Glavrach 12 августа 2012 в 0:01

"aRpi" wrote:
Добавлена функция @qta, вычисления общего количества продуктов в корзине.

Спасибо.
"aRpi" wrote:
У Jquery и Mvca разные задачи, если бы использовал Jquery, пришлось бы все равно туже самую архитектуру и шаблонизатор, только на нём реализовывать.

Возможно это и не плохая идея. Под Jquery очень хорошо пишуться плагины в которых и реализуются функции отличные от ядра, и код получается значитьльно меньше чем на чистом js, по крайней мере та часть которая отвечает за манипуляции с html, +кросбраузерность и эффекты легко добавить... Но это так, из разряда "было бы хорошо".
От меня еще раз спасибо, никто из "умников" пока ничего лучше не предложил Smile Но замечания дельные.
"FORTIS" wrote:
взяли бы Ember.js

Весьма сомнительная альтернатива - тоже грузить доп.скрипт ради корзины, но в плане стандартизации кода очень актуально.

Придерживание стандартов позволяет другим легко подключаться к разработке. А так... только от безисходности.

P.S. Есть еще кое-какие подозрения по поводу безопасности, так как имя шаблона передается js, но не тестил, утверждать не буду.

Аватар пользователя aRpi aRpi 16 августа 2012 в 7:49

"Glavrach" wrote:
P.S. Есть еще кое-какие подозрения по поводу безопасности, так как имя шаблона передается js, но не тестил, утверждать не буду.

Это легко убрать, придумаю что нибудь. Пока что сложно представляю какая от этого может быть угроза.
"FORTIS" wrote:
взяли бы Ember.js

Его я не знаю да и времени изучать что то новое не было. Корзина была уже готова.
"FORTIS" wrote:
именно потому что своя Smile а зачем?

Сначала проект разрабатывался как 1 единая корзина, потом было принято решение о разделении, поэтому так получилось. Зато теперь свой фреймворк. Буду его документировать...
"FORTIS" wrote:
есть же #attached и Drupal.settings.xxx

Друпал плохо знаю, исправлю.
"FORTIS" wrote:
рендер друпала и темизация есть же.

В друпале темизация не тянула задуманного. Преследовалась цель обеспечить переносимость корзины на другие CMS и другие онлайн-шопы.

Аватар пользователя aRpi aRpi 26 сентября 2012 в 17:25

можно через шаблон, попробуйте через функцию @dis в шаблоне $$lis

<div class="@dis('Mod.Qta()>0')">
...шаблон корзины - отобразить если в корзине больше 0 продуктов всего
</div>

- описания объекта Mod пока нет, будет попозже

Аватар пользователя aRpi aRpi 26 сентября 2012 в 23:47
<div class="@dis('Mod.Qta()>0')">
........здесь то что не будет показано если корзина пуста...............
</div>

- это нужно в шаблон вставлять, во так: V1.11

<script class="$lis" type="text">
<div class="@dis('Mod.Qta()>0')">
<table width="100%">
        <thead>
                <th colspan="9"></th>
        </thead>
        <tbody>
                <tr class="$$chi"></tr>
                <tr class="odd">
                        <td colspan="9" style="text-align: center;">
                                <div class="@abs(true,true,true)"></div>
                                <input class="@tra(true,'cart/checkout')" type="button" value="Checkout"/>
                        </td>
                </tr>
        </tbody>
</table>
</div>
</script>
<script class="$ite" type="text">
<tr class="odd">
        <td><div class="@img(true)"></div></td>
        <td><a class="@tit(true)"></a></td>
        <td><div class="@atr(true,Acar.Atri.Imge,Acar.Atri.Imge.Sty.Min)"></div></td>
        <td><input class="@qty(true)" type="text" style="width: 40px;"/></td>
        <td><input class="@pri(true)" type="text" readonly style="width: 40px;"/></td>
        <td><input class="@tot(true)" type="text" readonly style="width: 40px;"/></td>
        <td><input class="@qtc(true,-1)" type="button" value="-" style="width: 40px;"/></td>
        <td><input class="@qtc(true,+1)" type="button" value="+" style="width: 40px;"/></td>
        <td><input class="@Rem(true)" type="button" value="X" style="width: 40px;"/></td>
</tr>
</script>
Аватар пользователя hetrus hetrus 19 апреля 2013 в 16:31

aRpi wrote:

<div class="@dis('Mod.Qta()>0')">
........здесь то что не будет показано если корзина пуста...............
</div>

Не получается.
Не выводится весь блок (display:none;).
Было бы хорошо реализовать этот функционал...
Планируете?
Спасибо за модуль.

Аватар пользователя gromov1 gromov1 28 января 2013 в 23:00

с помощью этого модуля можно сделать на друпале 6 и уберкарте 2, чтобы с кнопкой купить была еще кнопка скажем "собрать"???

Аватар пользователя aRpi aRpi 29 января 2013 в 13:40

модуль в D7, и D6 работает одинаково.

"gromov1" wrote:
еще кнопка скажем "собрать"???

как понять? что это значит?

а кнопку купить - вы имеете ввиду чекаут?

- не знаю, опишите что нужно

отредактировав HTML шаблон вы можете что угодно туда вставить...

Аватар пользователя gromov1 gromov1 29 января 2013 в 20:49

объясняю на примере, скажем есть интернет магазин компьютерного железа, напротив каждой позиции стоит кнопка купить, и хотелось бы чтобы у некоторых позиций появилась доп. кнопка собрать, грубо говоря набираешь позиции какие надо и собираешь себе комп. как то так)))

Аватар пользователя KonstS KonstS 31 января 2013 в 8:40

Подскажите пожалуйста. Корзина в блоке отображается не во всех браузерах. Тема стандартная Garland, движок Друпал7.
В IE и Safari корзины не видно.
Причем на демо-сайте Acar корзина отображается во всех моих браузерах.
Не отображается именно на моем сайте! Что это может быть? Повторюсь - это явно не мои css. С чем может конфликтовать Acar?
Вот пример моей страницы тут

Аватар пользователя aRpi aRpi 31 января 2013 в 19:03

"KonstS" wrote:
В IE и Safari корзины не видно.

Такой глюк возможен, это баг.
Будет устранено в следующей версии.

"gromov1" wrote:
и хотелось бы чтобы у некоторых позиций появилась доп. кнопка собрать

До конца не понял смысл.
Смысл собирать если вы уже то что нужно уже добавили в корзину.
Это сложная задача которая выходит за рамки Acar корзины.
Её можно сделать и без Aкар, просто проанализировав содержимое уберкартовской корзины в php. И выдать нужный результат.
Аот ещё:
что бы ноду в прицепи можно было добавить, в php надо вызвать
uc_acar_reso_ite(nid);
и вставить результат в тело html страницы
А в javascript вызвать функцию
uc_acar.aca.ins({nid: id_ноды, dat: дата, qty: количество})
нид и дата - берем из ресурсов Акаровских.

Аватар пользователя KonstS KonstS 1 февраля 2013 в 4:55

aRpi wrote:

Такой глюк возможен, это баг.
Будет устранено в следующей версии.

Спасибо.Очень надеюсь на это. Проблема серьезная: браузер Safari еще ладно, но у меня корзину не видят IE 6,7,8, старые версии Mozzilla, а это уже процентов 15-30 всех пользователей.

Аватар пользователя AndreyK AndreyK 10 ноября 2015 в 11:48

Странная проблема обнаружилась. Если товары разбиты на страницы то пропадает и кнопку купить и содержимое корзины начиная со второй страницы. Также пропадают кнопки купить на главной- у некоторых есть у некоторых нет!

Причем на страницах всех товаров кнопки есть! Пропадают только на созданных views-ом.

Забыл еще написать: на второй странице пропадает корзина в блоке!

Аватар пользователя aRpi aRpi 8 февраля 2013 в 11:29

что вы использовали?
помимо виевс
возможно происходит копирование объекта через javascript
каким то сторонним модулем, в результате чего не работает.

посмотрю...

Аватар пользователя AndreyK AndreyK 8 февраля 2013 в 12:35

Если поможет:

Это выводит на первой странице, когда корзина показывается и есть один товар в ней:

<div id="uc_acar-685765" style="display: none;">
<script class="$lis" type="text">
<div class="$$par">
</div>
<div>

        <div style="padding: 4px 0;">Товаров: <span class="@qta(true,false,true)" style="font-weight: bold;"></span></div>
        <div style="padding: 4px 0;">На сумму: <span class="@abs(true,false,true)" style="font-weight: bold;"></span> <span class="@ScR(true,'this.textContent=uc_acar.reso.lis.cur.sig;')"></span></div>
        <div style="padding: 4px 0;"><a href="/cart">Корзина</a> | <a href="/cart/checkout">Оформить заказ</a></div>
</div>
</script>
<script class="$ite" type="text">
<div>
       
       
        <div class="@atr(true,uc_acar.atri.imge,uc_acar.atri.imge.sty.min)"></div>
       
</div>
</script>
</div><script>uc_acar.VieNew(685765, "685765");</script>
    </div>
  </div>
</div>

А это на второй, корзина та же:

<div id="uc_acar-341140" style="display: none;">
<script class="$lis" type="text">
<div class="$$par">
</div>
<div>

        <div style="padding: 4px 0;">Товаров: <span class="@qta(true,false,true)" style="font-weight: bold;"></span></div>
        <div style="padding: 4px 0;">На сумму: <span class="@abs(true,false,true)" style="font-weight: bold;"></span> <span class="@ScR(true,'this.textContent=uc_acar.reso.lis.cur.sig;')"></span></div>
        <div style="padding: 4px 0;"><a href="/cart">Корзина</a> | <a href="/cart/checkout">Оформить заказ</a></div>
</div>
</script>
<script class="$ite" type="text">
<div>
       
       
        <div class="@atr(true,uc_acar.atri.imge,uc_acar.atri.imge.sty.min)"></div>
       
</div>
</script>
</div><script>uc_acar.VieNew(341140, "341140");</script>
    </div>
  </div>
</div>

Аватар пользователя tarazingo tarazingo 6 марта 2013 в 19:46

Да проблема похожая! Получается такая ситуация.
Я все поля ноды товара вывожу вручную через node-product.tpl.php
Кнопку Acar`a вывожу вот так
<?php print uc_acar_vie(0path_to_theme().'/uc-acar-adde.tpl.php'$node->nid); ?>
Кнопка Acar`a отображается в ноде, а во Views`е исчезает! Как только я убираю код вывода Acar`a из ноды товара, то во Views`е обратно появляется!
Во вьюсе дебагером глянул, выводиться только такой кусочек от Акара когда в ноде товара стоит вывод через код.

<div id="uc_acar-656354" style="display: none;"> </div>
   <script>
   uc_acar.VieNew(656354, "656350", 9, '{"attributes":[],"shippable":"1","module":"uc_product"}');
   </script>

Опять же, если удалить шаблон node-product.tpl.php из темы и предоставить Drupal`у вывести по стандарту поля, добавить поле Acar - Form product or cart. То все работает как надо, то есть и во Views`е и в ноде выводиться кнопка Acar`a. Вот такая беда! Sad
А так как нода продукт полностью переопределена и темизирована соответственно, то вернуться к стандартному выводу нет возможности!
Прошу помочь разобраться, как еще можно вывести кнопку Акара в ноду, чтоб во вьюсе сохранилась.

Drupal 6.22
Ubercart 2.9

Аватар пользователя aRpi aRpi 6 марта 2013 в 23:43

В первом случаи БАГ
будет устранен в следующей версии

tarazingo
в вашем случаи не понял в чем дело, но думаю примерно в том же

Дело в том что иногда код созданный функцией uc_acar_vie
не попадает в конечный html
Т.е. views делает генерацию для тех нод которые не выводит в html,
зачем он это делает непонятно, только ресурсы жрет.
от сюда и глюк, в страницу не паподает js инициализации акар корзины.

Аватар пользователя blackcat8202 blackcat8202 10 ноября 2015 в 11:49

Здравствуйте! вот с такой проблемой столкнулась: нужно было перенести сайт на другой хостинг и на новое доменное имя. После переноса перестала работать ваша корзина. вообще ни в какую. смотрела уже по ошибкам в скриптах.... переустанавливала, но ничего не помогает. уже не знаю что и делать. после переноса работает весь сайт за исключением вот этой корзины.... ни в блоке не отображается, ни в корзине. может я что-то не так делаю....
Потом еще раз переустановила и заработал вывод блока корзины. а вот сама корзина почему-то не отображается на странице cart

Вот сообщение об ошибке в консоли.

Uncaught TypeError: Cannot read property 'length' of undefined mvca.js:41
mvca.taga.htm mvca.js:41
mvca.coll mvca.js:177
(anonymous function) mvca.js:600
(anonymous function) mvca.js:520
(anonymous function) mvca.js:537
(anonymous function) mvca.js:537
(anonymous function) mvca.js:534
mvca.mvca.view.csr mvca.js:617
mvca.mvca.cont.$vieCnt mvca.js:688
VieNew mvca.js:706
uc_acar.VieNew.map.(anonymous function)uc_acar.js:26


Аватар пользователя aRpi aRpi 7 марта 2013 в 16:53

отключите кэширование и оптимизацию и очистите кэш может поможет

пока не понимаю в чем дело, посмотрю ваш сайт, подумаю,

ссылка на новый сайт?
как переносили? базу скопировали и файлы 1 в 1 да?

Аватар пользователя blackcat8202 blackcat8202 7 марта 2013 в 20:11

да. один в один копировала. вырубила сайт в режим обслуживания и перенесла. сейчас сайт лежит new.papamao.ru
Кэширование и оптимизацию я вообще не включала - они у меня изначально были вырублены. А кэш я уж много раз чистила. в первую очередь об этом подумала.
причем очень странно работает. в блоке на странице cart/checkout корзина отображается, а конкретно на странице cart не работает. на этом сервере, на который я перенесла сайт - вроде стоит не apache (по крайней мере раньше у меня apache в отчете отображалось, а здесь отображается Server Secured By yourdomainhere)

Да. ну и конечно в IE изначально не работало - но эту проблему вы вроде решаете, дак ждем.

Аватар пользователя blackcat8202 blackcat8202 7 марта 2013 в 21:05

Нашла еще одну штуку! не работает конкретно формирование таблицы. Сейчас стала делать без таблицы через списки - все стало работать....
Так что осталась одна проблема как и у всех - IE explorer.

Аватар пользователя IIISpikerIII IIISpikerIII 10 ноября 2015 в 11:49

Здравствуйте! Установил модуль uc_acar и хочу вывести блок на отдельной странице. Создал страницу shopkorzina и указал вывод блока в содержимом этой страницы. При открытии страницы отображается только заголовок блока. Проинспетировав элемент выходят следующие ошибки (приложение). Как можно избавиться от этого?

Аватар пользователя aRpi aRpi 14 марта 2013 в 18:36

"IIISpikerIII" wrote:
Здравствуйте! Установил модуль uc_acar и хочу вывести блок на отдельной странице. Создал страницу shopkorzina и указал вывод блока в содержимом этой страницы. При открытии страницы отображается только заголовок блока. Проинспетировав элемент выходят следующие ошибки (приложение). Как можно избавиться от этого?

Вы не то установили ставьте последнею версию

Аватар пользователя blackcat8202 blackcat8202 10 ноября 2015 в 11:49

А у меня не удалось нормально обновиться. Вот принт-скрин вылезшей ошибки:

Пришлось обратно пока старую версию кинуть.

Аватар пользователя aRpi aRpi 23 марта 2013 в 12:03

192 строка - неправильный набор аргументов в функции _uc_attribute_alter_form
скопируйте все заново и правильную версию под ваш уберкарт

Аватар пользователя hetrus hetrus 19 апреля 2013 в 21:44

aRpi wrote:

попробуйте
@dis('mod.qta()>0')

Да, так работает.
Но только после перезагрузки страницы...
Т.е. блок исчезает не сразу после удаления продуктов из корзины, а когда после этого перезагрузить страницу.
К сожалению, вряд ли так кому-нить подойдет...
Но это уже, по-моему, особенность аякса, нет?
Или таки можно что-то сделать? Спасибо за быстрый ответ.

Аватар пользователя aRpi aRpi 20 апреля 2013 в 6:25

проверка делается в момент создания корзины так что так должно быть, нормальная функция для таких целей ещё не создана..

Если только знаете javascript можно:

повесить проверку каждые 500 миллисекунд
и самостоятельно изменять display, в зависимости от количества товаров
используйте: @ScR
там в скрипте будет доступен объект корзины this.$vie.mod - объект корзины (this - DOM элемент, this.$vie - вид в рамках MVC)
в в объекте корзины доступен метод
qta() - возвращающий количество товаров в корзине

Либо глобально обращайтесь к корзине: uc_acar.aca
uc_acar.aca.qta()

Еще как вариант можно подправить исходники
Функция добавления и удаления в корзину:

uc_acar.mode[0].ins.run = function(arg){
        var ite = this.get(arg);
        if(ite === undefined){
                ite = mvca.mvca.mode.ins.call(this, arg);
здесь ваша проверка if(this.qta()>0){показать корзину}

uc_acar.mode[0].rem.run = function(ite){
        ite = this.get(ite);
        if(ite !== undefined){
                var stm = this.pro.get(ite);
                stm.ite = ite;
                mvca.mvca.mode.rem.call(this, ite);
здесь ваша проверка if(this.qta()==0){спрятать корзину}

Аватар пользователя gromov1 gromov1 24 июля 2013 в 2:46

это нормально, что когда добавляешь товар в корзину, он там отображается только когда обновишь страницу браузера? это как то можно убрать?

Аватар пользователя aRpi aRpi 29 июля 2013 в 16:31

"gromov1" wrote:
это нормально, что когда добавляешь товар в корзину, он там отображается только когда обновишь страницу браузера? это как то можно убрать?

Если вы говорите о родной корзине уберкарта, то да, нормально, корзина уберкарта, никак не связнана с Акар-корзиной.
Информация в ней не меняется, и устанавливается один раз при загрузке страницы.
Вам нужно использовать именно Акар корзину. А стандартную вообще можно выключить.

Аватар пользователя aRpi aRpi 29 июля 2013 в 17:11

верно, нет средств... что бы продлить домен... (((
через пару дней заработает,
там все равно последнее обновление очень давно было...

Аватар пользователя Splinter Splinter 3 августа 2013 в 18:52

К сожалению сайт до сих пор не работает ((
Пока на сайте не узнать всю инфу, скажите пожалуйста, для commerce есть уже версия? Спасибо

Аватар пользователя aRpi aRpi 4 августа 2013 в 10:39

"Splinter" wrote:
Пока на сайте не узнать всю инфу, скажите пожалуйста, для commerce есть уже версия? Спасибо

нет

Аватар пользователя hrommi hrommi 23 августа 2013 в 14:16

Установил модуль и корзина изменилась, а вот кнопка покупки по прежнему ведет на корзину. Хотелось бы просто выводить сообщение о добавлении товара в корзину. Ваш модуль это может?

Аватар пользователя aRpi aRpi 23 августа 2013 в 16:32

наверное у вас старая кнопка покупки....
Вставьте Акаровские кнопки добавления товара в корзину.

http://arpiprogrammer.ru/demo/acar/

Возможно, но вам нужно будет самому все сверстать и запрограммировать...
Читайте описание функций и разберитесь в шаблонах.

Аватар пользователя hrommi hrommi 26 августа 2013 в 7:47

aRpi, у меня каталог через views делается. Я там не нашел добавление какой-то специальной кнопки покупки. Плохо смотрел?

Аватар пользователя aRpi aRpi 26 августа 2013 в 8:52

Да....
Нужно добавит виевс поле
возможно так называется:

Product: Acar - Form add product to cart
Acar - Form add product to cart

Это акар шаблон, а в нём можно замуть какие угодно кнопки

Аватар пользователя -pax- -pax- 17 марта 2014 в 10:15

Drupal 6, uc_acar-6.x-2.11
Столкнулся с проблемой, которая описана на сайте модуля:

"aRpi" wrote:
uc_acar не поддерживает в jCarousel опцию Wrap content - Circular

Так как, копирование выполняемое методом .clone (jQuery) не копирует событий созданных через addEventListener и добавленных свойств объекта,
в результате получаются мертвые формы, кнопка добавления не срабатывает например.

Так же есть проблемы если если использовать ajax подгрузку...

Есть модуль на моем сайте, который выводит контент через ajax и кнопки корзины в этом контенте выводятся нерабочими.
Может кто-то решил это проблему?

Как можно это исправить подскажите в каком направлении копать или может кто-то за деньги сможет исправить это на одном конкретном сайте?

Автор модуля на личное сообщение к сожалению не отвечает Sad

Аватар пользователя aRpi aRpi 19 марта 2014 в 13:36

На сайте бываю редко, только сейчас увидел.
Попробуйте поставить галочку безопасный режим
Попробуйте в шаблоне оформить $$ite и $$lis в виде
<script type="text" class="$$ite"></script>
если не поможет
<div class="$$ite"></div>
если не поможет
попробуйте использовать колорбокс для ajax загрузки, в нем вроде работало

Аватар пользователя Darth_Beholder Darth_Beholder 11 августа 2014 в 5:21

Здравствуйте! Версия uc_acar-7.x-2.11-ubercart-3.1.

Каким образом можно вывести все товары в одной таблице?
Они разнесены почему-то по разным, каждая внутри <div class="$ite">.
Попытался присвоить класс "$ite" строкам таблицы, безуспешно.
Также попробовал, как в шаблоне uc-acar-pane.tpl.php сделать <script class="$ite" type="text"> перед <tr>, тоже не работает.

Возможные баги:
1. Почему-то не заводится шаблон uc-acar-pane.tpl.php. Работает только null.tpl.php. В настройках прописан uc-acar-pane.tpl.php (как и был, по умолчанию). Или нужно путь прописывать? Если да, то какой?

2. В null.tpl.php при значениях

$beg = '<tr><td class="@ScR(true,\'uc_acar_buff.get.call(this);\')">';
$end = '</td><td class="@ScR(true,\'uc_acar_buff.set.call(this);\')"></td></tr>';

содержимое ячеек отображается как текст, т.е. вместо поля ввода input пишется input текстом.
Заработало только когда убрал функции и оставил тупо $beg = '<tr><td>'.

Или я не ту версию взял и нужно было брать без уберкарта?

Аватар пользователя aRpi aRpi 12 августа 2014 в 19:55

Каким образом можно вывести все товары в одной таблице?
- <table class="$lis"></table> - это корзина
<tr class="$ite"></tr> - это продукт

Почему-то не заводится шаблон uc-acar-pane.tpl.php.
- он его не видит видимо, скопируйте шаблон в каталог текущей темы

Или нужно путь прописывать? Если да, то какой?
- нет, всегда только имя, ищет шаблон в текущей теме, если не находит то берет null.tpl.php

содержимое ячеек отображается как текст, т.е. вместо поля ввода input пишется input текстом.
- там для наглядности задумано что бы слева был живой input, а справа его html код (код этот вставляется копированием в javascript)
странно что поля input нет, а функции uc_acar_buff.get.call(this) - просто копируют

Или я не ту версию взял и нужно было брать без уберкарта?
-последняя версия акар здесь на форуме, в первом топике, её нужно брать. Если качали что то другое, там старый акар могут быть баги. На сколько я знаю с самой последней версией уберкарта могут быть не стыковки с акарам, сам давно не смотрел.

uc_acar-7.x-2.11-ubercart-3.1.zip - это версия акара для ubercart-3.1 и младше
uc_acar-7.x-2.11 - это версия для остальных уберкартов (сам не проверял работает ли с самым последним) вроде да

uc_acar-7.x-2.11 - данная версия, устарела, сейчас не обновляется.
Новая версия завязла в разработке, поэтому выйдет не скоро...

Аватар пользователя Darth_Beholder Darth_Beholder 12 августа 2014 в 20:13

Спасибо, после копирования в каталог темы все завелось.
С документацией стало значительно понятнее))

Какого рода нестыковки могут быть с последней версией уберкарта? Использую её, могу как раз потестировать.

Аватар пользователя aRpi aRpi 12 августа 2014 в 21:33

Какого рода нестыковки могут быть с последней версией уберкарта? Использую её, могу как раз потестировать.
- например в уберкарте могли изменить количество аргументов в какой либо функции, или её заменили другой
которая вызывалась из акара
в результате чего одна из функций (та которая начинается с символа @) может не работать, и выдавать ошибку

Аватар пользователя Darth_Beholder Darth_Beholder 13 августа 2014 в 2:54

Вроде ошибок не выдается в функциях с последним уберкартом.

Возможно туплю, но как товар в корзину с этим модулем добавлять через Ajax?
Раньше использовал модуль Ubercart AJAX Cart (Alternative), он это автоматом делал.
Убрал его, чтобы не дублировать функционал, теперь кнопки добавления в корзину не аяксовые.

Второй вопрос - возможно ли сделать 2 разных блока корзины, каждый со своим шаблоном? Один я хочу поместить в сайдбар, а второй использовать на странице /cart/checkout, чтобы совместить корзину и оформление заказа.

Аватар пользователя aRpi aRpi 13 августа 2014 в 8:47

там есть страница с корзиной
и ещё
есть блок с корзиной в обоих разный шаблон
нужно его только активировать
и ещё есть возможность из php в любом месте размещать корзину
читать здесь:
http://www.drupal.ru/node/80901#a5000

Аватар пользователя aRpi aRpi 13 августа 2014 в 8:48

uc-acar-pane.tpl.php - это для страниц: /cart и / shopping-cart.
uc-acar-bloc.tpl.php - это для сайдбара
uc_acar_vie(1, path_to_theme().'/uc-acar-pane.tpl.php') - это чтоб где угодно корзину вставить

Аватар пользователя aRpi aRpi 13 августа 2014 в 8:59

uc_acar_vie - использоваться для печати корзины(js) в html страницу сайта
вставляя в код страницы (все это в виде js):
0) подключение js файлов корзины
1) инициализацию корзины
2) шаблон корзины/продукта
3) создание формы корзин/продукта

пункты 0, 1, 2 делаются только один раз - первый раз
иногда (очень редко) могут быть глюки когда друпал размещает эти пункты после 3 пункта - тогда лучше отвечающие за них функции вызвать самостоятельно в шапке сайта (см. код функции uc_acar_vie)

Аватар пользователя aRpi aRpi 13 августа 2014 в 9:21

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

Аватар пользователя Darth_Beholder Darth_Beholder 15 августа 2014 в 5:42

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

Долго тупил, прежде чем понял, что для получения результата функции uc_acar_vie нужно её печатать (echo uc_acar_vie;). Теперь работает.

Не смог разобраться с функцией @ScR.

Как выводить содержимое таблицы только тогда, когда корзина не пуста?

Код <div class="@ScR('qta>0;','alert(1234);')"></div> не отрабатывает.
Если изменить проверку на "true", то вывод алерта работает.

Хотел сделать что-то типа <div class="@ScR('qta>0;')">Таблица корзины</div>, но видимо не понял логики функции.

Аватар пользователя aRpi aRpi 17 августа 2014 в 10:53

как сделать просто поле для ввода с кнопкой добавления
- к сожалению как то не подумал, такой функции нет

Не смог разобраться с функцией @ScR.
- если в конце точка с запятой тогда, смотрите ресурсы, они могут быть в качестве условия
- если нет вот эти переменные: add, car, inc, exc, atr (это вид в рамках MVC, а из него можно достучаться до модели, и от модели вызвать функцию qta, щас не помню как)
- это функция отрабатывает один раз, в начале

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

Аватар пользователя Darth_Beholder Darth_Beholder 19 августа 2014 в 6:25

С количеством решил просто через проверку jquery.

Спасибо за модуль, несмотря на баги и некоторые непонятки, он работает, в отличие от аналогов)

Нашел еще баг: если в поле ввода ввести "0", будет странное поведение - у меня на один товар выдало ошибку, другой добавился в корзину в числе 0.
Как убрать возможность введения нуля?

В блоке не получилось перейти от функции uc_acar_vie к вставке её значений, не работает почему-то, хотя то же самое для страницы работает.
Чем-то плохо, если в шаблоне блока будет просто вызываться функция uc_acar_vie?

Аватар пользователя aRpi aRpi 22 августа 2014 в 18:26

в поле ввода ввести "0", будет странное поведение - у меня на один товар выдало ошибку, другой добавился в корзину в числе 0.
- должен работать и с нулевым количество так задумывалось, ограничения нет, ошибка? раньше не встречал...

Как убрать возможность введения нуля?
- отредактируйте соответствующию функцию в js, или напишите какой нибудь другой кастыль jquery...

В блоке не получилось перейти от функции uc_acar_vie к вставке её значений, не работает почему-то, хотя то же самое для страницы работает.
Чем-то плохо, если в шаблоне блока будет просто вызываться функция uc_acar_vie?
- не понял.... в шаблоне вроде не выводится, щас не помню почему,
- результат этой функции uc_acar_vie нужно отпечатать в страницу, она не возвращает что ли результат, странно...
возможно по этой причение: (писал выше)

"aRpi" wrote:
пункты 0, 1, 2 делаются только один раз - первый раз
иногда (очень редко) могут быть глюки когда друпал размещает эти пункты после 3 пункта - тогда лучше отвечающие за них функции вызвать самостоятельно в шапке сайта (см. код функции uc_acar_vie)

Аватар пользователя Darth_Beholder Darth_Beholder 22 августа 2014 в 19:20

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

Насчет функции в блоке - она выдает результат в виде html/js кода, но когда я его вставляю в темплейт блока друпала вместо функции - ничего не работает.
Потому и спрашиваю - можно ли оставить вызов функции в шаблоне или слишком ресурсоемко? Работает вроде без проблем.

Аватар пользователя aRpi aRpi 22 августа 2014 в 20:22

Потому и спрашиваю - можно ли оставить вызов функции в шаблоне или слишком ресурсоемко? Работает вроде без проблем.
- да можно если работает очень хорошо

Попробовал еще раз добавить товар с количеством ноль - добавляется, выглядит это в корзине странно.
-

Не помните, где именно задается проверка на значения поля ввода? Просмотрел js, не увидел, сложно разобраться в чужом коде без комментариев.
- какая функция используется для добавления/изменения количества

uc_acar.mode[0].ins - шлет ajax при добавлении в корзину
uc_acar.mode[0].apl - шлет ajax при изменении количества в корзину

но проще отредактировать функцию (ту которая с символа @)
они все лежат в пространстве: uc_acar.func

например @qty:
uc_acar.func.qty

поробуйте вот так сделать

uc_acar.func.qty.HanVld = function(){
        if(!(/^[0-9]*$/).test(this.value) || this.value==0){
                this.setCon(this.$vie.inc ? this.$vie.mod.qty : "");
                return false;
        }
        return true;
}

здесь добавлено - || this.value==0

в новой версии будут комменты

Аватар пользователя aRpi aRpi 22 августа 2014 в 20:26

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

Аватар пользователя Darth_Beholder Darth_Beholder 23 августа 2014 в 3:32

Попробовал, но в этом виде из-за нестрогого сравнения нельзя временно удалить значение, например, для изменения количества с 3 до 2.

Изменил на строгое сравнение:

uc_acar.func.qty.HanVld = function(){
        if(!(/^[0-9]*$/).test(this.value) || this.value==='0'){
                this.setCon(this.$vie.inc ? this.$vie.mod.qty : "");
                return false;
        }
        return true;
}

Так лучше работает. Спасибо за помощь.
По-хорошему нужно наверное перед отправкой заказа проверять на нулевые значения количества и удалять их из заказа.

Аватар пользователя aRpi aRpi 10 ноября 2014 в 1:28

а как редактировать атрибуты в корзине так и не понятно
- вы имеете ввиду менять их в корзине
- поменять аргумент функции вывода атрибутов, что был для редактирвоания

Аватар пользователя tarazingo tarazingo 11 марта 2015 в 18:30

Есть проблема.
Если выводить товар через Views c Exposed Filters через AJAX, то при выборе фильтров все работае, но если выбрать обратно значение - Any - / - Любой - кнопка В корзину пропадает!

Аватар пользователя aRpi aRpi 13 марта 2015 в 13:31

Изначально работа акар с этими фильтрами даже и не тестировалась...
В данный момент модуль не развивается.
К сожалению подобная проблема действительно может быть