multiTV - зачем он нужен и где используется

Часто бывает так, что необходимо привязать к какой-нибудь страничке дополнительные данные, редактируя которые, мы могли бы с лёгкостью могли изменять контент, при этом не прописывая какого-нибудь дополнительного HTML-кода, поскольку сама система делала бы это за нас самостоятельно. Отчасти эту проблему решают дополнительные TV-поля. Но как быть, если к примеру у нас к странице привязаны ссылки на наши документы? Ведь по сути мы имеем дело с одной сущностью (ссылка), которая может повторяться у нас несколько раз. В Modx Evo мы могли бы создать дополнительные поля и назвать их скажем "Ссылка1", "Ссылка2" и т. д.? И вроде бы на первый взгляд это решает проблему, но это только на первый взгляд. Ведь мы не знаем точно, сколько таких ссылок на каждый документ у нас будет. Более того, затем мы возможно бы решили, что нам нужно создать поле "анкор", то есть слово, щёлкнув на которое, мы могли бы перейти к скачке документа.  Можно было действовать и по аналогии выше, перечислять поля с анкорами. Но это опять же, избыточность, ещё больше кода, ну и неловкое ощущение от молчаливого вопроса - "а можно ли было сделать как-то лучше?". Вот для этого собственно и был создан сниппет multiTV, который решает вышеописанные проблемы. При установке он добавляет дополнительный тип поля, в котором могут храниться другие поля. 

Итак, предположим мы хотим привзять к документу какое-то n-ое значение ссылок, у которых помимо прочего будут названия. Алгоритм создания будет таким: 

  1. Создаём поле, скажем info. Тип ввода у него будет таким - multitiv. 
  2. Переходим в папку /assets/tvs/multitv/configs и создаём файл следующего вида - info.config.inc.php Хочу обратить ваше внимание на то, что слово info в названи файла было выбрано неспроста, поскольку это слово должно быть одинаковым с тем полем, к которому мы хотим сделать привязку. К слову, в данной папке уже находятся примеры готовых конфигураций, поэтому за основу вы можете взять одну из уже готовых. 
  3. Редактируем файл конфигурации. У меня конфигурация получилась следующего вида: 

    <?
    $settings['display'] = 'vertical';
    $settings['fields'] = array(
    'file' => array(
    'caption' => 'Прикреплённый файл',
    'type' => 'file'
    ),
    'text' => array(
    'caption' => 'Якорь ссылки',
    'type' => 'text'
    )
    );
    $settings['templates'] = array(
    'outerTpl' => '<div class="files-info">[+wrapper+]</div>',
    'rowTpl' => '
    <a href="[+file+]">[+text+]</a><br />
    '
    );
    ?>

    Как видим, конфигурация представлена в виде массива: 
    display - в каком виде будет отображаться процесс добавления в админке, 
    fields - настройки самих полей, 
                          уровень ниже - название самого поля (ключ массива), значение которого можно впоследствии использовать в шаблоне, 
                          caption - заголовок поля,
                          type - тип поля (text - поле для ввода текста, file - поле выборки файла, image - выбор картинки и т. д.) 

    templates - шаблоны вывода. 
                         outerTpl - обёртка для всех строк, 
                         rowTpl - это шаблон одной строки, в нашем случае - ссылки. 

  4. Далее переходим к документу и заполняем данными наши поля. 
  5. Вызываем в шаблоне, в том месте, где нужно вывести поля, сниппет multiTV: 
    [!multiTV? &tvName=`info` &display=`all`!]
    

Параметры сниппета: 
&tvName=`info` - название поля, значения которого нужно вывести, 
&display=`all` - сколько строк отображать, в данном случае - все.

Комментарии ()

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