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

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

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


Сообщения - rellai

Страницы: 1 2 3 [4]
46
Шаблоны XSLT / Re:Выгрузка в YML
« : 28 Апреля 2014, 15:23:39 »
Код пробовал
Результат 1 в 1 - ошибка
выгрузку попробую чуть позже сделать

47
Шаблоны XSLT / Re:Выгрузка в YML
« : 28 Апреля 2014, 12:19:57 »
не помгло  :(

вот листинг полностью если что
<?xml version="1.0" encoding="UTF-8"?>
<!--
TODO: // Write here your own templates
-->

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:php="http://php.net/xsl"
xmlns:udt="http://umi-cms.ru/2007/UData/templates"
extension-element-prefixes="php"
exclude-result-prefixes="xsl php udt">



<xsl:template match="page[basetype/@method = 'object']">
<xsl:param name="price" select="document(concat('udata://emarket/price/', @id, '/0/0'))/udata/price/actual" />
<xsl:if test="$price &gt; 0">
<offer id="{@id}">
<xsl:choose>
<xsl:when test=".//property[@name = $vendor]/value != '' and .//property[@name = $model]/value != ''">
<xsl:attribute name="type">vendor.model</xsl:attribute>
</xsl:when>
<xsl:when test=".//property[@name = $isbn]/value != ''">
<xsl:attribute name="type">book</xsl:attribute>
</xsl:when>
<xsl:when test=".//property[@name = $title]/value != ''">
<xsl:attribute name="type">artist.title</xsl:attribute>
</xsl:when>
<xsl:when test=".//property[@name = $place]/value != ''">
<xsl:attribute name="type">event-ticket</xsl:attribute>
</xsl:when>
<xsl:when test=".//property[@name = $transport]/value != ''">
<xsl:attribute name="type">tour</xsl:attribute>
</xsl:when>
</xsl:choose>
<xsl:attribute name="available">
<xsl:choose>
<xsl:when test=".//property[@name = 'common_quantity']/value &gt; 0"><xsl:text>true</xsl:text></xsl:when>
<xsl:otherwise><xsl:text>false</xsl:text></xsl:otherwise>
</xsl:choose>
</xsl:attribute>
<url><xsl:value-of select="concat('http://', /umidump/meta/domain, @link)" /></url>
<price><xsl:value-of select="$price"/></price>
<currencyId>
<xsl:choose>
<xsl:when test="string-length($default-currency)"><xsl:value-of select="$default-currency" /></xsl:when>
<xsl:otherwise>RUR</xsl:otherwise>
</xsl:choose>
</currencyId>
<categoryId><xsl:value-of select="@parentId"/></categoryId>
<xsl:if test=".//property[@name = 'photo']/value != ''">
<picture>
<xsl:value-of select="concat('http://', /umidump/meta/domain, .//property[@name = 'photo']/value)"/>
</picture>
</xsl:if>
<!--
<delivery>!!!delivery(true|false)!!!</delivery>
-->
<xsl:choose>
<!-- vendor.model -->
<xsl:when test="(.//property[@name = $vendor]/value != '') and (.//property[@name = $model]/value != '')">
<xsl:if test=".//property[@name = $typePrefix]/value != ''">
<typePrefix><xsl:value-of select=".//property[@name = $typePrefix]/value"/></typePrefix>
</xsl:if>
<vendor><xsl:value-of select=".//property[@name = $vendor]/value"/></vendor>
<model><xsl:value-of select=".//property[@name = $model]/value"/></model>
</xsl:when>
<!-- book -->
<xsl:when test=".//property[@name = $isbn]/value != ''">
<xsl:if test=".//property[@name = $author]/value != ''">
<author><xsl:value-of select=".//property[@name = $author]/value"/></author>
</xsl:if>
<name><xsl:value-of select="name"/></name>
<xsl:if test=".//property[@name = $publisher]/value != ''">
<publisher><xsl:value-of select=".//property[@name = $publisher]/value"/></publisher>
</xsl:if>
<xsl:if test=".//property[@name = $series]/value != ''">
<series><xsl:value-of select=".//property[@name = $series]/value"/></series>
</xsl:if>
<xsl:if test=".//property[@name = $year]/value != ''">
<year><xsl:value-of select=".//property[@name = $year]/value"/></year>
</xsl:if>
<xsl:if test=".//property[@name = $isbn]/value != ''">
<ISBN><xsl:value-of select=".//property[@name = $isbn]/value"/></ISBN>
</xsl:if>
</xsl:when>
<!-- artist.title -->
<xsl:when test=".//property[@name = $title]/value != ''">
<xsl:if test=".//property[@name = $artist]/value != ''">
<artist><xsl:value-of select=".//property[@name = $artist]/value"/></artist>
</xsl:if>
<title><xsl:value-of select=".//property[@name = $title]/value"/></title>
<xsl:if test=".//property[@name = $year]/value != ''">
<year><xsl:value-of select=".//property[@name = $year]/value"/></year>
</xsl:if>
<xsl:if test=".//property[@name = $media]/value != ''">
<media><xsl:value-of select=".//property[@name = $media]/value"/></media>
</xsl:if>
<xsl:if test=".//property[@name = $starring]/value != ''">
<starring><xsl:value-of select=".//property[@name = $starring]/value"/></starring>
</xsl:if>
<xsl:if test=".//property[@name = $director]/value != ''">
<director><xsl:value-of select=".//property[@name = $director]/value"/></director>
</xsl:if>
<xsl:if test=".//property[@name = $originalName]/value != ''">
<originalName><xsl:value-of select=".//property[@name = $originalName]/value"/></originalName>
</xsl:if>
<xsl:if test=".//property[@name = $country]/value != ''">
<country><xsl:value-of select=".//property[@name = $country]/value"/></country>
</xsl:if>
</xsl:when>
<!-- event-ticket -->
<xsl:when test=".//property[@name = $place]/value != ''">
<name><xsl:value-of select="name"/></name>
<place><xsl:value-of select=".//property[@name = $place]/value"/></place>
<xsl:if test="(.//property[@name = $hall]/value != '') and (.//property[@name = $hall-plan]/value != '')">
<hall plan="{.//property[@name = $hall-plan]/value}"><xsl:value-of select=".//property[@name = $hall]/value"/></hall>
</xsl:if>
<xsl:if test=".//property[@name = $hall_part]/value != ''">
<hall_part><xsl:value-of select=".//property[@name = $hall_part]/value"/></hall_part>
</xsl:if>
<xsl:if test=".//property[@name = $date]/value != ''">
<date><xsl:value-of select=".//property[@name = $date]/value"/></date>
</xsl:if>
<xsl:if test=".//property[@name = $is_premiere]/value != ''">
<is_premiere><xsl:value-of select=".//property[@name = $is_premiere]/value"/></is_premiere>
</xsl:if>
<xsl:if test=".//property[@name = $is_kids]/value != ''">
<is_kids><xsl:value-of select=".//property[@name = $is_kids]/value"/></is_kids>
</xsl:if>
</xsl:when>
<!-- tour -->
<xsl:when test=".//property[@name = $transport]/value != ''">
<xsl:if test=".//property[@name = $worldRegion]/value != ''">
<worldRegion><xsl:value-of select=".//property[@name = $worldRegion]/value"/></worldRegion>
</xsl:if>
<xsl:if test=".//property[@name = $country]/value != ''">
<country><xsl:value-of select=".//property[@name = $country]/value"/></country>
</xsl:if>
<xsl:if test=".//property[@name = $region]/value != ''">
<region><xsl:value-of select=".//property[@name = $region]/value"/></region>
</xsl:if>
<xsl:if test=".//property[@name = $days]/value != ''">
<days><xsl:value-of select=".//property[@name = $days]/value"/></days>
</xsl:if>
<xsl:if test=".//property[@name = $dataTour]/value != ''">
<dataTour><xsl:value-of select=".//property[@name = $dataTour]/value"/></dataTour>
</xsl:if>
<name><xsl:value-of select="name"/></name>
<xsl:if test=".//property[@name = $hotel_stars]/value != ''">
<hotel_stars><xsl:value-of select=".//property[@name = $hotel_stars]/value"/></hotel_stars>
</xsl:if>
<xsl:if test=".//property[@name = $room]/value != ''">
<room><xsl:value-of select=".//property[@name = $room]/value"/></room>
</xsl:if>
<xsl:if test=".//property[@name = $meal]/value != ''">
<meal><xsl:value-of select=".//property[@name = $meal]/value"/></meal>
</xsl:if>
<xsl:if test=".//property[@name = $included]/value != ''">
<included><xsl:value-of select=".//property[@name = $included]/value"/></included>
</xsl:if>
<xsl:if test=".//property[@name = $transport]/value != ''">
<transport><xsl:value-of select=".//property[@name = $transport]/value"/></transport>
</xsl:if>
<xsl:if test=".//property[@name = 'price_min']/value != ''">
<price_min><xsl:value-of select=".//property[@name = 'price_min']/value"/></price_min>
</xsl:if>
<xsl:if test=".//property[@name = 'price_max']/value != ''">
<price_max><xsl:value-of select=".//property[@name = 'price_max']/value"/></price_max>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<name><xsl:value-of select="name"/></name>
</xsl:otherwise>
</xsl:choose>
<xsl:if test=".//property[@name = 'description']/value != ''">
<description><xsl:value-of select=".//property[@name = 'description']/value"/></description>
</xsl:if>
<xsl:if test=".//property[@name = 'bar_code']/value != '' and string-length(.//property[@name = 'bar_code']/value) &lt; 13">
<barcode><xsl:value-of select=".//property[@name = 'bar_code']/value"/></barcode>
</xsl:if>
<xsl:variable name="type_id" select="@type-id" />
<xsl:variable name="page_id" select="@id" />
<xsl:apply-templates select="../../types/type[@id = $type_id]" mode="filterable">
<xsl:with-param name="page_id" select="$page_id" />
</xsl:apply-templates>
</offer>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

48
Шаблоны XSLT / Выгрузка в YML
« : 28 Апреля 2014, 11:30:33 »
Необходимо выгрузить из юми в YML данные о товаре с учетом скиди
(по умолчанию выгружается без скидки)

открыл статью
http://wiki.umisoft.ru/Настройка_экспорта_в_YML_(Яндекс-маркет)
и начал делать по ней.
1)скопировал вот этот шаблон в /custom/YML.xsl
<xsl:template match="page[basetype/@method = 'object']">
</xsl:template>
в раздел
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:php="http://php.net/xsl"
xmlns:udt="http://umi-cms.ru/2007/UData/templates"
extension-element-prefixes="php"
exclude-result-prefixes="xsl php udt">
Проверил. выгрузка работает

Далее заменил вот это
<xsl:param name="price" select="number(.//property[@name = 'price']/value)" />
вот на это
<xsl:param name="price" select="document(concat('udata://emarket/price/', @id, '/0/0'))/udata/price/actual" />

Нажимаю кнопку подготовить к экспорту
и  вылезает ошибка


при этом когда в вызываю в каталоге с товаром вот эту строку
<xsl:value-of select="document(concat('udata://emarket/price/', @id))/udata/price/actual" />
то цена отображается правильно(с учетом скидки)

49
Спасибо огромное!!!
Все заработало!!!

50
Если что вот вывод формы
<form enctype="multipart/form-data" method="post" action="/users/custom_adress_do/" role="form">
                        <div xmlns="" class="form-group70 form-group required">
                          <label for="field70">Город:</label>
                          <input type="text" name="data[854][city]" id="field70" placeholder="" class="form-control" value="4">
                        </div>
                        <div xmlns="" class="form-group71 form-group required">
                          <label for="field71">Улица:</label>
                          <input type="text" name="data[854][street]" id="field71" placeholder="" class="form-control" value="5">
                        </div>
                        <div xmlns="" class="form-group72 form-group required">
                          <label for="field72">Дом:</label>
                          <input type="text" name="data[854][house]" id="field72" placeholder="" class="form-control" value="6">
                        </div>
                        <div xmlns="" class="form-group73 form-group ">
                          <label for="field73">Квартира:</label>
                          <input type="text" name="data[854][flat]" id="field73" placeholder="" class="form-control" value="7">
                        </div>
                        <div xmlns="" class="form-group433 form-group ">
                          <label for="field433">Корпус:</label>
                          <input type="text" name="data[854][korpus]" id="field433" placeholder="" class="form-control">
                        </div>
                        <div xmlns="" class="form-group434 form-group ">
                          <label for="field434">Телефон:</label>
                          <input type="text" name="data[854][telefon]" id="field434" placeholder="" class="form-control">
                        </div>
                        <button type="submit" class="btn btn-default pull-right">Сохранить</button>
                      </form>

51
Спасибо!
Белый экран не появляется
но данные не сохраняет и вылетает вот такая ошибка
Error load object #0

ну собственно это сам обработчик говорит:
 if(!$object instanceof umiObject){
                throw new publicException("Error load object #{$objectId}");
            }

52
Спасибо за информацию!
Написал такой шаблон:
<ul style="overflow: hidden; list-style: none;">
                <xsl:for-each select="$user//properties/group[@name='more_info']/property[@name='delivery_addresses']/value/item">
                  <li  style="overflow: hidden; overflow: hidden; border: 1px solid silver; padding: 0px 20px 20px; margin-bottom: 20px;">
                  <h5><xsl:value-of select="document(concat('uobject://',@id))/udata/object/properties/group/property[@name='street']" /></h5>
                  <form enctype="multipart/form-data" method="post" action="/users/custom_adress_do/" role="form">
                    <xsl:apply-templates select="document(concat('udata://data/getEditForm/',@id))/udata" />
                    <button type="submit" class="btn btn-default pull-right">&save;</button>
                  </form>
                  </li>
                </xsl:for-each>
              </ul>
форма создалась.
Все отлично.
теперь не понимаю что мне надо дописать чтобы данные сохранялись?
Создал макрос custom_adress_do.
А дальше не знаю что писать :(


Данные получаю вот эти:
<udata xmlns:xlink="http://www.w3.org/TR/xlink" module="data" method="getEditForm" generation-time="0.009451">
<group name="common" title="Основное">
<field name="country" title="Страна" field_id="67" input_name="data[854][country]" type="string" id="67" required="required">1</field>
<field name="index" title="Почтовый индекс" field_id="68" input_name="data[854][index]" type="int" id="68" required="required">2</field>
<field name="region" title="Регион" field_id="69" input_name="data[854][region]" type="string" id="69">3</field>
<field name="city" title="Город" field_id="70" input_name="data[854][city]" type="string" id="70" required="required">4</field>
<field name="street" title="Улица" field_id="71" input_name="data[854][street]" type="string" id="71" required="required">5</field>
<field name="house" title="Дом" field_id="72" input_name="data[854][house]" type="string" id="72" required="required">6</field>
<field name="flat" title="Квартира" field_id="73" input_name="data[854][flat]" type="string" id="73">7</field>
</group>
</udata>


Нашел пример на дурака сделал так

 public function custom_adress_do($template = "default") {
      $objectsCollection = umiObjectsCollection::getInstance();
$cmsController = cmsController::getInstance();
 
$object_id = (int) getRequest('param0');
if(!permissionsCollection::getInstance()->isOwnerOfObject($object_id)) {
return "%data_edit_foregin_object%";
}
$object = $objectsCollection->getObject($object_id);
$data_module = $cmsController->getModule('data');
$data_module->saveEditedObject($object_id);
$object->commit();
       $url = getRequest("from_page");
if (!$url) {
$url = ($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : $this->pre_lang . "/users/settings/";
}

$this->redirect($url);
      
      
}

выдает пустой экран. если закоментировать эту строку то все ок:
   $object->commit();

53
Как добавить вывод информации и  редактирование информации в профиль
А именно редактирование адресов доставки?

Не нашел совсем информации :(

54
ОК спасибо большое :)
С вашими ответами ясность чуть-чуть начала приходить :)))

55
А еще вопрос хотел бы задать :))
а как мне перебрать все эти элементы
ну в цикле как бы?

56
Здорово! спасибо!
получил вот такой код
<xsl:variable name="discountId" select="document(concat('udata://emarket/price/',page/@id))/udata/discount/@id" />
<xsl:value-of select="document(concat('uobject://',$discountId,'.discount_rules_id'))/udata/property/value/item/@id" /> 
но в /udata/property/value/
находится 2 item
мне нужно получить тот который с name='dataRange'
а он выводит первый

все разобрался :))
<xsl:value-of select="document(concat('uobject://',$discountId,'.discount_rules_id'))/udata/property/value/item[@name='dateRange']/@id" />  

57
Спасибо за подсказку
<xsl:value-of select="document(concat('udata://emarket/price/',page/@id))" />   
   
сделал вот так а он выводит только цену....
без скидки и со скидкой для разных валют

Цитировать
.........
    18000
    14400
..........
 

58
Собственно как вывести информацию в карточке товара.
например название или срок действия скидки?

Нашел как вывести дату окончания скидки непосредственно
<xsl:value-of select="document('uobject://834.end_date')//value" />

но как узнать ид скидки, которая применена?

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