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

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

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


Сообщения - Babajka

Страницы: [1] 2 3
1
Шаблоны XSLT / Re:Position в выборке
« : 22 Мая 2013, 14:31:26 »
e.ioffe
Именно на этот пример, он выругался на "umiTemplaterXSLT.php on line 50". И не выдал мне меню. Вот.
Но для моего понимания код оказался, как то замудрен, по этому мыслей по его "доработке" не нашел.

2
Шаблоны XSLT / Re:Position в выборке
« : 21 Мая 2013, 17:22:25 »
e.ioffe
У меня не держит extProps. Так что не подходит.

admin
Через usel она изначально была сделана, пытался отойти от этого. Но судя по всему придется обратно вернуться.
Но за варианты еще буду благодарен. )

3
Шаблоны XSLT / Re:Position в выборке
« : 21 Мая 2013, 12:12:38 »
e.ioffe
Ничего более здравого не придумал, в прменении твоего примера. Хотя сам понимаю, что код бредовый.
Кто нибудь может подсказать, что именно не так и как сделать чтобы было так?
 	<xsl:template match="udata[@method = 'menu']" mode="bottom_menu">
<ul >
<xsl:apply-templates select="items/item" mode="bottom_menu" />
</ul>
</xsl:template>

<xsl:template match="item" mode="bottom_menu">
<xsl:variable name="test" select="document(concat('upage://',@id, '.bottom_menu'))/udata/property/value" />
<xsl:if test="$test !=0">
<xsl:apply-templates select="." mode="additional-class" />
</xsl:if>
</xsl:template>

<xsl:template macth="item" mode="additional-class" >
<li>
<a href="{@link}" ><xsl:value-of select="." /></a>
</li>
</xsl:template>

<xsl:template macth="item[first()]" mode="additional-class">
<li>
<xsl:attribute name="class">first</xsl:attribute>
<a href="{@link}" ><xsl:value-of select="." /></a>
</li>
</xsl:template>

4
Шаблоны XSLT / Re:Position в выборке
« : 08 Апреля 2013, 16:27:26 »
шаблон вроде верный, а вы проверяли срабатывает ли у вас параметр ?extProps. то есть пробовали посмотреть через <xsl:copy-of select="document('udata://content/menu/?extProps=robots_deny')" mode="new_menu" /> выводит ли система доп поля?
Все выяснил, версия не дотягивает.

Из размышлений
<xsl:apply-templates select="items/item[not(//property[@name='bottom_menu']/value=0)]" mode="bottom_menu" />
У bottom_menu нет значения 0. Если он вообще присутствует то value=1, при отсутствии самого property нет.

5
Шаблоны XSLT / Re:Position в выборке
« : 05 Апреля 2013, 17:49:01 »
Если я ничего не "навертел" в коде
	<xsl:template match="udata[@method = 'menu']" mode="bottom_menu">
<ul umi:element-id="0" umi:module="content" umi:region="list" umi:sortable="sortable" umi:add-method="popup">
<xsl:apply-templates select="items/item[.//property[@name='bottom_menu']/value=1]" mode="bottom_menu" />
</ul>
</xsl:template>

<xsl:template match="item" mode="bottom_menu">
<li>
<xsl:if test="position() = 1">
<xsl:attribute name="class">first</xsl:attribute>
</xsl:if>
<a href="{@link}" >
<xsl:value-of select="." />
</a>
</li>
</xsl:template>
то у меня непобедимый сайт. Все равно не выводит.

6
Шаблоны XSLT / Re:Position в выборке
« : 03 Апреля 2013, 14:44:22 »
niakriss
Попробовал ваш пример. Не вышло, выводит просто основное меню и ничего больше.
И еще вопрос
<xsl:apply-templates select="items/item[not(//property[@name='bottom_menu']/value=0)]" mode="bottom_menu" />
Чем нибудь отличается от
<xsl:apply-templates select="items/item[(//property[@name='bottom_menu']/value=1)]" mode="bottom_menu" />
?

7
Шаблоны XSLT / Re:Position в выборке
« : 21 Марта 2013, 09:52:13 »
Воспользовался я первым вариантом. Но, результат оказался непредсказуемый. Класс first присвоился, но меню вывелось просто 6 первых меню. Т.е. даже не обращая внимания на флажок bottom_menu или top_menu.

8
Шаблоны XSLT / Position в выборке
« : 20 Марта 2013, 11:48:29 »
Здравсвуйте. На сайте находится несколько меню.
Распределение их происходит с помощью выборки из content menu определенных пунктов меню с метками, в этом случае bottom_menu.
Мне необходимо первому тэгу li присвоить класс first.
Но он не присваевается.
Собственно код:

<xsl:apply-templates select="document('udata://content/menu/')/udata" mode="bottom_menu"/>
<xsl:template match="udata[@method = 'menu']" mode="bottom_menu">
<ul >
<xsl:apply-templates select="items/item" mode="bottom_menu" />
</ul>
</xsl:template>

<xsl:template match="item" mode="bottom_menu">
<xsl:variable name="test" select="document(concat('upage://',@id, '.bottom_menu'))/udata/property/value" />
<xsl:if test="$test !=0">
<li>
<xsl:if test="position() = 1"><!-- тут и закрывается ошибка -->
<xsl:attribute name="class">first</xsl:attribute>
</xsl:if>
<a href="{@link}" >
<xsl:value-of select="." />
</a>
</li>
</xsl:if>
</xsl:template>

Собстенно, если заменить position()=1 на 6(т.к. это 6 пункт меню в админке). То все работает. Но это временная мера.
И сам вопрос: Как это сделать более красиво, что ли. Что бы, если в будущем добавлю еще пунктов меню, не расползлось все.

9
Доброго времени суток.
Возникла проблема с фотогалереей. Пытаюсь отобразить по 2 фотографии в строке. Службу заботы пытаю уже день четвертый, надеюсь на вашу помощь.
В albums.xsl содержится:
<xsl:template match="result[@module = 'photoalbum'][@method = 'album']">
<xsl:apply-templates select="document(concat('udata://photoalbum/album/',$document-page-id))/udata" />
</xsl:template>

<xsl:template match="udata[@module = 'photoalbum'][@method = 'album']" />

<xsl:template match="udata[@module = 'photoalbum'][@method = 'album'][total]">
<div class="photos">
<xsl:apply-templates select="items/item" mode="photo_list" />
<div class="clear" />
</div>
<xsl:apply-templates select="total" />
</xsl:template>

<xsl:template match="item" mode="photo_list">
<div class="line_photo">
<div class="item">
<xsl:apply-templates select="document(concat('upage://',@id))/udata/page[position() mod 2 != 0]" mode="photo_list" />
</div>
<div class="item">
<xsl:apply-templates select="document(concat('upage://',@id))/udata/page[position() mod 2 = 0]" mode="photo_list" />
</div>
</div>
</xsl:template>

<xsl:template match="page" mode="photo_list">
<div class="media">
<a href="{@link}" umi:element-id="{@id}" umi:field-name="photo">
<xsl:call-template name="catalog-thumbnail">
<xsl:with-param name="element-id" select="@id" />
<xsl:with-param name="field-name">photo</xsl:with-param>
<xsl:with-param name="empty">&empty-photo;</xsl:with-param>
<xsl:with-param name="width">180</xsl:with-param>
<xsl:with-param name="height">135</xsl:with-param>
</xsl:call-template>
</a>
</div>
<div class="description">
<h3 umi:element-id="{@id}" umi:field-name="h1">
<xsl:value-of select="//property[@name = 'h1']/value" />
</h3>
<xsl:value-of select="//property[@name = 'descr']/value" disable-output-escaping="yes" />
<a href="{@link}" >&more;</a>
</div>
<div class="clear" />
</xsl:template>

Но выводит по 1 "фото+описание" в строке. Вывод кода прямиком из Fire Fox.
<div class="line_photo">
<div class="item">
<div class="media"><a href="/photo/arochnaya_teplica_fermerskaya_1/" umi:element-id="28" umi:field-name="photo"><img src="/images/cms/thumbs/80daed57299900699b31a66148d75e1693555ca7/1_180_135_5_80.jpg" width="180" height="135" umi:element-id="28" umi:field-name="photo" umi:empty="/images/design/nofoto.jpg"></a></div>
<div class="description">
<h3 href="/photo/arochnaya_teplica_fermerskaya_1/" umi:element-id="28" umi:field-name="h1">Арочная теплица ФЕРМЕРСКАЯ 1</h3><p><strong>Категория:</strong> арочные теплицы Solidprof<br /> <strong>Тип каркаса:</strong> сборный алюминиевый<br /> <strong>Материал каркаса:</strong> алюмин.проф.труба</p><a href="/photo/arochnaya_teplica_fermerskaya_1/">Подробнее</a>
</div>
<div class="clear"></div>
</div>
<div class="item"></div><!-- !!! -->
</div>
Строка помеченая !!! это строка:
<xsl:apply-templates select="document(concat('upage://',@id))/udata/page[position() mod 2 = 0]" mode="photo_list" />. 
Следовательно условие [position() mod 2 = 0] невыводит ничего.
Если вместо этого условия поставить:
- page[position() = last()] то он выводит все те же фото+описание что и условие page[position() mod 2 != 0].
- page[position() = first()] он выдает ошибки и не выдает шаблон photoalbum вообще.
Следовательно, по моему мнению, оно хватает некое булево значение. И выводит фото+описание при 1 и не выводит при 0.

Но как можно сделать что бы выводилось по 2 блока <div class="item"> в строке?

10
Шаблоны XSLT / Шаблон выборки из каталога
« : 25 Декабря 2012, 16:16:20 »
Есть каталог с 4 "разделами каталога", в этих еще "разделы каталога" и в них "объекты каталога"
На сайте создано отоброжение определенных "объектов каталога" на главной, по определенной "системе".

<xsl:template match="result[page/@is-default]" priority="1">
<xsl:apply-templates select="document(concat('upage://',$settings-id,'.index_catalog'))/udata/property" mode="index-catalog" priority="1" />
</xsl:template>

<xsl:template match="property[@name = 'index_catalog']" mode="index-catalog" priority="1">
<xsl:variable name="cat_id" select="value/page[1]/@id" />
<xsl:apply-templates select="document(concat('udata://catalog/getObjectsList//',$cat_id,'///2'))" />
</xsl:template>

Мне нужно вывести другие "объекты каталога" на другой странице. Но не таким же способом. В данном случае id страницы - 229, выборка производится по присутствию id="347". Но в дальнейшей разработке данного "шаблона" я затрудняюсь.

<xsl:template match="result[page/@id = '229']" priority="1">
<xsl:apply-templates select="document(concat('upage://',$settings-id,'.index_catalog'))/udata/property" mode="index-litecatalog" priority="1" />
</xsl:template>

<xsl:template match="property[@id = '347']" mode="index-litecatalog" priority="1">
<xsl:variable name="lite_id" select="value/page[1]/@id" />
<xsl:apply-templates select="document(concat('udata://catalog/getObjectsList//',$lite_id,'///2'))"  priority="1" />
</xsl:template>

Кто нибудь может рассказать в каком направлении хотя бы двигаться?

11
Нашел более, как мне кажется, легкий способ. http://prostoufa.ru/forma-obratnoj-svyazi-na-umi-start/#comment-322
Содержание темы:
Так как в редакции start системы управления umicms нет модуля обратная связь, то пришлось написать свой обработчик форм. Правда он без конструктора форм, но для простой обратной связи на сайте вполне сгодиться.

Вот код обработчика формы, который я по привычке помещаю в кастомный файл модуля users: /classes/modules/users/__custom.php. Так же не забываем добавить функцию в файл permissions.php, лежащий поблизости в той же папке. Я добавил функцию в ветку «login».

public function send_form()
{
//список полей формы
$item1 = (string) getRequest('item1');
$item2 = (string) getRequest('item2');
$item3 = (string) getRequest('item3');
$item4 = (string) getRequest('item4');
$item5 = (string) getRequest('item5');
$item6 = (string) getRequest('item6');
$item7 = (string) getRequest('item7');
$item8 = (string) getRequest('item8');
 
//массив обязательный полей и сообщений о пустом значении соответствующих полей
$test = array(
'Заполните поле 2' => $item2,
'Заполните поле 2' => $item3
);
$error = false;
foreach ($test as $name_field => $value) {
if (empty($value)) {
$this->errorNewMessage('Необходимо заполнить все поля',false);
 
$error = true;
}
} //проверка заполненности обязательных полей
if ($error) {
$this->errorPanic(); //вывод ошибки
}
 
//формирование тела письма
$mailContent = 'Поле 1: '.$item1.'<br>';
$mailContent .= 'Поле 2: '.$item2.'<br>';
$mailContent .= 'Поле 3: '.$item3.'<br>';
$mailContent .= 'Поле 4: '.$item4.'<br>';
$mailContent .= 'Поле 5: '.$item5.'<br>';
$mailContent .= 'Поле 6: '.$item6.'<br>';
$mailContent .= 'Поле 7: '.$item7.'<br>';
$mailContent .= 'Поле 8: '.$item8.'<br>';
 
$mail = new umiMail;
$email_from = regedit::getInstance()->getVal("//settings/email_from"); //берём адрес электронной почты и имя адресата из вкладки «почта» модуля «конфигурация».
$mail->addRecipient($email_from);
$mail->setFrom($item2, $item1); //$item2 - email отправителя, $item1 - имя
$mail->setSubject('Пользователь заполнил форму на сайте "garto.ru"');
$mail->setPriorityLevel('highest');
$mail->setContent($mailContent);
$mail->commit();
$mail->send();
 
$this->redirect('/order/?result=success');//редирект при удаче
 
}

Вывод формы такой:

<form action="/users/send_form/" method="post" >
<label>Фамилия, имя, отчество:</label><br/>
<input type="text" name="item1" value=""/>

<label>E-mail или телефон для связи:</label><br/>
<input type="text" name="item2" value=""/>

<label>Текст сообщения:</label><br/>
<textarea name="item3" ></textarea>
<br/>
<input type="submit" name="item4" class="buttom" value="Отправить"/>
</form>

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

12
Сделал форму обратной связи, как в данной статье, предложенный Надеждой.
http://umi-cms.spb.su/forum/index.php?what=showtopic&theme=8
Но ничего не выходит, не отправляется. Это ясно что из-за того что она в tpl делает, а я пытаюсь в xslt.
Но как именно можно реализовать это в xslt?

13
Ммм... у меня подозрение, что вы меня не правильно поняли. Хотя, попробовал - не получилось.
У меня несколько лент новостей, каждая из которых имеет множество новостей. И в каждой из лент есть галочка "Боковое меню". Собственно она подобна галочке "отображать в меню". Так вот, каждый из заголовков "Лент новостей" мне нужно отобразить в дополнительном меню, опираясь на наличие этой самой галочки.
------------------------------------------------------------------------------------------
Нашел выход легче. На dev.docs.umi-cms.ru "Несколько меню на сайте"
Вывод "Ленты новостей". Но, тем не менее не выводится. Чувствую что делаю какую то глупую ошибку, но какую понять не могу.
Прописываю в layouts/default.xsl
<xsl:apply-templates select="document('udata://news/lastlents/(news)')/udata"/>
И в modules/content/menu.xsl
<xsl:template match="udata[@module = 'news'][@method = 'lastlents']">
  <ul>

  </ul>
</xsl:template>

14
У меня версия "Start". Пытаюсь создать боковое меню в которых выводятся заголовки лент новостей. Создал чекбоксы для лент, с идентификатором - "bokovoe_menu".

Вывожу вот этим куском кода:

<xsl:apply-templates select="document('udata://content/menu/(null)/1/')" mode="bokovoe_menu" />

В шаблон вставляю в вот этот код:

<xsl:template match="udata[@method = 'menu']" mode="bokovoe_menu">
<ul umi:element-id="0" umi:module="content" umi:region="list" umi:sortable="sortable" umi:add-method="popup">
<xsl:apply-templates select="items/item" mode="bokovoe_menu" />
</ul>
</xsl:template>

<xsl:template match="item" mode="bokovoe_menu">
<li>
<a href="{@link}" umi:element-id="{@id}" umi:region="row" umi:field-name="name" umi:empty="&empty-section-name;" umi:delete="delete">
<xsl:value-of select="." />
</a>
</li>
</xsl:template>

Но заместо вывода заголовков лент новостей, выводятся все те же что и в main_menu.

15
Пытаюсь сделать что бы в модуле блог, при условии что нет ни одного комментария, весь шаблон комментариев не выводился. Догадываюсь что дело в правильном прописывании when test="*******" но как и что именно не ясно.

<xsl:choose>
<xsl:when test="document(concat('udata://blogs20/commentsList/'))">
<xsl:apply-templates select="document(concat('udata://blogs20/commentsList/',$document-page-id,'/'))/udata" /><br />
</xsl:when>
</xsl:choose>

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