Добрый вечер!
Подскажите, есть возможность вывода полей в записи в определённой последовательности?
Например по системному имени в таком порядке: photos2, photos1, photos3.. В форме добавления записи нужен другой порядок полей
Добрый вечер!
Подскажите, есть возможность вывода полей в записи в определённой последовательности?
Например по системному имени в таком порядке: photos2, photos1, photos3.. В форме добавления записи нужен другой порядок полей
Возможность такая есть.
Но придется немного поразбираться в коде. И либо в хуке изменить порядок. Либо в шаблоне вывода записи.
И либо в руке изменить порядок
Это где?)
В шаблоне вроде нашел где выводятся поля https://github.com/instantsoft/icms2/blob/master/templates/default/content/default_item.tpl.php#L35
только как это реализовать? (не силён в ПХП). Как массив $fieldset['fields'] пересортировать по полю $field['name'] с такими-то значениями?
denmois, перебрать массив с помощью того же foreach, и сформировать новый $fieldset['fields'] который уже выводить.
Тут надо на месте разбираться. Универсального кода не вижу.
В шаблоне вроде нашел где выводятся поля https://github.com/instantsoft/icms2/blob/master/templates/default/content/default_item.tpl.php#L35
Универсального решения действительно не видится. Может что-то подойдёт из этих функций
Простенько поднять/опустить поля можно обычными условиями.
Поднимаем:
if($field['name'] == 'photos2') { photos2 } elseif($field['name'] == 'photos1') { photos1 } else { остальные }
Опускаем оператором !=
Вообще-то можно и без цикла перебора обойтись
Спасибо за советы
Поднимаем:
if($field['name'] == 'photos2') { photos2 } elseif($field['name'] == 'photos1') { photos1 } else { остальные
Я так понимаю эти операторы должны быть внутри foreach ($fieldset['fields'] as $field), а тогда смысл? Порядок останется прежним.
Пока сделал вот так:
<?php if (!empty($item['photo'])) { echo $fields['photo']['handler']->parse( $item['photo'] ); }?>
для каждого поля в нужном порядке, что конечно не очень красиво. Полей много.
Была идея задать array(photos2',photos1','photos3') и в соответствии сделать выборку в новый массив в нужном порядке. Но пока не найду реализацию.
Я так понимаю эти операторы должны быть внутри foreach ($fieldset['fields'] as $field), а тогда смысл? Порядок останется прежним.
Да, я ошибся (изменить формат вывода так можно, а порядок вывода не получится).
Пока сделал вот так:
<?php if (!empty($item['photo'])) {
echo $fields['photo']['handler']->parse( $item['photo'] );
}?>
Боюсь снова ошибиться, но лучше ещё проверить на включённость вывода в записи и разрушить cоответствующий элемент в массиве:
<?php if ($fields['name']['is_in_item']){ ?> выводим поле как нужно <?php } ?> <?php } ?>
Не помню, начиная с какой версии, удалить из массива системные поля с помощью unset() не получится (нужно отключать поле для вывода в записи; соответственно, для таких полей и в условии нужно убрать проверку на включённость вывода)
-----------------------------------
Неужели не нашли в сети подходящей функции для решения задачи?
Подскажите, есть возможность вывода полей в записи в определённой последовательности?
Зайдите в панель управления.
Типы контента — Ваштипконтента — Поля. И перетягивайте поля мышью вниз или ввер, как надо.
Таким образом можно изменить порядок полей при выводе.
Но системные поля, типа заголовка и даты, остаются на своих местах вне зависимости от этих настроек.
Неужели не нашли в сети подходящей функции для решения задачи?
Конкретной функции не нашел. А распаковать и перебрать массив мне не по зубам с моими познаниями.
Зайдите в панель управления.
Типы контента — Ваштипконтента — Поля. И перетягивайте поля мышью вниз или ввер, как надо.
Таким образом можно изменить порядок полей при выводе.
Но системные поля, типа заголовка и даты, остаются на своих местах вне зависимости от этих настроек.
Андрей, рад что вы зашли в тему! Но вы не внимательно прочитали первый пост.
В форме добавления записи нужен другой порядок полей
В форме добавления записи нужен другой порядок полей
Так это легче форму добавления перебрать, чем городить огород с пересортировкой массива.
Согласитесь, добавление случается реже просмотра.
Значит если я делаю в админке такой порядок как нужен мне в записи, как установить другой порядок при добавлении?
Группировка полей используется при выводе? Можно сделать массив типа
только перечислить все поля в этом массиве в нужном порядке. И потом в цикле вместо
<?php foreach ($fieldset['fields'] as $field) { ?>
прописать подобное
<?php foreach ($fields_ordering as $field_name) { $field = $fieldset['fields'][$field_name]; ?>
То, что надо! Только почему-то ругается
Notice: Undefined index: phone in /var/www/.... на строку <?php $field = $fieldset['fields'][$field_name];?>
Так предупреждения нет, но и поля не выводит
var_dump($fields_ordering); даёт:
array(3) { [0]=> string(5) «phone» [1]=> string(5) «viber» [2]=> string(8) «whatsapp» }