Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Шаги "оформление заказа"

Автор atachРаздел Шаблоны TPL

Ответов: 11
Просмотров: 6619
Последний ответ 14 Августа 2013, 16:59:21
от admin
Вывести сумму заказа на странице "Заказ поступил в обработку"

Автор AxiomateriaРаздел Шаблоны XSLT

Ответов: 2
Просмотров: 3784
Последний ответ 07 Ноября 2014, 23:46:49
от Axiomateria
Перенаправление на страницу регистрации покупателя перед оформлением заказа

Автор AxiomateriaРаздел Шаблоны XSLT

Ответов: 16
Просмотров: 10062
Последний ответ 11 Марта 2013, 11:54:29
от Axiomateria
Проблемы уведомления клиента при смене статуса заказа и доставки

Автор stud_maiРаздел Шаблоны XSLT

Ответов: 7
Просмотров: 4274
Последний ответ 05 Января 2016, 00:59:01
от admin
Не суммировать скидку на товар с общей скидкой от суммы заказа

Автор smartwebРаздел Шаблоны TPL

Ответов: 3
Просмотров: 2647
Последний ответ 19 Декабря 2016, 12:29:09
от aghigay

0 Пользователей и 2 Гостей просматривают эту тему.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Заказа в 1 клик
« Ответ #30 : 26 Июня 2014, 23:36:24 »
order-status-changed -  event относиться к событийной моделе

Цитата из документации от umisoft
Цитировать
order-status-changed
 Вызывается при изменении текущего статуса заказа
  режимы: before, after
  параметры:
   (int) old-status-id - прежний id объекта-статуса заказа
   (int) new-status-id - новый id объекта-статуса заказа
  параметры-ссылки: (class) &order - экземпляр класса order

*

rellai

  • **
  • 58
  • +5/-0
    • Просмотр профиля
Re:Заказа в 1 клик
« Ответ #31 : 27 Июня 2014, 07:51:16 »
блин тогда совсем не понимаю почему это событие не вызывается?
заказ то я оформляю...и в заказы оно попадает нормально...

*

rellai

  • **
  • 58
  • +5/-0
    • Просмотр профиля
Re:Заказа в 1 клик
« Ответ #32 : 30 Июня 2014, 11:26:49 »
есть идеи?

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Заказа в 1 клик
« Ответ #33 : 30 Июня 2014, 13:19:10 »
Продебажте.

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

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Заказа в 1 клик
« Ответ #34 : 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/) в модуле "Шаблоны данных" нашего сайта добавлен новый системный тип данных "Данные из формы "Заказ в 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 клик. Чего у меня нет, и можете ли подсказать, откуда можно взять то, что отсутствует у меня?

Буду искренне признателен Вам за подсказки и помощь!
« Последнее редактирование: 26 Сентября 2014, 15:14:44 от sam »
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Заказа в 1 клик
« Ответ #35 : 24 Сентября 2014, 15:08:45 »
эммм много текста, много кода и еще больше связок. Не стал проверять все и вся, поэтому отвечу на вопросы и посоветую проверять все последовательно, то есть:
- вначале, что макрос хоть как-то работает,
- потом, что он работает для гостей (то есть правильно прописаны permissions),
- потом, что вы можете вывести нужную форму,
- потом, что она передает нужные данные,
- потом, чтобы эта форма выводилось в сплывающем окне и отправлялась через ajax или как-то по иному решить вопрос с проверкой формы на предмет заполнения обязательных полей и просто перенаправлять на обработчик формы редиректом

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

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Заказа в 1 клик
« Ответ #36 : 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 клик" с Вашей помощью реализовать!
« Последнее редактирование: 26 Сентября 2014, 15:15:46 от sam »
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Заказа в 1 клик
« Ответ #37 : 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 Очень надеюсь, что данным сообщением подтолкну вас к более глубокому изучению интересующего вас вопроса.

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Заказа в 1 клик
« Ответ #38 : 24 Сентября 2014, 17:29:11 »
Сразу отвечу на постскриптум: нет (знаю, что неофициальный). Но, в то же время знаю, что admin профи своего дела. Ни к чему не клоню, и готовых кодов не жду от Вас. Подсказки и подтверждения действий уже стоят очень дорогого. 

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

P.S. Отдельное спасибо за заданные направления!
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Заказа в 1 клик
« Ответ #39 : 24 Сентября 2014, 18:41:18 »
главное, чтобы заработало всё. Но без подсказки на пункт с шаблоном (Пункт 3 (.xsl-шаблон формы)), где расположить, будет сложновато.

я так понимаю, шаблон вы будете писать сами, если нет, то стандартные шаблоны для макроса data/getCreateForm (если мы говорим о demodizzy) лежит по адресу /templates/demodizzy/xslt/modules/data/common-edit-form.xsl

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Заказа в 1 клик
« Ответ #40 : 24 Сентября 2014, 20:45:24 »
P.S. localhost запросил "ключ". Мне бы папку с demodizzy версии 2.9.6 (там все xsl, js и т.д.).

там все просто, смотрите тут http://www.youtube.com/watch?v=wAgfCfBLIco

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Заказа в 1 клик
« Ответ #41 : 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 клик.
« Последнее редактирование: 22 Декабря 2014, 15:44:48 от sam »
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

ilyar

Re:Заказа в 1 клик
« Ответ #42 : 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 клик.

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

Просто с выполнением всех вышеперечисленных переносов, нажимая на ссылку "купить в 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/ 

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


*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Заказа в 1 клик
« Ответ #43 : 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>
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

ilyar

Re:Заказа в 1 клик
« Ответ #44 : 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 участвует в этом процессе, а также для добавления товара в корзину.