UMIhelp

Разработка сайта на UMI.CMS => Настройка системы и модулей => Тема начата: rellai от 20 Мая 2014, 07:30:59

Название: Заказа в 1 клик
Отправлено: rellai от 20 Мая 2014, 07:30:59
Пытаюсь сделать заказ в 1 клик
Переношу с демодизи
На текущий шаблон.
Скопировал функции класса для поддержки заказа в 1клик
getOneClickOrder,validOneClickInfo,saveOneClickInfo

Попробовал запустить перейдя по адресу.
пустой экран
спотыкалось на этой строчке       
$objectId = $objects->addObject($order->getName(), $emarketOneClick->getId());
я добавил в таблицу
cms3_object_types новый тип с guid: emarket-purchase-oneclick
белый экран пропал но стала вылезать ошибка
error-required_one_click_list
и я не нашел что и куда добавлять теперь  :(
собственно в этом и вопрос
Название: Re:Заказа в 1 клик
Отправлено: admin от 20 Мая 2014, 10:18:56
Пытаюсь сделать заказ в 1 клик
Переношу с демодизи
На текущий шаблон.
Скопировал функции класса для поддержки заказа в 1клик
getOneClickOrder,validOneClickInfo,saveOneClickInfo

По вопросу у вас как бы проблема с шаблоном, но по сути вопроса у вас проблема в  переносе функционала "заказ в один клик". по этому уточню, вы пытаетесь перенести данный функционал с одного сайта на другой (то есть не в рамках одной лицензии) и у вас не получается скопировать все и вся необходимое для этого?
Название: Re:Заказа в 1 клик
Отправлено: rellai от 20 Мая 2014, 11:08:34
Да я переношу с одного сайта на другой.
оба с тестовой лицензицей, тот с которого я переношу со стандартным шаблоном. тот на который переношу с нестандартным шаблоном. практически с нуля писаный.
Да я скопировал на данный момент методы класса пока только. ну и тип добавил в базу новый
Название: Re:Заказа в 1 клик
Отправлено: admin от 20 Мая 2014, 11:40:20
просто, для переноса функции "заказ в один клик", скорее всегго нужно переносить xsl, js, какие-то доп настройки в типах данных.

При этом непонятно что у вас уже есть, а чего нет. Что есть или чего нет в " тот с которого я переношу со стандартным шаблоном. тот на который переношу с нестандартным шаблоном"

Боюсь, чисто по вопросу вашему, я затруднюсь вам конкретно подсказать.

А если не конкретно, то:

- замените в своих макросах self:: на $this->
- проверьте что все макросы подключены в модуле emarket
я добавил в таблицу
cms3_object_types новый тип с guid: emarket-purchase-oneclick
белый экран пропал но стала вылезать ошибка
error-required_one_click_list
и я не нашел что и куда добавлять теперь  :(
собственно в этом и вопрос

вам надо было создать тип данных "Данные из формы "Заказ в 1 клик". а затем уже писать ему GUID в базе данных (см. картинку ниже)

P.S. это, возможно, еще не все, что вам придется поправить
Название: Re:Заказа в 1 клик
Отправлено: rellai от 20 Мая 2014, 12:12:51
Сделал как вы сказали
ошибка та же:
error-required_one_click_list

Название: Re:Заказа в 1 клик
Отправлено: admin от 20 Мая 2014, 13:11:27
значит проверка в функции emarket getOneClickOrder() не проходит
$errors = $dataModule->checkRequiredFields($form->getId());
if ($errors !== true) {
throw new publicException(getLabel('error-required_one_click_list') . $dataModule->assembleErrorFields($errors));
}

Судя по коду, из-за того, что не заполнены необходимые поля (checkRequiredFields) возможно он не может найти $form->getId(). Проверяйте по частям и смотрите что не работает.

P.S. попробуйте отключить обязательные поля, в созданном типе данных  Данные из формы "Заказ в 1 клик". Станет понятно, он проверку не проходит или что-то другое ему мешает.
Название: Re:Заказа в 1 клик
Отправлено: rellai от 20 Мая 2014, 13:29:44
не совсем.
На тестовом
если перейти по ссылке /ru/emarket/getOneClickOrder/element/57.xml
то он в xml файле говорит:
<udata xmlns:xlink="http://www.w3.org/TR/xlink" module="emarket" method="getOneClickOrder" generation-time="0.022824">
<error>
Заказ не оформлен, потому что не были заполнены обязательные поля: Фамилия, Имя, E-mail, Телефон
</error>
</udata>

Если перейти по подобной ссылке том сайте где пытаюсь сделать то вот вывод:
<udata xmlns:xlink="http://www.w3.org/TR/xlink" module="emarket" method="getOneClickOrder" generation-time="0.009424">
<error>error-required_one_click_list</error>
</udata>

А когда тип не был определен то он спотыкался на этой строчке:
$form = $types->getTypeByGUID('emarket-purchase-oneclick');
Название: Re:Заказа в 1 клик
Отправлено: rellai от 20 Мая 2014, 13:44:40
а как проверить есть ли данные для формы?
я делаю так .....ru/uobject/data/getCreateForm/126(идешник этого типа)/

он мне говорит
<error code="not-found">Не найдено</error>

Или я туплю?
Название: Re:Заказа в 1 клик
Отправлено: admin от 20 Мая 2014, 15:47:32
много вопросов по вашим комментариям, но для начала, о самом явном... при вызове макроса, необходимо использовать протокол udata, а не uobject

замените
/uobject/data/getCreateForm/126(идешник этого типа)/

на
/udata/data/getCreateForm/126(идешник этого типа)/

Название: Re:Заказа в 1 клик
Отправлено: rellai от 20 Мая 2014, 16:01:53
Точно! сработало:
<udata xmlns:xlink="http://www.w3.org/TR/xlink" module="data" method="getCreateForm" generation-time="0.008884">
<group name="personal" title="Персональные данные">
<field name="lname" title="Фамилия" field_id="180" input_name="data[new][lname]" type="string" id="180" required="required"/>
<field name="fname" title="Имя" tip="Это поле содержит Имя пользователя. Оно отображается в характеристиках пользователя и может быть изменено самим пользователем." field_id="181" input_name="data[new][fname]" type="string" id="181" required="required"/>
<field name="father_name" title="Отчество" field_id="182" input_name="data[new][father_name]" type="string" id="182"/>
<field name="email" title="E-mail" field_id="209" input_name="data[new][email]" type="string" id="209" required="required"/>
<field name="phone" title="Телефон" field_id="440" input_name="data[new][phone]" type="string" id="440" required="required"/>
</group>
</udata>
Название: Re:Заказа в 1 клик
Отправлено: rellai от 20 Мая 2014, 18:47:37
А дальше что делать?
Название: Re:Заказа в 1 клик
Отправлено: admin от 20 Мая 2014, 19:01:34
А дальше что делать?
Судя по коду, из-за того, что не заполнены необходимые поля (checkRequiredFields) возможно он не может найти $form->getId(). Проверяйте по частям и смотрите что не работает.
Название: Re:Заказа в 1 клик
Отправлено: rellai от 20 Мая 2014, 19:15:40
когда поля не заполнены на тестовом сайте пишет
<error>
Заказ не оформлен, потому что не были заполнены обязательные поля: Фамилия, Имя, E-mail, Телефон
</error>
а у меня
<error>error-required_one_click_list</error>

Данные получаю по одинаковой ссылке
/ru/emarket/getOneClickOrder/element/57.xml
только ид отличается естественно
Название: Re:Заказа в 1 клик
Отправлено: rellai от 20 Мая 2014, 19:56:27
Закоментировал(я вообще не понял зачем это надо...)
if ($errors !== true) {
throw new publicException(getLabel('error-required_one_click_list') . $dataModule->assembleErrorFields($errors));

И все стало немного лучше, но не до конца, почему то вот такой результат выдает
<?xml version="1.0" encoding="utf-8"?><result xmlns:xlink="http://www.w3.org/TR/xlink">
<data><error code="0" type="valueRequiredException">Поле "Фамилия" обязательно должно быть заполнено</error><backtrace><trace>Array</trace><trace>Array</trace><trace>Array</trace><trace>Array</trace><trace>Array</trace><trace>Array</trace><trace>Array</trace><trace>Array</trace><trace>Array</trace><trace>Array</trace><trace>Array</trace><trace>Array</trace><trace>Array</trace><trace>Array</trace><trace>Array</trace><trace>Array</trace><trace>Array</trace><trace>Array</trace><trace>Array</trace></backtrace></data>
</result>
Название: Re:Заказа в 1 клик
Отправлено: rellai от 20 Мая 2014, 20:22:09
Я так понимаю загвоздка где то тут спрятана
      foreach ($emarketOneClick->getAllFields() as $field) {
            $value = $dataForm['new'][$field->getName()];
            $object->setValue($field->getName(), $value);
         }
Название: Re:Заказа в 1 клик
Отправлено: rellai от 20 Мая 2014, 20:28:25
Так понял немного:
Прописал лабел
'error-required_one_click_list'		=> 'Заказ не оформлен, потому что не были заполнены обязательные поля: ',
Теперь показывается более правильно но не отображается, какие именно поля не заполнены. в отличии от теста
<error>
Заказ не оформлен, потому что не были заполнены обязательные поля:
</error>
Название: Re:Заказа в 1 клик
Отправлено: rellai от 20 Мая 2014, 21:41:20
вот тут косяк
throw new publicException(getLabel('error-required_one_click_list') . $dataModule->assembleErrorFields($errors));
в $dataModule->assembleErrorFields($errors) - пусто

вот заполнение
	$dataModule = cmsController::getInstance()->getModule('data');
$errors = $dataModule->checkRequiredFields($form->getId());


Ура заменил папку в classes Data из тестового юми и все заработало....
всмысле вернуло правильную ошибку ))
Заказ не оформлен, потому что не были заполнены обязательные поля: Фамилия, Имя, E-mail, Телефон
Название: Re:Заказа в 1 клик
Отправлено: rellai от 23 Мая 2014, 07:43:09
Чего то не могу понять почему шаблон не применяется для этой формы:
пишу в шаблоне object.xsl
<xsl:apply-templates select="document('udata://data/getCreateForm/126')/udata" /> </xsl:template> 
и прописываю для него шаблон:
<xsl:variable name="customer-info" select="document(concat('uobject://', document('udata://users/auth')/udata/user_id))" />
<xsl:variable name="customer-email" select="$customer-info//group[@name = 'idetntify_data']/property[@name = 'e-mail']/value" />   

<xsl:template match="getCreateForm">
<div class="content">
<form class="buyer_data" enctype="multipart/form-data" method="post" action="/{udata/group/@lang}/emarket/getOneClickOrder/">
<xsl:apply-templates select="udata/group/field" />
</form>
</div>
</xsl:template>

<xsl:template match="field">
 
<div>
<label>
<xsl:if test="@required">
<xsl:attribute name="class">required</xsl:attribute>
</xsl:if>
<span>
<xsl:value-of select="@title" /><xsl:if test="@required"><xsl:text>*</xsl:text></xsl:if>:
</span>
<input type="text" class="textinputs" name="data[new][{@name}]">
<xsl:variable name="inputName" select="@name" />
<xsl:if test="@required">
<xsl:attribute name="required">required</xsl:attribute>
</xsl:if>
<xsl:choose>
<xsl:when test="$customer-info//object/@type-guid = 'users-user' and $inputName = 'email'">
<xsl:attribute name="value"><xsl:value-of select="$customer-email"/></xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="value"><xsl:value-of select="$customer-info//property[@name = $inputName]/value"/></xsl:attribute>
</xsl:otherwise>
</xsl:choose>
</input>
</label>
</div>
</xsl:template>

А он не применяется...понять не могу почему...
Может кто знает?

Название: Re:Заказа в 1 клик
Отправлено: admin от 23 Мая 2014, 09:42:39
ваш вызов
<xsl:apply-templates select="document('udata://data/getCreateForm/126')/udata" /> </xsl:template> 

вернет xml вида
<udata module="data" method="getCreateForm" generation-time="0.009103">
 <group name="group_1" title="Первая группа полей">
   <field name="field_1_1" title="Первое поле" ... и другие атрибуты ... />
   <field name="field_1_2" title="Первое поле" ... и другие атрибуты ... />
   <field name="field_1_3" title="Первое поле" ... и другие атрибуты ... />
    ... и другие поля ...
 </group>
 <group name="group_2" title="Вторая группа полей">
   <field name="field_2_1" title="Первое поле" ... и другие атрибуты ... />
   <field name="field_2_2" title="Первое поле" ... и другие атрибуты ... />
   <field name="field_2_3" title="Первое поле" ... и другие атрибуты ... />
    ... и другие поля ...
 </group>

  ... и другие группы полей ...

</udata>

и начинать обрабатывать его надо шаблоном с другим match
<xsl:template match="udata[@method='getCreateForm']">
....
</xsl:template>
Название: Re:Заказа в 1 клик
Отправлено: rellai от 23 Мая 2014, 10:46:24
вот xml
<udata xmlns:xlink="http://www.w3.org/TR/xlink" module="data" method="getCreateForm" generation-time="0.011625">
<group name="personal" title="Персональные данные">
<field name="lname" title="Фамилия" field_id="180" input_name="data[new][lname]" type="string" id="180" required="required"/>
<field name="fname" title="Имя" tip="Это поле содержит Имя пользователя. Оно отображается в характеристиках пользователя и может быть изменено самим пользователем." field_id="181" input_name="data[new][fname]" type="string" id="181" required="required"/>
<field name="father_name" title="Отчество" field_id="182" input_name="data[new][father_name]" type="string" id="182"/>
<field name="email" title="E-mail" field_id="209" input_name="data[new][email]" type="string" id="209" required="required"/>
<field name="phone" title="Телефон" field_id="440" input_name="data[new][phone]" type="string" id="440" required="required"/>
</group>
</udata>

match не сработал

попробовал в вызове тоже применить
Цитировать
<xsl:apply-templates select="document('udata://data/getCreateForm/126')/udata[@method = 'getCreateForm']" />
все тож самое
Название: Re:Заказа в 1 клик
Отправлено: admin от 23 Мая 2014, 10:58:06
match не сработал

вы уверенны что он  не сработал? или что у вас сработал первый template? а сами поля не появились?

Так как в вашем примере дальше еще есть ошибки с match

например
<xsl:apply-templates select="udata/group/field" />
должен превратиться в
<xsl:apply-templates select="group/field" />

Для полной уверенности что проблема именно в вызове, попробуйте такую вставку:

вызов
<xsl:apply-templates select="document('udata://data/getCreateForm/126')/udata" mode="test" /> 

шаблон
<xsl:template match="udata[@method='getCreateForm']">
вывод успешно произведен
</xsl:template>
Название: Re:Заказа в 1 клик
Отправлено: rellai от 23 Мая 2014, 11:22:21
в общем заработало когда  mode у обоих прописал если убрать то перестает работать.
Спасибо большое за подсказку!!
а почему только с mode работает?
Название: Re:Заказа в 1 клик
Отправлено: admin от 23 Мая 2014, 11:45:44
значит, у вас есть где-то еще один шаблон, который подходит и перекрывает данный вызов
Название: Re:Заказа в 1 клик
Отправлено: rellai от 24 Июня 2014, 13:17:07
Спасибо :)
В общем я все сделал единственное что не приходит письмо с подтверждением заказа что нужно прописать?
Название: Re:Заказа в 1 клик
Отправлено: admin от 24 Июня 2014, 22:17:52
возможно, письмо отправлялось по какому-то event который вы не перенесли.

Нет под рукой кода с функцией /emarket/getOneClickOrder/ поэтому точнее не могу подсказать.
Название: Re:Заказа в 1 клик
Отправлено: rellai от 25 Июня 2014, 08:08:20
вот функции::
		/**
* Оформление заказа в 1 клик
* @param bool $itemType
* @param bool $elementId
* @return array
* @throws publicException
*/
public function getOneClickOrder($itemType = false, $elementId = false) {
$params = array();
      $customer = customer::get();
$types = umiObjectTypesCollection::getInstance();
$form = $types->getTypeByGUID('emarket-purchase-oneclick');

$dataModule = cmsController::getInstance()->getModule('data');
$errors = $dataModule->checkRequiredFields($form->getId());
if ($errors !== true) {
throw new publicException(getLabel('error-required_one_click_list') . $dataModule->assembleErrorFields($errors));
}

$errors = $this->validOneClickInfo();

if (count($errors) > 0) {
return $errors;
}

if ($itemType && $elementId) {
$_REQUEST['no-redirect'] = 1;
$this->basket('put', 'element', $elementId);
}
$order = self::getBasketOrder();

$this->saveOneClickInfo($order);

if ($order->getTotalAmount() < 1) {
throw new publicException('%error-market-empty-basket%');
}

$order->setValue('order_date', time());
$numOrder = $order->generateNumber();
$order->setOrderStatus('waiting');
$order->commit();
$params['orderId'] = $numOrder;

return $params;
}

/**
* Валидация данных о покупателе в 1 клик
* @return array
*/
public function validOneClickInfo() {
$dataForm = getRequest('data');
$emarketOneClick = umiObjectTypesCollection::getInstance()->getTypeByGUID('emarket-purchase-oneclick');

$errors = array();
foreach ($emarketOneClick->getAllFields() as $field) {
$value = $dataForm['new'][$field->getName()];

if($restrictionId = $field->getRestrictionId()) {
$restriction = baseRestriction::get($restrictionId);
if($restriction instanceof baseRestriction) {
if($restriction instanceof iNormalizeInRestriction) {
$value = $restriction->normalizeIn($value);
}

if($restriction->validate($value) == false) {
$fieldTitle = $field->getTitle();

$errstr = getLabel('error-wrong-field-value');
$errstr .=  " \"{$fieldTitle}\" - " . $restriction->getErrorMessage();

$errors['nodes:error'][] = $errstr;
}
}
}

if (count($errors) > 0) {
return $errors;
}
}
}

/**
* Сохранение информации о покупателе, совершившем заказ в 1 клик
* @param $order
* @return array
*/
public function saveOneClickInfo($order) {
$dataForm = getRequest('data');
$objects = umiObjectsCollection::getInstance();

$emarketOneClick = umiObjectTypesCollection::getInstance()->getTypeByGUID('emarket-purchase-oneclick');
$objectId = $objects->addObject($order->getName(), $emarketOneClick->getId());
$object = $objects->getObject($objectId);
 
foreach ($emarketOneClick->getAllFields() as $field) {
$value = $dataForm['new'][$field->getName()];
$object->setValue($field->getName(), $value);
}
  $object->commit();
     
if (!customer::get()->isFilled()) {
foreach ($emarketOneClick->getAllFields() as $field) {
$value = $dataForm['new'][$field->getName()];
customer::get()->setValue($field->getName(), $value);
}
}

$order->setValue('purchaser_one_click', $objectId);
$order->commit();

return;
}
Название: Re:Заказа в 1 клик
Отправлено: admin от 25 Июня 2014, 09:42:04
тут ничего нет кроме изменения статуса заказа, и наверняка на него повешено событие... посмотрите в файле /classes/modules/emarket/events.php или /classes/modules/emarket/custom_events.php событие order-status-changed и посмотрите перенесена ли функция для данного события
Название: Re:Заказа в 1 клик
Отправлено: rellai от 26 Июня 2014, 10:09:22
вот в файле events.php
new umiEventListener('order-status-changed', 'events', 'onEmarketOrderAdded');

а вот в файле __events_handlers.php
	public function onEmarketOrderAdded(iUmiEventPoint $event) {
if ($event->getMode() == "after" && $event->getParam("old-status-id") != $event->getParam("new-status-id")) {

if ($event->getParam("new-status-id") == order::getStatusByCode('waiting') && $event->getParam("old-status-id") != order::getStatusByCode('editing')) {
$module = cmsController::getInstance()->getModule('emarket');
$order = $event->getRef("order");
$link = $module->getObjectEditLink($order->getId(), 'order');
$this->registerEvent('emarket-order-add', array($link, $order->getName()), null, $order->getId());
}
}
}

то-есть вроде все есть...
при обычном оформлении заказа все отправляется
при заказе в 1 клик нет...
Название: Re:Заказа в 1 клик
Отправлено: admin от 26 Июня 2014, 12:14:43
не похоже, что это то? что вам надо, но тут уже много может быть вариантов, вы же сейчас миксуете код с разных примеров, что у вас там есть, а что должно быть сложно сказать.
Название: Re:Заказа в 1 клик
Отправлено: rellai от 26 Июня 2014, 15:18:05
ну вот адрес доставки я взял со стандартного демодизи...
а можете сказазать где вызывается 'order-status-changed' в коде я догнать не могу...
Название: Re:Заказа в 1 клик
Отправлено: admin от 26 Июня 2014, 23:36:24
order-status-changed -  event относиться к событийной моделе (http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/sobytijnaya_model_umicms/chto_takoe_sobytie/)

Цитата из документации от umisoft (http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/sobytijnaya_model_umicms/standartnye_tochki_vyzova/)
Цитировать
order-status-changed
 Вызывается при изменении текущего статуса заказа
  режимы: before, after
  параметры:
   (int) old-status-id - прежний id объекта-статуса заказа
   (int) new-status-id - новый id объекта-статуса заказа
  параметры-ссылки: (class) &order - экземпляр класса order
Название: Re:Заказа в 1 клик
Отправлено: rellai от 27 Июня 2014, 07:51:16
блин тогда совсем не понимаю почему это событие не вызывается?
заказ то я оформляю...и в заказы оно попадает нормально...
Название: Re:Заказа в 1 клик
Отправлено: rellai от 30 Июня 2014, 11:26:49
есть идеи?
Название: Re:Заказа в 1 клик
Отправлено: admin от 30 Июня 2014, 13:19:10
Продебажте.

Вы же знаете, что письмо должно отправляться, вы (предположительно) видите через какой event должна вызываться функция, в которой должно отправляться письмо... попробуйте проследить эту цепочку и проверить что все части работают.
Название: Re:Заказа в 1 клик
Отправлено: sam от 21 Сентября 2014, 23:51:38
Здравствуйте! Данный вопрос с реализацией заказа в 1 клик стоит и у меня. Для начало, несколько строк, чем богаты: есть сайт на лицензионном UMI.CMS (приобретенная версия 2.8.5, далее обновленная до версии 2.9.0).

Задача создания кнопки/ссылки "Заказ в 1 клик" актуальна и для нашего сайта. Для реализации данного функционала, согласно документации (http://dev.docs.umi-cms.ru/prakticheskie_primery/zakaz_v_1_klik/ (http://dev.docs.umi-cms.ru/prakticheskie_primery/zakaz_v_1_klik/)) в модуле "Шаблоны данных" нашего сайта добавлен новый системный тип данных "Данные из формы "Заказ в 1 клик" с необходимыми полями, после чего в базе данных к этой форме прописан guid "emarket-purchase-oneclick".

Теперь о том, что есть для реализации функции (не уверен, что это все, потому и пишу, чтобы обсудить, и постараться понять нюансы этой функции):

1. Скрипт-обработчик формы
2. Тэмплейт вызова формы
3. .xsl-шаблон формы

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

ВОПРОСЫ:
Пункт 1 (Скрипт-обработчик формы)
Правильно ли я понимаю, что этот скрипт необходимо добавить в файл "classes/modules/emarket/__custom.php" после "//TODO: Write here your own macroses"? После чего в директиве "classes/modules/emarket/" добавить файл "permissions.custom.php" с содержанием:

Или как-то иначе? Если иначе, то просьба, можете подсказать, как?
И нужна ли функция "onStatusChanged" в скрипте?

Пункт 2 (Тэмплейт вызова формы)
По этому пункту просто подтвердите, что "да, это тэмплейт вызова формы", который будет в popup.

Пункт 3 (.xsl-шаблон формы)
Как должен называться этот файл, и в какой директиве/папке он должен располагаться? Или этот шаблон можно вставить в уже имеющийся файл (если да, то просьба указать путь)?

Предпоследний вопрос (ссылка)
Какая должна быть ссылка на кнопке "купить в 1 клик"?

Последний вопрос (общий)
Не уверен, что имею все для реализации заказа в 1 клик. Чего у меня нет, и можете ли подсказать, откуда можно взять то, что отсутствует у меня?

Буду искренне признателен Вам за подсказки и помощь!
Название: Re:Заказа в 1 клик
Отправлено: admin от 24 Сентября 2014, 15:08:45
эммм много текста, много кода и еще больше связок. Не стал проверять все и вся, поэтому отвечу на вопросы и посоветую проверять все последовательно, то есть:
- вначале, что макрос хоть как-то работает,
- потом, что он работает для гостей (то есть правильно прописаны permissions),
- потом, что вы можете вывести нужную форму,
- потом, что она передает нужные данные,
- потом, чтобы эта форма выводилось в сплывающем окне и отправлялась через ajax или как-то по иному решить вопрос с проверкой формы на предмет заполнения обязательных полей и просто перенаправлять на обработчик формы редиректом

Ответы на ваши вопросы:
1. Да, такой вариант подойдет
2. Да, это вызов формы (то что она будет в popup это отдельный версточный момент)
3. Если вы хотите вызывать форму через фофч, то шаблон для неё должен лежать в отдельном файле (неважно как вы его назовете, если вы пишете свои js'ки) и прикрепляться в ajax запросу через параметр ?transform
4. Если у вас свои js (так как видимо у вас нет в данной версии umi функционала заказа в один клик, иначе я не понимаю зачем вы проделываете вышеописанную работу), то не важно, важно чтобы у вас был js event который срабатывает при нажатии на данную ссылку
5. Я так понимаю, вы пытаетесь создать копию функционала, которого у вас нет в вашей версии umi?
Переносом не занимался, подобный вопрос уже поднимался на форуме (о переносе данного функционала), но тут, как я и писал выше, скорее всего придется познать дзен и разобраться от и до, как описано в самом верху данного сообщения.
Название: Re:Заказа в 1 клик
Отправлено: sam от 24 Сентября 2014, 16:40:42
Спасибо за оперативный ответ!

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

- работу макроса пока не проверял - не рискую пока без подтверждения правильности кодов и планируемых мной действий.
- "правильно прописаны permissions" - посмотрев по коду, можете подтвердить, что правильно все прописано? если не правильно, можете подсказать, как правильно?
- "чтобы эта форма выводилось в сплывающем окне и отправлялась через ajax" - вариант оптимальный, а как это можно реализовать? понятно, что через js (код можно взять откуда-то?)


Цитировать
3. Если вы хотите вызывать форму через фофч, то шаблон для неё должен лежать в отдельном файле (неважно как вы его назовете, если вы пишете свои js'ки) и прикрепляться в ajax запросу через параметр ?transform
4. Если у вас свои js (так как видимо у вас нет в данной версии umi функционала заказа в один клик, иначе я не понимаю зачем вы проделываете вышеописанную работу), то не важно, важно чтобы у вас был js event который срабатывает при нажатии на данную ссылку
5. Я так понимаю, вы пытаетесь создать копию функционала, которого у вас нет в вашей версии umi?
Переносом не занимался, подобный вопрос уже поднимался на форуме (о переносе данного функционала), но тут, как я и писал выше, скорее всего придется познать дзен и разобраться от и до, как описано в самом верху данного сообщения.

3. Ничего сам не пишу, к сожалению (не ас в этом деле). Про ajax уже написал, что рад бы реализовать при профессиональной поддержке с Вашей стороны.
4. Может навязываюсь, но прошу от Вас правильную ссылку для вызова формы.
5. Был бы функционал "заказ в 1 клик", эту тему обошел бы стороной. Хотя бы просто пишите, чего не достает для реализации данного функционала? Был бы рад подсказке, как достать недостающее из открытых источников?

Буду безумно Вам благодарен, если смогу "заказ в 1 клик" с Вашей помощью реализовать!
Название: Re:Заказа в 1 клик
Отправлено: admin от 24 Сентября 2014, 17:06:26
От души порадовался вашему сообщению, но оно несет в себе какой-то неправильный смысл. Неправильный, он в том, что вы просите проверить ваш код и подсказать что и как написать чтобы у вас все заработало, ограничив свое excnbt в этом процессе. Такие запросы стоит писать либо в раздел "вакансии", чтобы эту работу сделали для вас как платную услугу, либо, все таки, получая ответы продолжать развиваться и учиться как решить тот или иной вопрос. А значит, стоит хотя бы попробовать запустить скрипт, посмотреть работает ли он, попробовать разобраться как работают ajax запросы и уже потом приходит с очередным вопросом. Направление вам уже дали, если их не хватает то пиши каких именно.

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

Цитировать
работу макроса пока не проверял - не рискую пока без подтверждения правильности кодов и планируемых мной действий.
- стоит рискнуть, так как вести вас за руку, значит делать работу за вас (опять же раздел "Вакансии")

Цитировать
можете подтвердить, что правильно все прописано?
я уже написал что направление правильное, а в остальном вам надо попробовать.

Цитировать
- "чтобы эта форма выводилось в сплывающем окне и отправлялась через ajax" - вариант оптимальный, а как это можно реализовать? понятно, что через js (код можно взять откуда-то?)
посмотрите как работает сплывающая форма при покупке опционных товаров (файл /templates/demodizzy/js/basket.js ищите строчку с параметром ?transform или посмотрите тему про покупку товаров без перезагрузки, например начало вебинара http://www.youtube.com/watch?v=YK4dWUUJosc)

Цитировать
3. Ничего сам не пишу, к сожалению (не ас в этом деле). Про ajax уже написал, что рад бы реализовать при профессиональной поддержке с Вашей стороны.
поддержка может быть только в виде направлений и советов, так что писать вам все же стоит начать или подключить кого-то к этому процессу

Цитировать
4. Может навязываюсь, но прошу от Вас правильную ссылку для вызова формы.
нет правильной ссылки, есть просто ссылка, при нажатии на которую срабатывает jquery обработчик, срабатывать он может различными способами. Опять тема с покупкой без перезагрузки рассказывает о похожем механизме (вебинар указанный выше)

Цитировать
5. Был бы функционал "заказ в 1 клик", эту тему обошел бы стороной. Хотя бы просто пишите, чего не достает для реализации данного функционала? Был бы рад подсказке, как достать недостающее из открытых источников?
установите localpack на win (http://www.umi-cms.ru/product/downloads/local/) он поставит последнюю версию на ваш компьютер. В демо сайте demodizzy есть заказ в 1 клик, можно попробовать разбираться на его примере

P.S.  судя по вашему сообщение промелькнуло подозрение, что вы воспринимаете umihelp как официальных представителей umisoft (производитель umi-cms), и как следствие ожидаете обязательной поддержки, но это не так (см. тут http://umihelp.ru/info/about/)
P.P.S Очень надеюсь, что данным сообщением подтолкну вас к более глубокому изучению интересующего вас вопроса.
Название: Re:Заказа в 1 клик
Отправлено: sam от 24 Сентября 2014, 17:29:11
Сразу отвечу на постскриптум: нет (знаю, что неофициальный). Но, в то же время знаю, что admin профи своего дела. Ни к чему не клоню, и готовых кодов не жду от Вас. Подсказки и подтверждения действий уже стоят очень дорогого. 

Пробовать буду, главное, чтобы заработало всё. Но без подсказки на пункт с шаблоном (Пункт 3 (.xsl-шаблон формы)), где расположить, будет сложновато.

P.S. Отдельное спасибо за заданные направления!
Название: Re:Заказа в 1 клик
Отправлено: admin от 24 Сентября 2014, 18:41:18
главное, чтобы заработало всё. Но без подсказки на пункт с шаблоном (Пункт 3 (.xsl-шаблон формы)), где расположить, будет сложновато.

я так понимаю, шаблон вы будете писать сами, если нет, то стандартные шаблоны для макроса data/getCreateForm (если мы говорим о demodizzy) лежит по адресу /templates/demodizzy/xslt/modules/data/common-edit-form.xsl
Название: Re:Заказа в 1 клик
Отправлено: admin от 24 Сентября 2014, 20:45:24
P.S. localhost запросил "ключ". Мне бы папку с demodizzy версии 2.9.6 (там все xsl, js и т.д.).

там все просто, смотрите тут http://www.youtube.com/watch?v=wAgfCfBLIco
Название: Re:Заказа в 1 клик
Отправлено: sam от 22 Декабря 2014, 13:23:43
Нужна помощь по этой теме (как я ранее уже писал, переношу функцию из localhost на нашу версию 2.9.0) - что сделал, и где застрял:

0. Создал форму для заказа в 1 клик, затем в базе данных прописал guid для формы "emarket-purchase-oneclick"

1. В файл "/classes/modules/emarket/__purchasing.php" добавил функции (getOneClickOrder, validOneClickInfo, saveOneClickInfo, createForm)

2. Затем в директиве "/classes/modules/emarket/" в "permissions.php" добавил 'getOneClickOrder', 'createForm', 'purchasing_one_step', 'saveinfo'

3. После в директиве "/xslt/modules/catalog/" разместил шаблоны форм (one-click.xsl, popup-add-options-oneclick.xsl)

4. В "/js/site/basket.js" добавил функции (site.basket.oneClick = function(id, form) и site.basket.sendForm = function(form))

5. В директиву "/js/site/" перенёс "i18n.ru.js"

6. В файл /css/design/gride.css перенёс нужные стили для popup формы

7. Добавил ссылку "купить в 1 клик" ({$lang-prefix}/emarket/getOneClickOrder/element/{page/@id}/) на страницу object-view.xsl в нужное место

ВОПРОС: Я так понимаю, остается как-то <xsl:apply-templates select="document('udata://data/getCreateForm/176')/udata" /> где-то указать (где именно)?! Или что-то еще надо перенести?

Просто с выполнением всех вышеперечисленных переносов, нажимая на ссылку "купить в 1 клик", я перехожу, например, на site.ru/emarket/getOneClickOrder/element/3189/, где соответственно текст "Debug message for UC-pages.", а в XML "error-required_one_click_list".

Еще помниться ответ admin - цитирую:
Цитировать
...важно чтобы у вас был js event который срабатывает при нажатии на данную ссылку

Как проверить, есть ли этот js event? При нажатии на ссылку нет всплывающего окна - это отсутствие этого event, или другое что-то? Надо, чтобы страница не перезагружалась (ajax), и соответственно всплыло окно с формой заказа в 1 клик.
Название: Re:Заказа в 1 клик
Отправлено: ilyar от 24 Декабря 2014, 04:44:14
1. В файл "/classes/modules/emarket/__purchasing.php" добавил функции (getOneClickOrder, validOneClickInfo, saveOneClickInfo, createForm)

2. Затем в директиве "/classes/modules/emarket/" в "permissions.php" добавил 'getOneClickOrder', 'createForm', 'purchasing_one_step', 'saveinfo'

Вижу в правах пропустил validOneClickInfo, saveOneClickInfo. Если создаем новые публичные методы (макросы), надо и явно задавать права.

ВОПРОС: Я так понимаю, остается как-то <xsl:apply-templates select="document('udata://data/getCreateForm/176')/udata" /> где-то указать (где именно)?! Или что-то еще надо перенести?

Предположу что ответ есть в материале Заказ в 1 клик (http://dev.docs.umi-cms.ru/prakticheskie_primery/zakaz_v_1_klik/).

Еще есть такой материал Оформление заказа в один шаг – xslt шаблонизатор (http://wiki.umisoft.ru/%D0%9E%D1%84%D0%BE%D1%80%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%B0_%D0%B2_%D0%BE%D0%B4%D0%B8%D0%BD_%D1%88%D0%B0%D0%B3_%E2%80%93_xslt_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B8%D0%B7%D0%B0%D1%82%D0%BE%D1%80), может быть полезен тоже.

Просто с выполнением всех вышеперечисленных переносов, нажимая на ссылку "купить в 1 клик", я перехожу, например, на site.ru/emarket/getOneClickOrder/element/3189/, где соответственно текст "Debug message for UC-pages.", а в XML "error-required_one_click_list".


Переходит значит нет обработчика события клика (js event) или он обрабатывает ее не правильно.  Текст "Debug message for UC-pages." следствие отсутствия обработчика, не предполагалось смотреть на страницу (site.ru/emarket/getOneClickOrder/element/3189/) для нее нет шаблона.
 
Как проверить, есть ли этот js event? При нажатии на ссылку нет всплывающего окна - это отсутствие этого event, или другое что-то? Надо, чтобы страница не перезагружалась (ajax), и соответственно всплыло окно с формой заказа в 1 клик.

Провели, нет, см. выше. Нет всплывающего да потому что нет обработчика события.

Пример рабочего обработчика можно видеть тут http://jsfiddle.net/ilyar/Ygx2T/embedded/result/ по клику добавляем товар  в корзину, блокируя в процессе возможные действия пользователя в процессе , в консоле браузера можно видеть сообщение обработчика.  Этот пример не очень визуальный, но он работает и его реализация лаконично демонстрирует, как может быть реализовано подобное действие, соль примера в реализации http://jsfiddle.net/ilyar/Ygx2T/ 

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

Название: Re:Заказа в 1 клик
Отправлено: sam от 24 Декабря 2014, 10:26:35
ilyar, спасибо за отклик! Постараюсь с учетом замечаний задавать вопросы, и по возможности привести коды. Заранее извиняюсь за километровое сообщение (дальше такого уже не будет)!

Цитировать
Вижу в правах пропустил validOneClickInfo, saveOneClickInfo. Если создаем новые публичные методы (макросы), надо и явно задавать права.

Переносил из localhost - там в правах не было validOneClickInfo, saveOneClickInfo. Но я всё же добавил, чтобы потом у меня и по этому поводу вопроса не было (/classes/modules/emarket/permissions.php):
<?php
$permissions = array(
'purchasing' => array(
'price', 'stores', 'ordersList', 'basketAddLink', 'basketAddFastLink', 'fastPurchase', 'applyPriceCurrency',
'order', 'basket', 'cart',
'purchase', 'getOneClickOrder', 'gateway', 'callback', 'receipt', 'removeDeliveryAddress',
'currencySelector', 'getCustomerInfo', 'selectCurrency', 'discountInfo', 'createForm', 'purchasing_one_step', 'saveinfo', 'validOneClickInfo', 'saveOneClickInfo'
),

'personal' => array(
'ordersList', 'customerDeliveryList'
),

'compare' => array(
'getCompareList', 'getCompareLink',
'addToCompare', 'removeFromCompare', 'resetCompareList',
'jsonAddToCompareList', 'jsonRemoveFromCompare', 'jsonResetCompareList'
),

'control' => array(
'orders', 'ordersList', 'del', 'order_edit', 'order_printable',  'order.edit',
'currency', 'currency_add', 'currency_edit', 'currency.edit',
'delivery', 'delivery_add', 'delivery_edit', 'delivery_address_edit', 'delivery.edit',
'discounts', 'discount_add', 'discount_edit', 'getModificators', 'getRules', 'discount', 'discount.edit',
'payment', 'payment_add', 'payment_edit', 'payment.edit',
'stores', 'store_add', 'store_edit', 'store', 'store.edit'
),

'order_editing' => array(
'editOrderAsUser', 'actAsUser'
)
);
?>

Добавленные/перенесенные макросы (/classes/modules/emarket/__purchasing.php) - макросы не трогал, т.е. ничего в них не менял:
		/**
* Оформление заказа в 1 клик
* @param bool $itemType
* @param bool $elementId
* @return array
* @throws publicException
*/
public function getOneClickOrder($itemType = false, $elementId = false) {
$params = array();

$types = umiObjectTypesCollection::getInstance();
$form = $types->getTypeByGUID('emarket-purchase-oneclick');

$dataModule = cmsController::getInstance()->getModule('data');
$errors = $dataModule->checkRequiredFields($form->getId());
if ($errors !== true) {
throw new publicException(getLabel('error-required_one_click_list') . $dataModule->assembleErrorFields($errors));
}

$errors = $this->validOneClickInfo();
if (count($errors) > 0) {
return $errors;
}

if ($itemType && $elementId) {
$_REQUEST['no-redirect'] = 1;
$this->basket('put', 'element', $elementId);
}
$order = self::getBasketOrder();

$this->saveOneClickInfo($order);

if ($order->getTotalAmount() < 1) {
throw new publicException('%error-market-empty-basket%');
}

$order->setValue('order_date', time());
$numOrder = $order->generateNumber();
$order->setOrderStatus('waiting');
$order->commit();
$params['orderId'] = $numOrder;

return $params;
}

/**
* Валидация данных о покупателе в 1 клик
* @return array
*/
public function validOneClickInfo() {
$dataForm = getRequest('data');
$emarketOneClick = umiObjectTypesCollection::getInstance()->getTypeByGUID('emarket-purchase-oneclick');

$errors = array();
foreach ($emarketOneClick->getAllFields() as $field) {
$value = $dataForm['new'][$field->getName()];

if($restrictionId = $field->getRestrictionId()) {
$restriction = baseRestriction::get($restrictionId);
if($restriction instanceof baseRestriction) {
if($restriction instanceof iNormalizeInRestriction) {
$value = $restriction->normalizeIn($value);
}

if($restriction->validate($value) == false) {
$fieldTitle = $field->getTitle();

$errstr = getLabel('error-wrong-field-value');
$errstr .=  " \"{$fieldTitle}\" - " . $restriction->getErrorMessage();

$errors['nodes:error'][] = $errstr;
}
}
}

if (count($errors) > 0) {
return $errors;
}
}
}

/**
* Сохранение информации о покупателе, совершившем заказ в 1 клик
* @param $order
* @return array
*/
public function saveOneClickInfo($order) {
$dataForm = getRequest('data');
$objects = umiObjectsCollection::getInstance();

$emarketOneClick = umiObjectTypesCollection::getInstance()->getTypeByGUID('emarket-purchase-oneclick');
$objectId = $objects->addObject($order->getName(), $emarketOneClick->getId());
$object = $objects->getObject($objectId);

foreach ($emarketOneClick->getAllFields() as $field) {
$value = $dataForm['new'][$field->getName()];
$object->setValue($field->getName(), $value);
}
$object->commit();

if (!customer::get()->isFilled()) {
foreach ($emarketOneClick->getAllFields() as $field) {
$value = $dataForm['new'][$field->getName()];
customer::get()->setValue($field->getName(), $value);
}
}

$order->setValue('purchaser_one_click', $objectId);
$order->commit();

return;
}

public function createForm($object_type) {
$langs = langsCollection::getInstance();
$lang = getRequest('lang');
$lang = $langs->getLangId($lang);
if (!$lang) {
$lang = $langs->getDefaultLang()->getId();
}
$cmsController = cmsController::getInstance();
$cmsController->setLang($langs->getLang($lang));

$data = cmsController::getInstance()->getModule('data');
$form = $data->getCreateForm($object_type);
if (array_key_exists('nodes:group', $form) && count($form['nodes:group']) > 0) {
$form['nodes:group'][0]['attribute:lang'] = $langs->getLang($lang)->getPrefix();
}
return $form;
}
};

Цитировать
Предположу что ответ есть в материале Заказ в 1 клик.

Еще есть такой материал Оформление заказа в один шаг – xslt шаблонизатор, может быть полезен тоже.

Читал документацию, и обращение в форму есть в basket.js, далее приведу скрипты, чтобы было видно наглядно, мало ли чего там не хватает (/js/site/basket.js - добавленный код):
...здесь всё то, что идет до этого - ничего не трогал, а далее site.basket.list поменял на...

site.basket.list = function(link) {
var oneClick = false;
var id = (link.id.indexOf('add_basket') != -1) ? link.id.replace(/^add_basket_/, '') : false;
if (!id) {
oneClick = true;
id = (link.id.indexOf('one_click') != -1) ? link.id.replace(/^one_click_/, '') : link;
}
if (!id) return false;
if (jQuery(link).hasClass('options_true')) {
var url = '/upage//' + id + '?transform=modules/catalog/popup-add-options.xsl';
if (oneClick) {
url = '/upage//' + id + '?transform=modules/catalog/popup-add-options-oneclick.xsl';
}
if (jQuery('#add_options_' + id).length == 0) {
jQuery.ajax({
url: url,
dataType: 'html',
success: function (data) {
site.message({
id: 'add_options_' + id,
header: 'Выбор опций',
width: 400,
content: data,
async: false
});
var form = jQuery('form.options');
form.append('<input type="submit" class="button" value="'+ i18n.basket_add_short +'" />');
form.submit(function() {
if (!site.basket.is_cart && !oneClick) {
site.basket.add(id, this, true);
} else if(!site.basket.is_cart && oneClick) {
site.basket.oneClick(id, this);
site.message.close(jQuery('#add_options_' + id), jQuery('.overlay'))
}
return false;
});
}
});
}
}
else if(!oneClick) {
this.add(id);
} else {
site.basket.oneClick(id);
}
};

...здесь site.basket.modify, site.basket.remove, site.basket.modify.complete, а дальше добавил...

site.basket.oneClick = function(id, form) {
var option = $(form).find('input[type="radio"]:checked');
var optional;
if (option.length > 0) {
optional = '?' + option.attr('name') + '=' + $(form).find('input[type="radio"]:checked').val()
} else {
optional = '';
}

var locale = location.pathname;
var lang = locale.substring(1,locale.substring(1).indexOf('/')+1);

jQuery.ajax({
url: '/udata/emarket/createForm/emarket-purchase-oneclick?transform=modules/catalog/one-click.xsl&lang=' + lang,
dataType: 'html',
success: function (data) {
site.message({
id: 'one_click_popup_' + id,
header: i18n.oneclick_checkout,
width: 400,
content: data,
async: false
});
var form = jQuery('form.buyer_data');
form.attr('action', form.attr('action') + 'element/' + id + '.xml' + optional)
form.append('<div><input type="submit" class="button big" value="' + i18n.checkout + '" /></div>');
form.submit(function() {
var xml = site.basket.sendForm(form).responseXML;

form.closest('.content').find('.error').remove();
$(xml).find('error').each(
function() {
form.closest('div').prepend('<div class="error">' + $(this).text() + '</div>');
}
);

form.closest('.content').find('.success').remove();
if ($(xml).find('orderId').length > 0) {
site.basket.replace('all');
form.closest('div').prepend('<div class="success"><div><p>' + i18n.finish_message_prefix + '<strong>#' + $(xml).find('orderId').eq(0).text() + '</strong>' + i18n.finish_message_postfix + '</p></div><a class="button big close">' + i18n.continue + '</a></div>');
form.remove();
}

return false;
});
}
});
}

site.basket.sendForm = function(form) {
return jQuery.ajax({
url: form.attr('action'),
dataType: 'xml',
method: form.attr('method'),
data: form.serialize(),
async: false,
success: function (data) {
return data;
}
});
}

...далее site.basket.init - без внесения каких-либо изменений

Цитировать
Переходит значит нет обработчика события клика (js event) или он обрабатывает ее не правильно.  Текст "Debug message for UC-pages." следствие отсутствия обработчика, не предполагалось смотреть на страницу (site.ru/emarket/getOneClickOrder/element/3189/) для нее нет шаблона.

Провели, нет, см. выше. Нет всплывающего да потому что нет обработчика события.

Пример рабочего обработчика можно видеть тут http://jsfiddle.net/ilyar/Ygx2T/embedded/result/ по клику добавляем товар  в корзину, блокируя в процессе возможные действия пользователя в процессе , в консоле браузера можно видеть сообщение обработчика.  Этот пример не очень визуальный, но он работает и его реализация лаконично демонстрирует, как может быть реализовано подобное действие, соль примера в реализации http://jsfiddle.net/ilyar/Ygx2T/ 

Я выше привел скрипты js, там нет обработчика? Тоже всё из localhost. Просто, может я что-то еще не перенёс?! Ссылку на рабочий пример http://jsfiddle.net/ilyar/Ygx2T/embedded/result/ уже высылали, не понял, что мне отсюда надо, а чего не надо?!

Сама ссылка на object-view.xsl выглядет так (без class="basket_list one_click" страница перезагружается и происходит переход на ...page/@id) - сейчас нажимаю на ссылку, ничего не происходит вообще:
<a id="one_click_{page/@id}" class="basket_list one_click" href="{$lang-prefix}/emarket/getOneClickOrder/element/{page/@id}/">
<xsl:text>Купить в 1 клик</xsl:text>
</a>
Название: Re:Заказа в 1 клик
Отправлено: ilyar от 24 Декабря 2014, 15:40:54
Я выше привел скрипты js, там нет обработчика? Тоже всё из localhost. Просто, может я что-то еще не перенёс?! Ссылку на рабочий пример http://jsfiddle.net/ilyar/Ygx2T/embedded/result/ уже высылали, не понял, что мне отсюда надо, а чего не надо?!

Настоятельно рекомендую разобраться, от туда надо взять понимание как это работает, если там что то не понятно задавай вопросы, вот некоторые пояснения:

// Поле загрузки страницы, отрабатывает
jQuery(document).ready(function () {
    site.init(); 
});

// будет запущено как страница загрузится
site.init = function () {

    // назначение обработчика на клик элемента содержащего атрибут ckass="actionAdd"
    jQuery('.actionAdd').click(function (event) {
        event.preventDefault();
        var data = jQuery(this).data();
        site.addItem(data.id); // запускаем процесс добавления в корзину
    });
};


Еще обработчик может быть назначен через атрибут элемента onClick , как то так <a onClick="javascript: site.addItem(jQuery(this).data());">clck me</a>, в этом случае нам не потребуется это делать в site.init, т.е. это взаимоисключающие подходы.

Подобный механизм будет работать в твоей задаче.

Сама ссылка на object-view.xsl выглядет так (без class="basket_list one_click" страница перезагружается и происходит переход на ...page/@id) - сейчас нажимаю на ссылку, ничего не происходит вообще:

Это говорит о том что на basket_list или one_click есть обработчик события клик из приведенного кода это не очевидно, ясно что метод site.basket.list участвует в этом процессе, а также для добавления товара в корзину.

Название: Re:Заказа в 1 клик
Отправлено: sam от 25 Декабря 2014, 14:45:10
Цитировать
Это говорит о том что на basket_list или one_click есть обработчик события клик из приведенного кода это не очевидно, ясно что метод site.basket.list участвует в этом процессе, а также для добавления товара в корзину.

ilyar, страница перезагружается даже при наличии просто класса basket_list или one_click, а вот когда вместе class="basket_list one_click", вот в этом случает уже страница не перезагружается - это я такое тестирование проводил.
Название: Re:Заказа в 1 клик
Отправлено: ilyar от 26 Декабря 2014, 14:45:56
Цитировать
Это говорит о том что на basket_list или one_click есть обработчик события клик из приведенного кода это не очевидно, ясно что метод site.basket.list участвует в этом процессе, а также для добавления товара в корзину.

ilyar, страница перезагружается даже при наличии просто класса basket_list или one_click, а вот когда вместе class="basket_list one_click", вот в этом случает уже страница не перезагружается - это я такое тестирование проводил.

В шаблоне demodizzy реализация Заказа в 1 клик начинается в файле templates/demodizzy/js/basket.js, там установлен обработчик на событие клик  по элементу с атрибутом class="basket_list":

	jQuery('.basket_list').click(function(){
if (!site.basket.is_cart || !jQuery(this).hasClass('options_false')) {
site.basket.list(this); // процесс добавления в корзину или заказ в один клик в зависимости от атрибута id см. реализацию site.basket.list
return false; // предотвращает переход по ссылке
}
});

Из этого можно сделать вывод, для работы этого обработчика необходимым элемент содержавший атрибуты class="basket_list" и  id="one_click_{ID товара}"
Название: Re:Заказа в 1 клик
Отправлено: sam от 26 Декабря 2014, 15:00:42
ilyar, а в этом классе наличие options 'options_false' обязательно или же нет?
Название: Re:Заказа в 1 клик
Отправлено: ilyar от 26 Декабря 2014, 15:07:29
ilyar, а в этом классе наличие options 'options_false' обязательно или же нет?

Да, если надо поддержка опциональных свойств и нет, если нет.
Название: Re:Заказа в 1 клик
Отправлено: sam от 26 Декабря 2014, 15:22:41
Я знаю, что, чтобы заработало условие options false/true, в моем случае, в файле object-view.xsl необходимо наличие кода (иначе система вызовет ошибку строки с этим классом):

		<xsl:variable name="is_options">
<xsl:apply-templates select="$object/page/properties" mode="is_options" />
</xsl:variable>

В файле object-view.xsl в каком месте, т.е. где именно и как именно указать этот variable?
Название: Re:Заказа в 1 клик
Отправлено: ilyar от 27 Декабря 2014, 22:15:07
Я знаю, что, чтобы заработало условие options false/true, в моем случае, в файле object-view.xsl необходимо наличие кода (иначе система вызовет ошибку строки с этим классом):

		<xsl:variable name="is_options">
<xsl:apply-templates select="$object/page/properties" mode="is_options" />
</xsl:variable>

В файле object-view.xsl в каком месте, т.е. где именно и как именно указать этот variable?

Эта переменная зависит от переменной $object, соответственно ее надо декларировать там где $object доступен.

В общем логично ее определять в области видимости данных товара или списка товаров, т.е. там где мы можем получить информацию о наличии или отсутствии опций у товара.
Название: Re:Заказа в 1 клик
Отправлено: sam от 27 Декабря 2014, 22:30:06
К сожалению, в этом случае я все равно не понял, куда именно, т.е. конкретное место в коде на странице object-view.xsl
Название: Re:Заказа в 1 клик
Отправлено: ilyar от 27 Декабря 2014, 22:47:20
К сожалению, в этом случае я все равно не понял, куда именно, т.е. конкретное место в коде на странице object-view.xsl

Там куда это надо пометить должна быть задекларирована переменная $object :

<xsl:variable name="object">...</xsl:variable>
Название: Re:Заказа в 1 клик
Отправлено: sam от 28 Декабря 2014, 19:01:10
Т.е. так (в таком виде нет ошибок в коде, если посмотреть по строчно? object-view.xsl):

1. <xsl:template match="udata" mode="object-view">
2. <xsl:variable name="object" select="document(concat('upage://', page/@id))/udata" />
3. <xsl:variable name="is_options">
4. <xsl:apply-templates select="$object/page/properties" mode="is_options" />
5. </xsl:variable>
...
// Шаблон для mode="is_options" есть в /modules/catalog/common.xsl
Название: Re:Заказа в 1 клик
Отправлено: ilyar от 29 Декабря 2014, 00:46:43
Т.е. так (в таком виде нет ошибок в коде, если посмотреть по строчно? object-view.xsl):

1. <xsl:template match="udata" mode="object-view">
2. <xsl:variable name="object" select="document(concat('upage://', page/@id))/udata" />
3. <xsl:variable name="is_options">
4. <xsl:apply-templates select="$object/page/properties" mode="is_options" />
5. </xsl:variable>
...
// Шаблон для mode="is_options" есть в /modules/catalog/common.xsl

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