Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Перенесено: Макрос постраничного вывода system numpages - ошибка

Автор adminРаздел Макросы UMI.CMS

Ответов: 0
Просмотров: 3212
Последний ответ 04 Октября 2011, 14:58:21
от admin
Вывод страницы в меню с отключением вывода в карте сайта

Автор alpotemkinРаздел Макросы UMI.CMS

Ответов: 6
Просмотров: 5626
Последний ответ 03 Ноября 2011, 15:07:29
от alpotemkin
Есть ли вариант вывода элемента справочника на странице

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

Ответов: 3
Просмотров: 2206
Последний ответ 10 Мая 2013, 10:00:24
от Vladimir
Макрос вывода новостей связанных определенным сюжетом

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

Ответов: 3
Просмотров: 2845
Последний ответ 21 Сентября 2013, 19:11:52
от admin
Меню - ограничение глубины вывода в одном разделе

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

Ответов: 8
Просмотров: 3918
Последний ответ 30 Сентября 2014, 22:59:05
от Axiomateria

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

*

technoexpert

  • *
  • 6
  • +1/-0
    • Просмотр профиля
Изменение вывода list-position (TPL)
« : 29 Сентября 2012, 14:01:42 »
Собственно, простая, вроде бы, задача. Нужно изменить вывод подмакроса %list-position% в каталоге.

Обычно он выводит в виде 1 2 3 4 5 6 7 8 9 10 11 12 и т.д., а нужно, чтобы выводил
01 02 03 04 05 06 07 08 09 10 11 12 - вот и вопрос, если какой-либо вариант поправить сие, кроме как лезть в ядро?
« Последнее редактирование: 29 Сентября 2012, 19:57:22 от technoexpert »

*

technoexpert

  • *
  • 6
  • +1/-0
    • Просмотр профиля
Re:Изменение вывода list-position
« Ответ #1 : 29 Сентября 2012, 18:44:15 »
Собственно, всё оказалось проще некуда - сам спросил и сам ответил. За время звучания трёх композиций Neo Inferno 262 макрос был внедрён, благо совсем простой.

Это пишем в /classes/modules/custom.php


      public function list_position_string_add($posnumber, $string, $padlength, $position) {
         if($position == 'right') {
            $stringadd = str_pad($posnumber, $padlength, $string);
         } elseif($position == 'left') {
            $stringadd = str_pad($posnumber, $padlength, $string, STR_PAD_LEFT);
         } else {
            $stringadd = str_pad($posnumber, $padlength, $string, STR_PAD_BOTH);
         }
         return $stringadd;
      }

---------------------------------------------------------------------------------------------------------------------------------------------

Вызываем так:

%custom list_position_string_add('%list-position%', <чем дополняем>, <количество регистров>, <позиция>)%

---------------------------------------------------------------------------------------------------------------------------------------------

Вызов

%custom list_position_string_add('%list-position%', 0, 3, left)%

переформатирует ваш вывод 1 2 3 4 ... 22 23 24 ... 123 124 125 и т.д. как 001 002 003 004 ... 022 023 024 ... 123 124 125 - т.е добавит слева ко всем числам, имеющим в своём составе меньше трёх знаков, нули с тем условием, чтобы количество цифр в числах стало равным трём. А вызов

%custom list_position_string_add('%list-position%', Q, 2, right)%

превратит вывод в 1Q 2Q 3Q 4Q ... 22 23 24 ... 123 124 125 - т.е. добавит справа ко всем числам, имеющим в своём составе меньше двух цифр, букву Q с тем условием, чтобы количество знаков в выводе стало равным двум.

Также можно добавить знак (и не один - но считаться всё равно будет общее количество знаков) с двух сторон от желаемого вывода - для этого просто нужно опустить значение позиции при вызове - но тогда стоит не забывать, считается именно количество знаков в выводе и для получения вариантов типа Q1Q Q2Q Q3Q Q4Q Q5Q запрос выглядит, как

%custom list_position_string_add('%list-position%', Q, 3)%

 , а для двузначных чисел вывод уже будет 11Q 12Q 13Q и т.д., потому как добавление идёт по умолчанию вначале справа.

---------------------------------------------------------------------------------------------------------------------------------------------

И есть обоснованное подозрение, что если в вызове заменить подмакрос %list-position% на любой другой - например, %price%, то это тоже будет работать - теоретически, должно работать с любыми строковыми и численными выводами вообще.

P.S. Да, для тех, кто любит плохо читаемый, но короткий код, в custom.php можно написать:

      public function list_position_string_add($posnumber, $string, $padlength, $position) {
         return $stringadd = ($position == 'right') ? str_pad($posnumber, $padlength, $string) : ($position == 'left') ? str_pad($posnumber, $padlength, $string, STR_PAD_LEFT) : str_pad($posnumber, $padlength, $string, STR_PAD_BOTH);
      }
« Последнее редактирование: 30 Сентября 2012, 23:22:08 от technoexpert »