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

Автор johnРаздел Custom макросы

Ответов: 7
Просмотров: 4261
Последний ответ 30 Августа 2014, 22:11:55
от john
проверка наличия дочерних элементов списка

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

Ответов: 4
Просмотров: 3080
Последний ответ 07 Октября 2014, 09:19:38
от idu.kuru
Яндекс.Касса где происходить проверка платежей

Автор SumrakrndРаздел Настройка системы и модулей

Ответов: 8
Просмотров: 2482
Последний ответ 11 Августа 2016, 00:12:28
от aghigay
Проверка существования под-уровня меню

Автор johnРаздел Custom макросы

Ответов: 7
Просмотров: 4050
Последний ответ 29 Сентября 2012, 00:43:49
от john
Проверка на наличие товара в корзине

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

Ответов: 2
Просмотров: 1192
Последний ответ 08 Февраля 2016, 17:40:14
от sam

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

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Проверка по дням недели
« : 17 Декабря 2015, 17:50:50 »
Здравствуйте! Просьба подсказать - как в XSLT сделать проверку по дням недели? Например, в условиях доставки с понедельника по четверг вывести инфо. "доставка - завтра и позже", а вот с пятницы по воскресенье "доставка - вторник и позже".

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

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Re: Проверка по дням недели
« Ответ #1 : 18 Декабря 2015, 18:25:48 »
Я бы делал это не в xslt, а в кастомном методе.

Что-то вроде:

public function getDeliveryDate() {
 if(пятница - воскресенье) {
   return 'tuesday';
} else {
   return 'tomorrow';
}
}
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re: Проверка по дням недели
« Ответ #2 : 18 Декабря 2015, 18:36:09 »
Интересно. Т.е. в каком-то файле прописать подобный макрос, а потом в xslt сделать вызов этого макроса (getDeliveryDate())?

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

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Re: Проверка по дням недели
« Ответ #3 : 18 Декабря 2015, 18:49:48 »
Да, в файле custom.php Он не системный
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re: Проверка по дням недели
« Ответ #4 : 18 Декабря 2015, 19:38:07 »
В какой конкретной директиве этот custom.php?

Подойдет ли такой код?:
public function getDeliveryDate() {
  if (пятница, суббота, воскресенье) {
    return 'вторник и позже';
  } else {
    return 'завтра и позже';
  }
}
И последний связанный вопрос - откуда система поймет, что, например, сегодня "пятница, суббота или воскресенье"?
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Re: Проверка по дням недели
« Ответ #5 : 19 Декабря 2015, 13:59:30 »
В php есть функция date, которая при определенном параметре возвращает текущий день недели - http://php.net/manual/ru/function.date.php

Файл custom.php находится в папке /classes/modules/
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re: Проверка по дням недели
« Ответ #6 : 19 Декабря 2015, 23:46:00 »
Спасибо! Тут я все же вижу один минус - если обновить версию системы, данный custom.php тоже обновиться, и наш с вами макрос исчезнет. А если сделать это с помощью xslt, тогда нет, так как шаблоны при обновлении версий не меняются.

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

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Re: Проверка по дням недели
« Ответ #7 : 20 Декабря 2015, 00:06:05 »
При обновлении системы файл custom.php не обновляется.
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re: Проверка по дням недели
« Ответ #8 : 20 Декабря 2015, 20:04:21 »
1. Ясно. Переубедили. Просьба, пока не реализовывал еще, мой переделанный конечный вариант проверите?

public function getDeliveryDate() {
  if (friday) {
    return 'понедельник и позже';
  } else if (saturday, sunday) {
    return 'вторник и позже';
  } else {
    return 'завтра и позже';
  }
}
2. И если я правильно понял, код надо ставить после комментария "//TODO: Write your own macroses here".

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

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re: Проверка по дням недели
« Ответ #10 : 21 Декабря 2015, 01:13:33 »
Спасибо! Но, не получилось у меня ничего. Что-то неправильно делаю, причем, если я правильно понимаю, ошибка при вызове макроса (на 78 строке вызов макроса):
Цитировать
Warning: XSLTProcessor::transformToXml() [xsltprocessor.transformtoxml]: Invalid number of arguments in /docs/classes/system/subsystems/umiTemplaters/types/umiTemplaterXSLT.php on line 53

Warning: XSLTProcessor::transformToXml() [xsltprocessor.transformtoxml]: runtime error: file /docs/xsltTpls/modules/catalog/object-view.xsl line 78 element value-of in /docs/classes/system/subsystems/umiTemplaters/types/umiTemplaterXSLT.php on line 53

Warning: XSLTProcessor::transformToXml() [xsltprocessor.transformtoxml]: XPath evaluation returned no result. in /docs/classes/system/subsystems/umiTemplaters/types/umiTemplaterXSLT.php on line 53

Вызов делал, как уже писал, так: <xsl:value-of select="document(concat('udata://custom/getDeliveryDate()/'))/udata" /> (пробовал в конце udata убирать, тоже не помогло).

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

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Re: Проверка по дням недели
« Ответ #11 : 21 Декабря 2015, 07:39:04 »
Нужно убрать concat
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re: Проверка по дням недели
« Ответ #12 : 22 Декабря 2015, 00:45:52 »
Ничего не могу понять?! Макрос вставил куда надо, вызов тоже сделал:
.../classes/modules/custom.php
		после //TODO: Write your own macroses here
public function getDeliveryDate() {
if (friday) {
return 'понедельник и позже';
} else if (saturday - sunday) {
return 'вторник и позже';
} else {
return 'завтра и позже';
}
}

.../object-view.xsl
<xsl:value-of select="document('udata://custom/getDeliveryDate()/')/udata" />
А вместо нужной информации сообщение:
Цитировать
Method custom::getDeliveryDate() doesn't exists
А XML выводит следующее:
Цитировать
<udata module="custom" method="getDeliveryDate" generation-time="0.007301">понедельник и позже</udata>

Что не так?
« Последнее редактирование: 22 Декабря 2015, 10:35:31 от sam »
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re: Проверка по дням недели
« Ответ #13 : 22 Декабря 2015, 10:38:49 »
А еще, если обратить внимание, и XML неправильную информацию выводит - вместо "завтра и позже" там "понедельник и позже".
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re: Проверка по дням недели
« Ответ #14 : 22 Декабря 2015, 13:49:58 »
Решил идти еще одним путем - сделал так:
		public function getDeliveryDate() {
echo "Hello World!";
}
Вызвал это из адресной строки - mydomain/udata://custom/getDeliveryDate - на белом экране получил "Hello World!".

Дальше попробовал вызвать тоже самое из шаблона так - <xsl:value-of select="document('udata://custom/getDeliveryDate()/')/udata" />,
И опять получил это же сообщение - "Method custom::getDeliveryDate() doesn't exists"

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