Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - Rodogor

Страницы: 1 2 [3] 4 5 ... 13
31
Это точно можно сделать через модуль обмен данных, если он есть в данной версии UMI.
Можно посмотреть как там реализовано и понадёргать код, сделать свой "импорт" и "экспорт".
Лучше смотреть в сторону формата UmiDump.

Кстати, в WIKI были какие-то статьи
http://wiki.umisoft.ru/UmiDump:_Export
http://wiki.umisoft.ru/UmiDump:_Import


32
а зачем обнулять корзину? нельзя просто создать заказ, назначить ему товар и пользователя?
Ну, создать новый заказ, это конечно вариант, но по факту старый заказ будет "брошенным" и будет висеть в базу.
Те, кто давно юзают UMI, думаю, помнят, сколько анальных мучений преподносила распухшая база из-за механизма работы, в котором замешаны заказы, наименования товара в заказе, незарегистрированные покупатели и т.п.

33
Шаблоны XSLT / Re: Своя форма отправки заявки
« : 29 Февраля 2016, 15:51:33 »
Что-то я в целом задачу понял - "кастомизировать" (в терминах документации UMI.CMS) форму - а вот остальное описание не понял.

Предположим, что нам нужно кастомизировать форму, вызываемую в XSLT шаблоне таким образом:

<xsl:apply-templates select="document('udata://webforms/add/138')/udata"/>

1. Находим в коде шаблона, где у нас описывается шаблон для webforms::add.

Как правило, это .../xslt/modules/webforms/add.xsl в стандартных шаблонах.
Если что - в стандартных шаблонах файло .../xslt/modules/webforms/add_popup.xsl как правило не подключается. Можно убедиться, зайдя в файло .../xslt/modules/webforms/common.xsl

2. Находим шаблон. Он будет приблизительно такой

<xsl:template match="udata[@module = 'webforms'][@method = 'add']">
<form method="post" action="{$lang-prefix}/webforms/send/" onsubmit="site.forms.data.save(this); return site.forms.errors.check(this);" enctype="multipart/form-data">
<xsl:apply-templates select="items" mode="address" />
<xsl:apply-templates select="groups/group" mode="webforms" />
<input type="hidden" name="system_form_id" value="{/udata/@form_id}" />
<input type="hidden" name="ref_onsuccess" value="{$lang-prefix}/webforms/posted/{/udata/@form_id}/" />
<div class="form_element">
<xsl:apply-templates select="document('udata://system/captcha/')/udata" />
</div>
<div class="form_element">
<input type="submit" class="button" value="Отправить" />
</div>
</form>
</xsl:template>

Копируем этот код, добавляем mode="myForm"
<xsl:template match="udata[@module = 'webforms'][@method = 'add']" mode="myForm"> .....</xsl:template>
И добавляем в "точку вызова" - <xsl:apply-templates select="document('udata://webforms/add/138')/udata" mode="myForm"/>

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

P.S. если в админке написать %webforms add(138)% и вывести этот код, то будет использован TPL шаблон, а не XSLT, поэтому рекомендую сначала определиться "с точкой входа" - где именно вызывается вывод формы и что именно нужно кастомизировать.

34
Для понимания нужен некоторый навык в XSLT.


Вывод метода меняем на следующее:
<xsl:value-of select="document(concat('udata://custom/counter/',page/@id))/udata" />
Если не заработало, то дорабатываем метод:

public function counter($current_page_id = false) {
    $current_page_id = $current_page_id ? $current_page_id : cmsController::getInstance()->getCurrentElementId();
    $hierarchy = umiHierarchy::getInstance();
    $element=$hierarchy->getElement($current_page_id);
    if($element){
        $temp_count=$element->getValue("kolichestvo_prosmotrov");
        ++$temp_count;
        $element->setValue("kolichestvo_prosmotrov",$temp_count);
        $element->commit();
        return $element->getValue("kolichestvo_prosmotrov");
    }else{
        return "Страница не найдена";   
    }
}

Если вывело "Страница не найдена", то меняем вывод на <xsl:value-of select="document('udata://custom/counter/')/udata" />



35
Да, правильно.

36
Значит Вы не правильно передаёте идентификатор страницы.
Есть два варианта:
1. Разобраться, как передать текущей идентификатор страницы в метод
2. Заменить метод на тот, что я дал в предыдущем сообщение (естественно, в нём нужно заменить название поля "kolichestvo_prosmotrov" на своё)

37
Значит не правильно передаётся идентификатор страницы.

Напишите |<xsl:value-of select="page/@id"/>| и посмотрите, что будет на странице - скорее всего будут пустые скобки.


Можно попробовать слегка доработать предлагаемый в документации код:
1. теперь не нужно передавать идентификатор страницы
2. не будет ошибки, если вдруг не удастся получить идентификатор страницы

public function counter($current_page_id = false) {
    $current_page_id = $current_page_id ? $current_page_id : cmsController::getInstance()->getCurrentElementId();
    $hierarchy = umiHierarchy::getInstance();
    $element=$hierarchy->getElement($current_page_id);
    if($element){
        $temp_count=$element->getValue("kolichestvo_prosmotrov");
        ++$temp_count;
        $element->setValue("kolichestvo_prosmotrov",$temp_count);
        $element->commit();
        return $element->getValue("kolichestvo_prosmotrov");
    }       
}

38
<xsl:apply-templates select="document(concat('udata://custom/counter/',page/@id))/udata" />
Попробуйте так.

39
"Заказ в один клик" - это оформление заказа в один клик. Внутри заказа может быть как любое количество товаров, так и любое количество по каждой позиции.
Получается, что Вам нужно что-то вроде "покупки заказа в 1 клик", грубо говоря.
Я что-то подобное делал. Просто обнулял корзину пользователя И оставлял/добавлял только тот товар, который покупается в один клик, в количестве 1 шт.

40
Да не, вроде не косяк.
Сколько раз я что-то подобное делал или копался в чужом коде - всё, что касается интернет-магазина, делалось внутри класса emarket (в терминах umi.cms - внутри модуля emarket).
Реализую подобного функционала внутри класса umiObjectProperty не встречал, но не отрицаю, что это возможно.

41
Логичное предположение. Советую расставить какие-нибудь метки (var_dump(); отлично подходит) и убедиться в этом.

42
Чисто теория:
Когда вызывается refresh() для экземпляра класса ORDER, т.е. для корзины, то и вызывается refresh() для OrderItem (товар в корзине).
Внутри OrderItem::Refresh() вызывается метод OrderItem::getItemPrice(), возвращающий стоимость товара. Вероятнее всего, туда Вы и встраивали проверку стоимости от региона.

То есть в идеале после смены региона достаточно вызвать refresh() для корзины и цены пересчитаются.

43
Шаблоны XSLT / Re:Шаблон для модуля на XSLT
« : 20 Марта 2014, 20:56:19 »
Объясните, в чём именно заключается Ваш вопрос:
Вы заходите на страницу, тип данных которой "лента новостей", а лента новостей автоматически не выводится ?

В описываемой Вами структуре (..есть разделы..) есть ЛЕНТЫ и НОВОСТИ. Там должно быть чуть посложнее кодэ, что бы выводилась именно такая структура.

Мне кажется, что-то намудрено с шаблонами, судя по  <xsl:param name="page_id" select="'6'" />

Опишите более подробно, что хотите сделать и проверьте, может быть создаётся пустой <div class="news_lents"..../>
p.s. ну и давненько же я не заходил сюда

44
Подскажите, пожалуйста, к какому модулю относится event point core_sendmail?
Это не к модулю относится, а к классу umiMail. /classes/system/entities/umiMail/umiMail.php

Цитировать
И в каком разделе /modules/ должен находится обработчик?
Обработчик может находится в любом разделе, надо лишь правильно прописать для него точку вызова.
Возможно, есть трудность с тем, что у обычных модулей есть events.php, а у umiMail какбэ нет. С чем-то подобным я стакливался и если не ошибаюсь, то я дописывал в classes/modules/events/events.php или custom_events.php
Описание приблизительно такое:

new umiEventListener("core_sendmail", "content", "checkMyMail");
Соответственно в модуле content должен быть метод checkMyMail.


Цитировать
Можно ли получить доступ к структурированным данным формы в обработчике события отправки формы (webforms_post)?
Не совсем понял про структурированные данные, что именно имеется в виду.
Значения полней при отправке-приёмке формы можно получить через $_REQUEST, а после через uobject..

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

Страницы: 1 2 [3] 4 5 ... 13