!!!ВНИМАНИЕ!!!
В данный момент модуль не развивается.
На последней версии друпала и уберкарта его работа не тестировалась.
Иногда в работе модуля могут быть ошибки, например при работе с аджакс фильтрами или с аджаксом виевса.
Тщательно тестируйте чтоб все работало, изменил в ту или иную строну количество, обновил страницу проверил что все изменения остались.
!!!ВНИМАНИЕ!!!
Модуль Acar позволяет манипулировать содержимым корзины ubercart. Это всевозможные поля и кнопки, для отображения и изменения параметров, помещенных в корзину продуктов.
Все манипуляции, над содержимым корзины осуществляются мгновенно, согласованно с сервером через AJAX. Без перезагрузки страницы.
В отличии, от стандартной корзины ubercart, мы не ограничены одной формой корзины, на её странице. С помощью Acar, можно создать сколько угодно, форм корзины, где угодно, в любом месте документа.
Acar корзину можно темизировать. Придавая ей, уникальный вид, по всем правилам html. Тем самым реализуя, любые дизайнерские задумки.
Вложение | Размер |
---|---|
uc_acar-6.x-2.11.zip | 46.38 КБ |
uc_acar-7.x-2.11.zip | 46.37 КБ |
uc_acar-7.x-2.11-ubercart-3.1.zip | 46.36 КБ |
colorbox_leaf-7.x-1.1.zip | 14.07 КБ |
acaptcha-7.x-1.0.zip | 3.98 КБ |
Комментарии
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:
И шаблон пункт, помечаемый классом $ite:
На самом деле шаблоны могут быть размещены в абсолютно любых html элементах, главное что бы у них был помечен класс $lis и $ite.
<div class="$ite">...</div>
Здесь нужно учитывать, что script работает быстрее, так как передает в себе чистый текст. Однако проблема при передачи шаблона через script в том, что невозможно создать корзину загружаемую через ajax, например при помощи colorbox. В будущем постараюсь устранить этот недостаток. Размещение шаблона в любом другом элементе конечно спасает. Но и здесь есть один недостаток. Невозможно будет написать шаблон корзины, основанной на таблице где $ite является tr элементом.
Самый простой шаблон, выводящий просто список продуктов в корзине может выглядеть, например так:
<script class="$ite" type="text"><div><a class="@tit()"></a></div></script>
На основе обоих шаблонов конструируется форма корзины. Форма добавления конструируется только на основе шаблона пункт.
Шаблон список - это шаблон своего рода ёмкости для продуктов, поэтому он необходим для формы корзины. В то время как шаблон пункт - это шаблон отдельного продукта, и применяется как для формы корзины, так и для формы добавления.
При темизации формы корзины, что бы было понятно, в какой именно элемент корзины вставлять продукты, этот самый элемент, в шаблоне список, следует пометить классом $$par. Однако если требуется вставлять продукты не внутрь элемента, а перед каким либо элементом, то такой элемент следует пометить классом $$chi.
<div class="$$chi"></div>
Для наделения, какого либо элемента способностью отображать или изменять параметры продукта или корзины, этот самый элемент необходимо оснастить соответствующим функционалом. Осуществляется это за счет передачи через атрибут class функционала, который необходимо внедрить в элемент.
Оформляется подобное внедрение внутри атрибута class, следующим образом:
В начале, символ '@', далее идентификатор функции, после него, в скобках перечисляются аргументы. Желательно избегать использования пробелов, вместо них лучше использовать юникод пробел '\u0020'.
При всем при этом атрибут class, по прежнему сохраняет своё изначальное предназначение. Вы можете смело через пробел указывать применяемые к элементу стили.
Например, следующий input элемент, размещённый в шаблоне пункта, при помощи функции @qty, позволит отображать и изменять количество продукта.
Эту функцию, как и любую другую, можно применить к любому элементу, например к div. Количество продукта будет так же отображаться, но изменить его, по причине того что это div не получится.
Для отображения и изменения параметров корзины или продукта, предоставлено множество функций. В один элемент может быть внедрено сразу несколько функций, однако будьте внимательны, комбинации некоторых функций могут перекрывать работу друг друга, хотя и не вызовут ошибок.
Функции.
Применяя функцию к элементу, в зависимости от назначения функции, элемент становиться способным влиять на состояние корзины, или отображать какое либо из них.
Функция @img.
Выводит изображение продукта.
exe - Условие использования*.
Применяется к элементу img, делая его картинкой продукта. Более того, если родительский элемент является ссылкой, эта ссылка начинает ссылаться на продукт:
Если применять функцию, к любому другому элементу, то размещает внутри этого элемента картинку продукта. А сам элемент, если это ссылка, начинает ссылаться на продукт:
Использовать функцию @img, для создания картинки продукта, совсем необязательно. Путь к картинке можно достать из ресурсов, обратившись к свойству uc_acar.reso.ite[nid].img.
Например, при помощи функции @ScR можно устанавливается значение атрибута href. Присвоив в него путь к картинке продукта, взятый из ресурсов. Идентификатор продукта тогда, берется из свойства this.$vie.mod.nid:
Функция @tit.
Отображает название продукта, а так же создает на него ссылку.
exe - Условие использования*.
Размещает внутри элемента, к которому применяется функция текс, с названием продукта. Если функция применяется к элементу input, название продукта присваивается атрибуту value.
Если элемент, является ссылкой, эта ссылка начинает ссылаться на продукт.
Функция @qty.
Отображает и изменяет количество продукта.
exe - Условие использования*.
Для формы добавления, эта функции позволяет не просто изменить количество продукта, но и добавить или удалить продукт из корзины.
Функция @qtc.
Изменяет количество продукта при щелчке, на определенную величину.
exe - Условие использования*.
qtc - Величина на которую следует менять количество продукта.
Применяется, как правило, к элементу кнопки. Для формы добавления, эта функция не просто изменяет количество, но и когда это имеет смысл, добавляет или удаляет продукт из корзины.
Особенностью данной функции, как и некоторых других предназначенных специально для кнопок, является обработка события нажатия. При котором фоновое изображение, сдвигается вниз и вправо на 1 пиксель, когда кнопка нажата.
Функция @CHE.
Функция позволяет добавить или удалять продукт, при помощи чекбокса.
exe - Условие использования*.
val – Потенциальное количество.
Данная функция, хотя и предназначена специально для чекбокса, может быть применена к любому другому элементу. Щелкая по которому, точно так же можно, удалить или добавить продукт.
При добавлении в корзину добавляется количество продукта равное так называемому потенциальному количеству. На которое кстати может влиять функция @qtx.
Благодаря этому если про помощи чекбокса удалить продукт, а потом снова добавить его, то количество добавленного продукта будет таким же как и до удаления.
Эта функция, работает согласованно с функцией @qtx, которую необходимо применять к текстовому полю. Влияющая на потенциально количество. Функция @qtx так же как и функция @qty позволяет отображать и изменять количество продукта. Но в отличии от последней не позволяет добавлять или удалять его. Вместо этого, когда продукт отсутствует в корзине, отображает и изменяет то самое, потенциальное количество продукта, которое будет добавлено в корзину если поставить галочку в чекбоксе.
Примеры:
<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.
Отображает и изменяет количество продукта, а так же потенциальное количество добавляемое в корзину при помощи чекбокса.
exe - Условие использования*.
val - Потенциальное количество.
Это функция специально предназначена для согласованной работы вместе с чекбоксом, функцией @CHE.
При отсутствии продукта в корзине, отображает и изменяет потенциальное количество продукта, которое будет добавлено в корзину при активации чекбокса.
Функция @qta.
Отображает общее количество продуктов лежащих в корзине.
exe - Условие использования*.
Функция @pri.
Отображает стоимость одного экземпляра продукта.
exe - Условие использования*.
sig - Знак валюты*.
frm - Формат числа*.
Функция @tot.
Отображает стоимость количества продукта.
exe - Условие использования*.
sig - Знак валюты*.
frm - Формат числа*.
Функция @abs.
Отображает общую стоимость всего содержимого корзины.
exe - Условие использования*.
sig - Знак валюты*.
frm - Формат числа*.
Эта функция может быть использована как в шаблоне пункт, так и в шаблоне список, так как её работа никак не связана с каким-то конкретным продуктом.
Функция @atr.
Выводит атрибуты продукта.
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 - Условие использования*.
Что бы выводился корректный SKU для различных комбинаций атрибутов, необходимо в настройках активация опции "подключение информации о SKU", иначе будет выводиться всего лишь базовый SKU продукта.
Однако если нет необходимости вывода SKU, для каждой отдельной комбинации атрибутов, опцию "подключение информации о SKU", рекомендуется отключать. Дабы не нагружать сервер лишними запросами к базе данных.
Функция @sto.
Выводит запас товара на складе.
exe - Условие использования*.
Для продуктов, у которых склад не настроен функция ничего не выводит.
Для работы данной функции, необходимо что бы в настройках была активирована опция "подключения информации о складе". Иначе функция будет вести себя так будто бы склад для данного продукта не настроен.
Если вы не собираетесь использовать данную функции, рекомендуется отключать соответствующею опцию, дабы не нагружать сервер.
Функция может работать с учетом комбинаций атрибутов. Но для этого должна быть активирована опция "подключения информации о SKU".
Функция @tra.
Осуществляет переход при щелчке, на страницу продукта или по указанному адресу.
exe - Условие использования*.
tra - Адрес для перехода.
Если адрес для перехода не указан, переход осуществляется на страницу продукта.
Прежде чем выполнить переход функция ожидает завершения всех текущих операций, добавления, удаления, и изменения, запущенных до данной функции. И только после этого осуществляется переход на другую страницу.
Если к элементу применяется несколько функций, эту функцию очень важно размещать последней. Иначе переход может осуществиться, а последующие функции просто не успеют сделать свою работу.
Функция @sty.
Накладывает на элемент указанный стиль.
exe - Условие использования*.
sty - Стиль* применяемый к элементу.
Функция @dis.
Позволяет если нужно скрывать или отображать элемент, в зависимости от условия использования.
exe - Условие использования*.
dis - Значение устанавливаемое для свойства display в случаи успеха.
Если условие использования истинно делает свойство display, равным переданному аргументу. Либо если аргумент не передан, таким которым оно было у элемента изначально.
Если условие использования ложно, делает свойство display раным none, тем самым заставляя элемент исчезнуть со страницы.
Для формы продукта вызов всех функций выполняется каждый раз при добавлении и удалении продукта, а так же при смене атрибутов. Это может быть очень полезно, так как позволит, при помощи функции @dis отображать или не отображать, какие либо данные в зависимости от условия использования.
Кстати подобную работу можно было бы осуществить и при помощи функции @sty.
Примеры:
Отобразить надпись если у продукта есть атрибуты.
Отображение надписи говорящей о том есть ли в корзине текущий продукт. Подобную конструкцию имеет смыслы использовать в форме добавления. Каждый раз при добавлении или удалении продукта надпись будет меняться.
<div class="@dis('exc')">Продукт отсутствует в корзине.</div>
Функция @ScR.
Выполняет javascript выражение.
exe - Условие использования*.
exp - Javascript выражение.
Javascript выполняется от имени того элемента, к которому применяется функция. Это значит, что этот элемент будет доступен нам через this.
Примеры:
Следующим образом можно установить значение атрибута value.
Здесь устанавливается текс для span.
Аргумент условие использования.
Аргумент условие использования, передается абсолютно во всех функциях. С его помощью, можно настроить при каких обстоятельствах следует внедрять функцию в элемент.
Это либо логическое значение. Либо строка содержащая в себе javascript выражение. Результат работы которого и определяет следует ли применять к элементу данную функцию.
Если это логическое значение то тут все понятно, оно однозначно говорит следует ли применять функцию к элементу.
Если же это javascript выражение, то оно будет исполняться в области видимости, либо текущего вида, либо ресурса. Соответствующего продукту или корзине, что зависит от шаблона $ite или $lis.
Здесь под видом понимается понимается вид в рамках архитектуры MVC. А под ресурсом объект хранящий исчерпывающею информацию о продукте или корзине.
Исполнение javascript, в области видимости вида или ресурса, определяется последним символом в этом самом javscript выражении. Если это символ ';' то javascript исполняется в области видимости ресурса, в противном случаи в оласти видимости вида.
Из вида доступны следующие переменные булевого типа:
add - Истинно если это форма добавления.
car - Истинно если это форма корзины.
inc - Подтверждает наличие продукта в корзине. Только для $ite.
exc - Подтверждает отсутствие продукта в корзине. Только для $ite.
atr - Подтверждает наличие у продукта атрибутов. Только для $ite.
Данные доступные из ресурса, описаны немного ниже, в соответствующей главе.
Примеры:
Функция применяется к элементу, условие использования логическое значение true:
Функция не применяется к элементу, условие использования логическое значение false:
Функция применяется к элементу, если у продукта есть атрибуты:
Функция применяется к элементу, если у продукта НЕТ атрибутов:
Функция применяется к элементу, если продукт присутствует в корзине. Подобное условие актуально только лишь для формы добавления, так как в форме корзины продукт не может, не присутствовать.
Что бы в форме добавления, элемент имел различную раскраску в зависимости, от наличия продукта в корзине, нужно использовать две функции @sty, каждая из которых срабатывает при различных обстоятельствах:
Функция применяется к элементу, если цена продукта больше 50. Обратите внимание, здесь аргумент условие использования заканчивается символом ';', благодаря чему выражение исполняется в области видимости объекта ресурсов:
Аргумент знак валюты.
Аргумент знак валюты используется в функциях вывода стоимости.
Если это false знак валюты не выводится, если true выводится знак валюты настроенный в ubercart.
Если же, в качестве знака валюты передается массив. То первый аргумент определяет собственно знак валюты в виде строки, а второй аргумент его расположение, в виде логического значения, слева или справа, от цены.
Примеры:
Вывод общей стоимости всех продуктов, без знака валюты.
Со знаком валюты настроенным в ubercart.
Наш вариант, где знак валюты 'Руб.' и расположен он справа от цены.
Сам по себе знак волюты можно достать из ресурсов корзины, из свойства uc_acar.reso.lis.cur.sig. А что бы его вывести, можно воспользоваться функцией @ScR.
Аргумент формат числа.
Аргумент формат числа, применяется в функциях вывода стоимости чего либо.
Если это false, выводится число как есть, без всякой обработки, если true, используется формат, установленный в настройках ubercart.
Передавая массив, мы можем определить свой собственный формат числа. Первый аргумент задает количество десятичных знаков. Второй аргумент десятичный разделитель. Третий аргумент разделитель тысяч.
Аргумент стиль.
Некоторые функции используют в качестве аргумента, так называемый стиль. При помощи которого, для элемента и его потомков, можно установить значение класса, стиля, и атрибутов. Следует понимать, что стиль применяется уже после того как элемент создан.
Способы передачи стиля: класс, стиль, атрибуты.
• Класс.
Строка содержащая название класса.
• Стиль.
Строка содержащая css стиль. Должна обязательно заканчиваться символом ';'.
• Атрибуты.
Объект, каждое из свойств которого соответствует атрибуту.
Данным способом можно установить любой атрибут элемента. Атрибут передается в виде строки.
Что бы обеспечить гибкость, имеется несколько уникальных дублирующих свойств:
$typ - Соответствует атрибуту type.
$nam - Соответствует атрибуту name.
$cla - Соответствует атрибуту class (className).
$sty - Соответствует атрибуту style (style.cssText).
Для применения стиля к дочерним элементам, предназначено свойство $chi. Представляющие собой массив стилей. Каждый из них применяется, в зависимости от его порядка, с периодичностью по кругу, к соответствующему дочернему элементу.
Благодаря тому что стили применяются с периодичностью по кругу. Дочерние элементы, можно раскрасить разными "цветами", в зависимости от порядка элемента, например "четный/нечетный".
Ресурсы.
Для корзины, а также для каждого отдельного продукта имеются ресурсы.
Ресурсы хранят в себе всю необходимую информацию о корзине или продукте.
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.
Для шаблона пункта $ite, идентификатор продукта доступен через this.$vie.mod.nid. Здесь this - это элемент к которому применена функция.
Примеры:
Вывод ссылки на страницу продолжения покупок.
Передача в корзину данных со стороны сервера.
Что бы отобразить в корзине любые другие данные, эти самые данные необходимо передать в ресурсы.
Осуществляется это при помощи функций: имятемы_uc_acar_reso_lis и имятемы_uc_acar_reso_ite, размещенных в файле template.php, в каталоге темы оформления.
Эти функции позволяют передать в ресурсы продукта или корзины, любые данные со стороны сервера. Каждая из них, должна возвращать ассоциативный массив передаваемых данных.
Функция имятемы_uc_acar_reso_lis.
Функция имятемы_uc_acar_reso_lis используется для передачи в объект ресурсов корзины, данных со стороны сервера. Вызывается она один раз.
return array(
'parametr1' => 'value1',
'parametr2' => 'value2',
'parametr3' => 'value3',
);
}
Функция имятемы_uc_acar_reso_ite.
Функция имятемы_uc_acar_reso_ite используется для передачи данных в объект ресурса продукта. Вызывается каждый раз для каждого отдельного продукта. Внутри этой функции нода продукта доступна через переменную $var['ite'].
return array(
'length' => $var['ite']->length,
'width' => $var['ite']->width,
'height' => $var['ite']->height,
);
}
Если возникнут сложности с поиском необходимого поля, содержимое ноды можно отпечатать, использовав функции print_r. А в браузере увидеть результат нажав ctrl+U. И уже там разбираться, где же находится, или как называется требуемое вам поле.
print_r($var['ite']);
return array();
}
После того как нужные нам данные переданы в объект ресурсов, они становятся доступными для вывода, при помощи функции @ScR.
<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('width!=0;','this.value=&quot;Ширина: &quot;+uc_acar.reso.ite[this.$vie.mod.nid].width')"></div>
<div class="@ScR('height!=0;','this.value=&quot;Высота: &quot;+uc_acar.reso.ite[this.$vie.mod.nid].height')"></div>
Здесь мнемоника " используется вместо кавычки ".
Отображение формы продукта или формы корзины в любом другом месте.
Форму корзины и форму добавления можно вставить где угодно. Для этого предназначены функция uc_acar_vie. Имеется ввиду внутри любой формы.
Функция uc_acar_vie
Возвращает javascript код, создающий форму корзины, на основе указанного шаблона.
$frm – Тип формы, 0 - продукта или 1 - корзины.
$tpl - Полный путь к файлу шаблона.
$nid – Идентификатор ноды, для формы продукта.
Эта функция при первом запуске выполняет все необходимые инициализации и подключение всех требуемых ресурсов. И возвращает javascript который должен быть размещён в теле html документа. Форма корзины будет создана в том же самом месте, где и этот самый javascript, при его исполнении.
Для размещения формы продукта или корзины, внутри формы drupal, можно использовать свойство '#markup'.
Создание формы корзины:
'#markup' => uc_acar_vie(1, path_to_theme().'/uc-acar-pane.tpl.php'),
);
Создание формы продукта, nid которого равен 155:
'#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.$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;//что бы данная функция была доступна в шаблоне корзины для продукта
Зашел на 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).
Выложил новую версию 1.0001, должна работать.Смотрим.
У... Интересненько...
Набрал хлеб, молоко, чипсы. Потом в блоке уменьшил кол-во до 0, и перешел в оформление заказа. Может запретить уменьшение кол-ва до 0, у вас же для этого есть кнопка "Х".
Приму во внимание. В следующих версиях такие тонкости можно будет настроить.
Вообще то это сделано, чтоб не удаляя продукт можно было посмотреть, какова будет итоговая цена, без продукта.
для коммерца бы, а то тамошний custom cart глючно работает(
Будет и такая версия... В будущем...
не совсем понятно зачем в корзине меняется количество при вводе вручную количества у товара.
ввел я 10 сыров нажал добавить - в корзине стало 10. решил еще 15 добавить - ввожу в товаре 15 и собираюсь нажать добавить в корзину, но еще до нажатия количество в корзине стало равным 15, а я хотел получить 10 + эти 15
Наоборот, это для удобства:
Мы сразу видим сколько продукта в корзине, со страницы продукта или каталога, и прям там можем изменить это количество и даже удалить продукт из корзины, не переходя в неё. Так задумано.
И они уже в корзине, (нажимать не нужно) уже добавлены. Такой способ добавления.
Такой возможности нет.
но есть же кнопка добавить в корзину и ее нужно нажимать при первом добавлении, почему при последющих не нужно - не логично, кнопка есть а нажимать не нужно. тем более что нажав на нее мы получим в корзину число которое введено +1. разве интуитивно?)
и нет, мы сразу не видим, страница с товарами может быть длинная, а блок с корзиной где-то справа вверху за пределами области видимости - меняя число возле товара я не увижу, что оно изменяется в корзине.
модуль нравится, спасибо. но подправлю под себя, замечания, как по мне - значимые.
Для Drupal 6 хотелось видеть корзину. Не хватает кнопок + и - в том что есть на 6 сейчас.
Для 6 друпал делать Acar корзину не планируется
это же динозавр...
пока что в планах только, версия для комерц.
Может и динозавр, но люди пользуются ещё этой версией, да и обновляется же ядро, значит не заброшенный проект.
Может кто в блоке Ajax Driven Cart подскажет (можно и за некую сумму), как сделать кнопку прибавления и уменьшения закинутого в корзину товара (кнопки + и -)?
Включите модуль uc_cart_links, в шаблоне блока uc_ajax_cart, где нужно, добавьте ссылки вида (с ходу не помню) /cart/add/{$nid}?q{$product_amount} - смотрите в хелпе к модулю cart_links.
+ не забудьте "аяксифицировать" эти ссылки, в ajax_cart в настройках должна быть опция (нужно указать класс)
Спасибо, с добавление 1 позиции понятно, но вот в хелпе cart_links по удалению 1 позиции ничего не вычитал...
Да, действительно.
Тогда остается сделать небольшой хак 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 ошибку за ошибкой выдает.
Штоп
- это разве не о uc_ajax_cart? ) я в его контексте отвечал.
Да нет, всё правильно только никак выше описанное воедино сложить не получается.
Просто ещё решил попробовать на D7 (а то мне выше говорили, что я на динозавре работаю), но он меня своими ошибками не вдохновила что-то пока)
Надо было сразу сказать. Я и не знал что там ошибка...
Перезалил.
Да и сам D7 какбы ещё радует ошибками. Поэтому всё же хотелось бы Acar на D6
Drupal 7, или всё таки уберкарт с его модулями?
В уберкарте помню были глюки, если не то закачать.
Я устанавливаю minimal версию drupal. И скачиваю уберкарт и зависимые модули, в виде dev версии, кроме views, у него dev версия глючная, так что ubercart вполне работает...
Напишу версию под 6ку попозже.
Модуль отличный. Всё работает, но с самого начала, как только поставил появились такие ошибки
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).
Это предыдущая, глючная версия.
Закачайте новую версию. Acar-7.x-1.0005.zip
Я ещё непонятный баг обнаружил, посмотрите у вас на форуме, я описал или сразу в скайп напишите antonvanyukov
Решил потестить модуль, только установил и сразу получил.
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), только так смогу разобраться...
Такой возможности нет.
Отключил Cart links в Ubercart, ошибки исчезли.
Как связано не пойму.
Подключил cart links все работает, ошибок нет. Кнопка стандартная add to cart нажимается. Не пойму как им пользоваться, и зачем он нужен?
Сам не понимаю, бред какой то.
за модуль и идею спасибо, но вы бы код оформили по стандартам - 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.
ну это у меня стандарт свой именования...
Добавил функцию рассчета общего количества товаров в корзине в Acar.js.
Пример:
<div calss="$aqt(true)"></div>
Патч в аттаче.
ок, ввиду в 1.09, как то не догадался добавить
в 1.08, ошибка (в функции abs), тока щас заметил, выложу новую...
долго разбирались?
Такое впечатление, что модуль мог бы быть в 2 раза меньше
Mvca? Почему не Jquery? Грузить ваш фреймворк поверх Jquery ради корзины - перебор явно.
У вас переменная $ite вместо $item - то это скорее атрибут говнокода, а не свой стандарт именования.
Там желательно строго следить за типом данных, а то будут складываться как строки.
Да... пару часов, потом еще тестировал, пока шаблон под себе переверстывал. Потом обнаружил что версия вышла новая...
За профессиональное достижение автору зачет. А вот замечание справедливо Jquery сейчас на 99% проектах уже включен, что упростило бы и сам модуль и разработку.
Для меня не принципиально, задача быстрого старта
При желании и знании jquery переписать модуль можно за вечер два, что будет не менее интересным и полезным достижением.
Доступна новая версия 1.09.
Теперь и для Drupal 6, в том числе.
Добавлена функция @qta, вычисления общего количества продуктов в корзине.
Очень повезло что он не стал в 2 раза больше, пришлось подумать. Он такой "большой" потому что супергибкий, при добавлении нового функционала...
Jquery для работы Acar корзины не нужен.
У Jquery и Mvca разные задачи, если бы использовал Jquery, пришлось бы все равно туже самую архитектуру и шаблонизатор, только на нём реализовывать.
Вам так кажется.
Везде, слежу.
плохой стандарт, выглядит действительно как говнокод, есть стандарты программирования Drupal, тот же:
есть же #attached и Drupal.settings.xxx, рендер друпала и темизация есть же.
тут уже не свой стандарт, вы предлагаете этим пользоваться и учите плохому.
именно потому что своя а зачем?
взяли бы Ember.js
Спасибо.
Возможно это и не плохая идея. Под Jquery очень хорошо пишуться плагины в которых и реализуются функции отличные от ядра, и код получается значитьльно меньше чем на чистом js, по крайней мере та часть которая отвечает за манипуляции с html, +кросбраузерность и эффекты легко добавить... Но это так, из разряда "было бы хорошо".
От меня еще раз спасибо, никто из "умников" пока ничего лучше не предложил Но замечания дельные.
Весьма сомнительная альтернатива - тоже грузить доп.скрипт ради корзины, но в плане стандартизации кода очень актуально.
Придерживание стандартов позволяет другим легко подключаться к разработке. А так... только от безисходности.
P.S. Есть еще кое-какие подозрения по поводу безопасности, так как имя шаблона передается js, но не тестил, утверждать не буду.
Это легко убрать, придумаю что нибудь. Пока что сложно представляю какая от этого может быть угроза.
Его я не знаю да и времени изучать что то новое не было. Корзина была уже готова.
Сначала проект разрабатывался как 1 единая корзина, потом было принято решение о разделении, поэтому так получилось. Зато теперь свой фреймворк. Буду его документировать...
Друпал плохо знаю, исправлю.
В друпале темизация не тянула задуманного. Преследовалась цель обеспечить переносимость корзины на другие CMS и другие онлайн-шопы.
в любом случае за труды спасибо ) так держать
Было бы замечательно добавить опцию скрытия корзины если она пуста.
Как в "UC Ajax Cart".
можно через шаблон, попробуйте через функцию @dis в шаблоне $$lis
...шаблон корзины - отобразить если в корзине больше 0 продуктов всего
</div>
- описания объекта Mod пока нет, будет попозже
А подробнее можете расписать?
........здесь то что не будет показано если корзина пуста...............
</div>
- это нужно в шаблон вставлять, во так: V1.11
<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>
Не получается.
Не выводится весь блок (display:none;).
Было бы хорошо реализовать этот функционал...
Планируете?
Спасибо за модуль.
с помощью этого модуля можно сделать на друпале 6 и уберкарте 2, чтобы с кнопкой купить была еще кнопка скажем "собрать"???
модуль в D7, и D6 работает одинаково.
как понять? что это значит?
а кнопку купить - вы имеете ввиду чекаут?
- не знаю, опишите что нужно
отредактировав HTML шаблон вы можете что угодно туда вставить...
объясняю на примере, скажем есть интернет магазин компьютерного железа, напротив каждой позиции стоит кнопка купить, и хотелось бы чтобы у некоторых позиций появилась доп. кнопка собрать, грубо говоря набираешь позиции какие надо и собираешь себе комп. как то так)))
Подскажите пожалуйста. Корзина в блоке отображается не во всех браузерах. Тема стандартная Garland, движок Друпал7.
В IE и Safari корзины не видно.
Причем на демо-сайте Acar корзина отображается во всех моих браузерах.
Не отображается именно на моем сайте! Что это может быть? Повторюсь - это явно не мои css. С чем может конфликтовать Acar?
Вот пример моей страницы тут
Такой глюк возможен, это баг.
Будет устранено в следующей версии.
До конца не понял смысл.
Смысл собирать если вы уже то что нужно уже добавили в корзину.
Это сложная задача которая выходит за рамки Acar корзины.
Её можно сделать и без Aкар, просто проанализировав содержимое уберкартовской корзины в php. И выдать нужный результат.
Аот ещё:
что бы ноду в прицепи можно было добавить, в php надо вызвать
uc_acar_reso_ite(nid);
и вставить результат в тело html страницы
А в javascript вызвать функцию
uc_acar.aca.ins({nid: id_ноды, dat: дата, qty: количество})
нид и дата - берем из ресурсов Акаровских.
Спасибо.Очень надеюсь на это. Проблема серьезная: браузер Safari еще ладно, но у меня корзину не видят IE 6,7,8, старые версии Mozzilla, а это уже процентов 15-30 всех пользователей.
Странная проблема обнаружилась. Если товары разбиты на страницы то пропадает и кнопку купить и содержимое корзины начиная со второй страницы. Также пропадают кнопки купить на главной- у некоторых есть у некоторых нет!
Причем на страницах всех товаров кнопки есть! Пропадают только на созданных views-ом.
Забыл еще написать: на второй странице пропадает корзина в блоке!
что вы использовали?
помимо виевс
возможно происходит копирование объекта через javascript
каким то сторонним модулем, в результате чего не работает.
посмотрю...
Да ничего особенного))) Better Exposed Filters, Views Selective Exposed Filters...
Если поможет:
Это выводит на первой странице, когда корзина показывается и есть один товар в ней:
<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>
А это на второй, корзина та же:
<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>
Да проблема похожая! Получается такая ситуация.
Я все поля ноды товара вывожу вручную через node-product.tpl.php
Кнопку Acar`a вывожу вот так
<?php print uc_acar_vie(0, path_to_theme().'/uc-acar-adde.tpl.php', $node->nid); ?>
Кнопка Acar`a отображается в ноде, а во Views`е исчезает! Как только я убираю код вывода Acar`a из ноды товара, то во Views`е обратно появляется!
Во вьюсе дебагером глянул, выводиться только такой кусочек от Акара когда в ноде товара стоит вывод через код.
<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. Вот такая беда!
А так как нода продукт полностью переопределена и темизирована соответственно, то вернуться к стандартному выводу нет возможности!
Прошу помочь разобраться, как еще можно вывести кнопку Акара в ноду, чтоб во вьюсе сохранилась.
Drupal 6.22
Ubercart 2.9
В первом случаи БАГ
будет устранен в следующей версии
tarazingo
в вашем случаи не понял в чем дело, но думаю примерно в том же
Дело в том что иногда код созданный функцией uc_acar_vie
не попадает в конечный html
Т.е. views делает генерацию для тех нод которые не выводит в html,
зачем он это делает непонятно, только ресурсы жрет.
от сюда и глюк, в страницу не паподает js инициализации акар корзины.
Здравствуйте! вот с такой проблемой столкнулась: нужно было перенести сайт на другой хостинг и на новое доменное имя. После переноса перестала работать ваша корзина. вообще ни в какую. смотрела уже по ошибкам в скриптах.... переустанавливала, но ничего не помогает. уже не знаю что и делать. после переноса работает весь сайт за исключением вот этой корзины.... ни в блоке не отображается, ни в корзине. может я что-то не так делаю....
Потом еще раз переустановила и заработал вывод блока корзины. а вот сама корзина почему-то не отображается на странице 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
отключите кэширование и оптимизацию и очистите кэш может поможет
пока не понимаю в чем дело, посмотрю ваш сайт, подумаю,
ссылка на новый сайт?
как переносили? базу скопировали и файлы 1 в 1 да?
да. один в один копировала. вырубила сайт в режим обслуживания и перенесла. сейчас сайт лежит new.papamao.ru
Кэширование и оптимизацию я вообще не включала - они у меня изначально были вырублены. А кэш я уж много раз чистила. в первую очередь об этом подумала.
причем очень странно работает. в блоке на странице cart/checkout корзина отображается, а конкретно на странице cart не работает. на этом сервере, на который я перенесла сайт - вроде стоит не apache (по крайней мере раньше у меня apache в отчете отображалось, а здесь отображается Server Secured By yourdomainhere)
Да. ну и конечно в IE изначально не работало - но эту проблему вы вроде решаете, дак ждем.
Нашла еще одну штуку! не работает конкретно формирование таблицы. Сейчас стала делать без таблицы через списки - все стало работать....
Так что осталась одна проблема как и у всех - IE explorer.
Залил новую версию, исправлено несколько багов.
Благодарю! Баг который отписал выше исправлен, думаю и AndreyK так же поможет.
Здравствуйте! Установил модуль uc_acar и хочу вывести блок на отдельной странице. Создал страницу shopkorzina и указал вывод блока в содержимом этой страницы. При открытии страницы отображается только заголовок блока. Проинспетировав элемент выходят следующие ошибки (приложение). Как можно избавиться от этого?
Вы не то установили ставьте последнею версию
А у меня не удалось нормально обновиться. Вот принт-скрин вылезшей ошибки:
Пришлось обратно пока старую версию кинуть.
192 строка - неправильный набор аргументов в функции _uc_attribute_alter_form
скопируйте все заново и правильную версию под ваш уберкарт
это для старой версии
попробуйте
@dis('mod.qta()>0')
Да, так работает.
Но только после перезагрузки страницы...
Т.е. блок исчезает не сразу после удаления продуктов из корзины, а когда после этого перезагрузить страницу.
К сожалению, вряд ли так кому-нить подойдет...
Но это уже, по-моему, особенность аякса, нет?
Или таки можно что-то сделать? Спасибо за быстрый ответ.
проверка делается в момент создания корзины так что так должно быть, нормальная функция для таких целей ещё не создана..
Если только знаете javascript можно:
повесить проверку каждые 500 миллисекунд
и самостоятельно изменять display, в зависимости от количества товаров
используйте: @ScR
там в скрипте будет доступен объект корзины this.$vie.mod - объект корзины (this - DOM элемент, this.$vie - вид в рамках MVC)
в в объекте корзины доступен метод
qta() - возвращающий количество товаров в корзине
Либо глобально обращайтесь к корзине: uc_acar.aca
uc_acar.aca.qta()
Еще как вариант можно подправить исходники
Функция добавления и удаления в корзину:
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){спрятать корзину}
это нормально, что когда добавляешь товар в корзину, он там отображается только когда обновишь страницу браузера? это как то можно убрать?
Если вы говорите о родной корзине уберкарта, то да, нормально, корзина уберкарта, никак не связнана с Акар-корзиной.
Информация в ней не меняется, и устанавливается один раз при загрузке страницы.
Вам нужно использовать именно Акар корзину. А стандартную вообще можно выключить.
Не могу попасть на страницу проекта, пишут что срок регистрации домена истёк.
верно, нет средств... что бы продлить домен... (((
через пару дней заработает,
там все равно последнее обновление очень давно было...
К сожалению сайт до сих пор не работает ((
Пока на сайте не узнать всю инфу, скажите пожалуйста, для commerce есть уже версия? Спасибо
нет
Где можно скачать обновленную версию этой корзины?
Прикрепил, пока только от сюда...
Установил модуль и корзина изменилась, а вот кнопка покупки по прежнему ведет на корзину. Хотелось бы просто выводить сообщение о добавлении товара в корзину. Ваш модуль это может?
наверное у вас старая кнопка покупки....
Вставьте Акаровские кнопки добавления товара в корзину.
http://arpiprogrammer.ru/demo/acar/
Возможно, но вам нужно будет самому все сверстать и запрограммировать...
Читайте описание функций и разберитесь в шаблонах.
aRpi, у меня каталог через views делается. Я там не нашел добавление какой-то специальной кнопки покупки. Плохо смотрел?
Да....
Нужно добавит виевс поле
возможно так называется:
Product: Acar - Form add product to cart
Acar - Form add product to cart
Это акар шаблон, а в нём можно замуть какие угодно кнопки
aRpi, спасибо большое! Теперь буду разбираться с темизацией.
Спасибо большое!!!
Это шикарный модуль!!!!!
Моудль работает с теперешней версией Уберкарта (7.x-3.5) ?
s poslednei versiei ubercarta ne rabotaet...
obnovleniy budut pozge
Drupal 6, uc_acar-6.x-2.11
Столкнулся с проблемой, которая описана на сайте модуля:
Есть модуль на моем сайте, который выводит контент через ajax и кнопки корзины в этом контенте выводятся нерабочими.
Может кто-то решил это проблему?
Как можно это исправить подскажите в каком направлении копать или может кто-то за деньги сможет исправить это на одном конкретном сайте?
Автор модуля на личное сообщение к сожалению не отвечает
На сайте бываю редко, только сейчас увидел.
Попробуйте поставить галочку безопасный режим
Попробуйте в шаблоне оформить $$ite и $$lis в виде
<script type="text" class="$$ite"></script>
если не поможет
<div class="$$ite"></div>
если не поможет
попробуйте использовать колорбокс для ajax загрузки, в нем вроде работало
Спасибо aRpi за помощь с моим сайтом, проблема решена
Здравствуйте! Версия 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 при значениях
$end = '</td><td class="@ScR(true,\'uc_acar_buff.set.call(this);\')"></td></tr>';
содержимое ячеек отображается как текст, т.е. вместо поля ввода input пишется input текстом.
Заработало только когда убрал функции и оставил тупо
$beg = '<tr><td>'
.Или я не ту версию взял и нужно было брать без уберкарта?
Каким образом можно вывести все товары в одной таблице?
-
<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 - данная версия, устарела, сейчас не обновляется.
Новая версия завязла в разработке, поэтому выйдет не скоро...
добавил документацию во 2 пост
Спасибо, после копирования в каталог темы все завелось.
С документацией стало значительно понятнее))
Какого рода нестыковки могут быть с последней версией уберкарта? Использую её, могу как раз потестировать.
Какого рода нестыковки могут быть с последней версией уберкарта? Использую её, могу как раз потестировать.
- например в уберкарте могли изменить количество аргументов в какой либо функции, или её заменили другой
которая вызывалась из акара
в результате чего одна из функций (та которая начинается с символа @) может не работать, и выдавать ошибку
Вроде ошибок не выдается в функциях с последним уберкартом.
Возможно туплю, но как товар в корзину с этим модулем добавлять через Ajax?
Раньше использовал модуль Ubercart AJAX Cart (Alternative), он это автоматом делал.
Убрал его, чтобы не дублировать функционал, теперь кнопки добавления в корзину не аяксовые.
Второй вопрос - возможно ли сделать 2 разных блока корзины, каждый со своим шаблоном? Один я хочу поместить в сайдбар, а второй использовать на странице /cart/checkout, чтобы совместить корзину и оформление заказа.
там есть страница с корзиной
и ещё
есть блок с корзиной в обоих разный шаблон
нужно его только активировать
и ещё есть возможность из php в любом месте размещать корзину
читать здесь:
http://www.drupal.ru/node/80901#a5000
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') - это чтоб где угодно корзину вставить
uc_acar_vie - использоваться для печати корзины(js) в html страницу сайта
вставляя в код страницы (все это в виде js):
0) подключение js файлов корзины
1) инициализацию корзины
2) шаблон корзины/продукта
3) создание формы корзин/продукта
пункты 0, 1, 2 делаются только один раз - первый раз
иногда (очень редко) могут быть глюки когда друпал размещает эти пункты после 3 пункта - тогда лучше отвечающие за них функции вызвать самостоятельно в шапке сайта (см. код функции uc_acar_vie)
Возможно туплю, но как товар в корзину с этим модулем добавлять через Ajax?
- в продукте добавить field поле соответствующие
в нем указываем шаблон
Благодарю, товар в корзину добавляется, хотя не нашел варианта, как сделать просто поле для ввода с кнопкой добавления, как по умолчанию в уберкарте.
Само поле, без кнопки, работает, ползунки всякие и кнопки инкрементов тоже, но пользователям, имхо, привычнее поле количества с кнопкой.
Долго тупил, прежде чем понял, что для получения результата функции uc_acar_vie нужно её печатать (echo uc_acar_vie;). Теперь работает.
Не смог разобраться с функцией @ScR.
Как выводить содержимое таблицы только тогда, когда корзина не пуста?
Код
<div class="@ScR('qta>0;','alert(1234);')"></div>
не отрабатывает.Если изменить проверку на "true", то вывод алерта работает.
Хотел сделать что-то типа
<div class="@ScR('qta>0;')">Таблица корзины</div>
, но видимо не понял логики функции.как сделать просто поле для ввода с кнопкой добавления
- к сожалению как то не подумал, такой функции нет
Не смог разобраться с функцией @ScR.
- если в конце точка с запятой тогда, смотрите ресурсы, они могут быть в качестве условия
- если нет вот эти переменные: add, car, inc, exc, atr (это вид в рамках MVC, а из него можно достучаться до модели, и от модели вызвать функцию qta, щас не помню как)
- это функция отрабатывает один раз, в начале
если необходим какой либо дополнительный функционал, для текущей версии, можно заказать его разработку.
следующая, версия 3.00 будет избавлена от всех этих неудобств.
там все гораздо удобнее, и гибче, но она в разработке, выйдет не скоро
С количеством решил просто через проверку jquery.
Спасибо за модуль, несмотря на баги и некоторые непонятки, он работает, в отличие от аналогов)
Нашел еще баг: если в поле ввода ввести "0", будет странное поведение - у меня на один товар выдало ошибку, другой добавился в корзину в числе 0.
Как убрать возможность введения нуля?
В блоке не получилось перейти от функции uc_acar_vie к вставке её значений, не работает почему-то, хотя то же самое для страницы работает.
Чем-то плохо, если в шаблоне блока будет просто вызываться функция uc_acar_vie?
в поле ввода ввести "0", будет странное поведение - у меня на один товар выдало ошибку, другой добавился в корзину в числе 0.
- должен работать и с нулевым количество так задумывалось, ограничения нет, ошибка? раньше не встречал...
Как убрать возможность введения нуля?
- отредактируйте соответствующию функцию в js, или напишите какой нибудь другой кастыль jquery...
В блоке не получилось перейти от функции uc_acar_vie к вставке её значений, не работает почему-то, хотя то же самое для страницы работает.
Чем-то плохо, если в шаблоне блока будет просто вызываться функция uc_acar_vie?
- не понял.... в шаблоне вроде не выводится, щас не помню почему,
- результат этой функции uc_acar_vie нужно отпечатать в страницу, она не возвращает что ли результат, странно...
возможно по этой причение: (писал выше)
- отредактируйте соответствующую функцию в js
Попробовал еще раз добавить товар с количеством ноль - добавляется, выглядит это в корзине странно.
Не помните, где именно задается проверка на значения поля ввода? Просмотрел js, не увидел, сложно разобраться в чужом коде без комментариев.
Насчет функции в блоке - она выдает результат в виде html/js кода, но когда я его вставляю в темплейт блока друпала вместо функции - ничего не работает.
Потому и спрашиваю - можно ли оставить вызов функции в шаблоне или слишком ресурсоемко? Работает вроде без проблем.
Потому и спрашиваю - можно ли оставить вызов функции в шаблоне или слишком ресурсоемко? Работает вроде без проблем.
- да можно если работает очень хорошо
Попробовал еще раз добавить товар с количеством ноль - добавляется, выглядит это в корзине странно.
-
Не помните, где именно задается проверка на значения поля ввода? Просмотрел js, не увидел, сложно разобраться в чужом коде без комментариев.
- какая функция используется для добавления/изменения количества
uc_acar.mode[0].ins - шлет ajax при добавлении в корзину
uc_acar.mode[0].apl - шлет ajax при изменении количества в корзину
но проще отредактировать функцию (ту которая с символа @)
они все лежат в пространстве: uc_acar.func
например @qty:
uc_acar.func.qty
поробуйте вот так сделать
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
в новой версии будут комменты
Не помните, где именно задается проверка на значения поля ввода?
- придется те функции которые добавляют править, те кторые в uc_acar.func
Попробовал, но в этом виде из-за нестрогого сравнения нельзя временно удалить значение, например, для изменения количества с 3 до 2.
Изменил на строгое сравнение:
if(!(/^[0-9]*$/).test(this.value) || this.value==='0'){
this.setCon(this.$vie.inc ? this.$vie.mod.qty : "");
return false;
}
return true;
}
Так лучше работает. Спасибо за помощь.
По-хорошему нужно наверное перед отправкой заказа проверять на нулевые значения количества и удалять их из заказа.
а как редактировать атрибуты в корзине так и не понятно
а как редактировать атрибуты в корзине так и не понятно
- вы имеете ввиду менять их в корзине
- поменять аргумент функции вывода атрибутов, что был для редактирвоания
- тот который в шаблоне прописан
Есть проблема.
Если выводить товар через Views c Exposed Filters через AJAX, то при выборе фильтров все работае, но если выбрать обратно значение - Any - / - Любой - кнопка В корзину пропадает!
Изначально работа акар с этими фильтрами даже и не тестировалась...
В данный момент модуль не развивается.
К сожалению подобная проблема действительно может быть
*