Академический Документы
Профессиональный Документы
Культура Документы
com
Мыб
Содержание
Управление
СИСТЕМЫ,ФУНКЦИИ,ИЛУЧШИЕ ПРАКТИКИ
Дин Баркер
www.allitebooks.com
Управление веб-контентом
Смотрящийвыбрать систему управления веб-контентом (CMS),
но не знаете обещаний, терминологии и модных словечек?
Хотите разобраться в управлении контентом, не углубляясь в
«назрелаи
Эта книга давно
очень
базовое программирование? В этой книге представлен четкий нужный
и объективный обзор всей экосистемы CMS — от платформ до противоядие от
реализаций — независимо от языка и платформы, как для индустрииотчеты и
менеджеров проектов, руководителей, так и для новых
разработчиков.
поставщикофициальн
Автор Дин Баркер, консультант по CMS с почти
ые документы, которые
двадцатилетним опытом, помогает вам изучить множество имеюттак долго
различных систем, технологий и платформ. К концу книги у вас
будут знания, необходимые для принятия решений о функциях,
доминировал в
дискуссии КМ. Ура
»
архитектуре и методах реализации, чтобы гарантировать, что
ваш проект решает правильные проблемы.
Дину!
—БобБойко
авторБиблия управления контентом(Уайли)
■ Узнайте, что такое контент, как сравнивать разные
системы икаковы роли команды CMS
■ Понять, как современная CMS моделирует и
объединяетконтент, координирует рабочий
процесс и управляет активами
■ Изучите масштаб и структуру проекта внедрения
CMS.
■ Изучите процесс и лучшие практики для успешной
работываша реализация CMS
■ Изучите практику переноса веб-контента и узнайте,
какдля работы с внешним интегратором CMS
УПРАВЛЕНИЕ СОДЕРЖАНИЕМ
НАС$39,99 МОЖЕТ$45,99
ISBN: 978-1-491-90812-9.
www.allitebooks.com Твиттер:
@oreillymedia
facebook.com/
oreilly
Управление веб-контентом
Системы, функции и лучшие практики
Дин Баркер
www.allitebooks.com
Управление веб-контентом
Дин Баркер
Авторские права © 2016 Дин Баркер. Все права
защищены.Напечатано в Соединенных Штатах
Америки.
Опубликовано O'Reilly Media, Inc., 1005 Gravenstein Highway North, Севастополь, Калифорния 95472.
Книги О'Рейли можно приобрести для образовательных, деловых или рекламных целей. Для
большинства изданий также доступны онлайн-версии (http://safaribooksonline.com). Для
получения дополнительной информации свяжитесь с нашим отделом
корпоративных/институциональных продаж: 800-998-9938 илиCorporate@oreilly.com.
Редактор:Эллисон
МакдональдРедактор Индексатор:WordCoСлужбы индексирования
производства:Коллин Коул Дизайнер интерьера:Дэвид
Редактор:Рэйчел Хед Футато Дизайнер
Корректор:Сьюзан Мориц обложки:РэндиуголИллюст
ратор:Ребекка Демарест
Логотип O'Reilly является зарегистрированным товарным знаком O'Reilly Media, Inc. Web Content
Management, изображение на обложке и соответствующий фирменный стиль являются товарными
знаками O'Reilly Media, Inc.
Хотя издатель и автор приложили добросовестные усилия для обеспечения точности информации
и инструкций, содержащихся в этой работе, издатель и автор отказываются от любой
ответственности за ошибки или упущения, включая, помимо прочего, ответственность за ущерб,
возникший в результате использования или полагаться на эту работу. Использование информации
и инструкций, содержащихся в данной работе, осуществляется на свой страх и риск. Если какие-
либо образцы кода или другие технологии, содержащиеся или описываемые в этой работе,
подпадают под действие лицензий с открытым исходным кодом или прав интеллектуальной
собственности других лиц, вы несете ответственность за обеспечение того, чтобы их
использование вами соответствовало таким лицензиям и/или правам.
978-1-491-90812-9
[ЛСИ]
www.allitebooks.com
ДляМама.
Я наконец-то понял, кем хочу стать, когда вырасту.
www.allitebooks.com
www.allitebooks.com
Стол изСодержание
Предисловие.................................................................xiii
Предисловие.................................................................xv
Часть I. Основы
1. Что Содержание Управление Является (иНет)...............................1
Что такое контент? 3
Создано людьми посредством редакционного процесса 3
Предназначено для потребления человеком посредством публикации для аудитории.4
Определение содержания 5
Что такое система управления контентом? 5
Дисциплина против программного обеспечения 6
Типы систем управления контентом 7
Что делает CMS 9
Управление контентом 9
Разрешить повторное использование контента 10
Разрешить автоматизацию и агрегирование контента 11
Повысьте редакционную эффективность 11
Чего не делает CMS 12
Создать контент 12
Создавайте маркетинговые планы 12
Эффективно форматируйте контент 13
Обеспечить управление 13
2. Точки сравнения...........................................................15
Тип целевого сайта 16
www.allitebooks.com
Системы и реализации 17
Платформа против продукта 18
Открытый исходный код против коммерческого 20
Технологический стек 23
Управление против доставки 25
Связанные и разделенные 26
Установленное и программное обеспечение как услуга (SaaS) 27
Код против контента 28
Код против конфигурации 29
Однонаправленная и двунаправленная публикация 30
Практичность против элегантности и проблема технического долга 32
3. Приобретение CMS.........................................................35
CMS с открытым исходным кодом 36
Бизнес-модели компаний с открытым исходным кодом 37
Коммерческие CMS 39
Модели лицензирования 40
Подписка на программное обеспечение 42
Программное обеспечение как сервис 45
Построй свой собственный 47
Вопросы, которые стоит задать 49
6. Моделирование контента...................................................75
Моделирование данных 101 76
ви | Оглавление
www.allitebooks.com
Моделирование данных и управление контентом 80
Разделение контента и представления 81
«Постраничная» CMS 84
Определение модели контента 85
Типы контента 85
Атрибуты и типы данных 88
Встроенные атрибуты 90
Проверка атрибута 91
Использование атрибутов для редакционных метаданных 92
Наследование типа контента 93
Встраивание контента 97
Отношения 103
Состав контента 104
Управляемость модели контента 105
Краткое изложение функций моделирования контента 107
7. Агрегация контента.......................................................109
Форма контента 111
География контента 114
Редакционные ограничения по географии 117
Вторичные географические регионы: категории, таксономии, теги, списки, коллекции,
и меню 118
Тирания Дерева 119
Модели агрегации: неявные и явные 120
Должна ли ваша агрегация быть объектом контента? 121
Адресуемость URL-адресов агрегатов 122
Агрегационная функциональность 122
Статический и динамический 123
Переменная или фиксированная 125
Ручной заказ в сравнении с производным заказом 125
Ограничения типа 127
Ограничения количества 128
Фильтры разрешений и статуса публикации 128
Плоский или иерархический 129
Межстраничные агрегаты 129
По конфигурации или по коду 130
Краткое изложение функций агрегирования контента 133
Оглавление| VII
www.allitebooks.com
Выбор типа 140
Предварительный просмотр контента 142
Редактирование элементов интерфейса 144
Управление версиями,Контроль версий и метки версий 151
Управление зависимостями 153
Планирование и срок действия контента 155
Публикация набора изменений 156
Срок действия контента 156
Рабочий процесс и утверждения 157
Разрешения 157
Рабочий процесс 157
Сотрудничество 160
Управление файлами контента 162
Добавление файлов содержимого 162
Ассоциация контента 163
Обработка изображений 164
Разрешения 164
Обзор редакционных инструментов 170
Обход контента и навигация 170
Выбор типа 170
Предварительный просмотр контента 170
Интерфейс редактирования 171
Управление версиями, контроль версий, планирование и срок действия 171
Рабочий процесс и утверждения 171
Управление файлами контента 172
Разрешения 172
viii | Оглавление
www.allitebooks.com
Шаблонизация 201
Отдельная публикация 202
Икс | Оглавление
Разработка контента 323
Обучение и поддержка 324
Последнее слово 326
Послесловие................................................................339
Индекс......................................................................341
Оглавление| xi
Предисловие
xiii
боли; вам необходимо интегрировать аналитику в последующие итерации; вам
необходимо заархивировать старую информацию, чтобы она не засоряла
результаты вашей поисковой системы. И так далее.
Итак, сегодня индустрия WCM испытывает некоторые ключевые пробелы, и
нам нужны люди, которые смогут эффективно устранить эти пробелы.
Например, разрыв между созданием контента и его потреблением. Разрыв
между контент-стратегиями и реализациями CMS. Между потребностями
бизнеса и архитектурными шаблонами. Между авторами и маркетологами.
Между разработчиками и менеджерами кампаний. Между стратегами и
исполнителями. Дин Баркер — редкий человек, который может рассказать обо
всех этих проблемах.
Будучи новозеландцем, счастливо переехавшим в Северную Америку, Дин
обладает способностью страстно заниматься делом, но в то же время
принимать критическую точку зрения стороннего наблюдателя. На первый
взгляд эта книга представляет собой введение в основные темы CMS, но если
вы прочитаете глубже, вы обнаружите, что это действительно аргумент —
страстный призыв относиться к веб-контенту и процессам, связанным с ним,
так же серьезно, как вы относитесь к любому другому активу бизнеса или
маркетинга. .
Итак, вам следует прочитать книгу от корки до корки, но я особенно
рекомендую вам добавить в закладки главы, посвященные команде CMS,
моделированию и агрегированию контента, миграции и реализации. Это
сложные темы, которые консультанты и поставщики часто не любят
обсуждать, но они могут улучшить или разрушить вашу программу CMS. Дин
описывает их с правильным сочетанием широты и эффективности, которое
может дать только тот, кто прошел через них много-много раз.
Хотя эта книга написана для бизнес-специалистов, если вы разработчик или
архитектор, ее очень стоит прочитать, и она была бы таковой, даже если бы
Дин не включил все полезные фрагменты кода (хотя он их включил, к моему
удовольствию и надеюсь, ваш). Прочтите первую главу «Точки сравнения»,
чтобы узнать о некоторых ключевых логических различиях, которым ваша
команда должна следовать.
Если бы существовала волшебная машина, которая могла бы создать
идеальную CMS, я бы поставил за штурвал Дина. В отсутствие такой машины
остальным из нас приходится выявлять лучшие практики старомодным
способом: путем тестирования и опыта. Я надеюсь, что у вас будет
возможность протестировать многие инструменты CMS, просто чтобы воочию
почувствовать удивительные различия в подходах между ними. Но если вы
ищете единый источник знаний и опыта в области лучших практик CMS,
оставьте все, что вы делаете, и прочитайте эту книгу.
— Тони Бирн,
основатель Real Story
Groupwww.realstorygrou
p.com
декабрь 2015 г.
xiv | Предисловие
Предисловие
1 В компании Funduc Software она называлась (соответственно) «Поиск и замена» и на самом деле
существует до сих пор.делиться- посуда. К сожалению, в то время у него не было функций
резервного копирования или отмены. Напомни мне как-нибудь рассказать историю о том, как я
случайно совершил необратимую находку и замену на букве «е».
xvi | Предисловие
• Любой, кто пытается понять и оправдать новый проект, связанный с CMS.
Примечание по номенклатуре
Как мы обсудим в самой первой главе, «контент» может означать множество
разных вещей: от файлов HTML до изображений и документов Word.
Для удобства я буду использовать термины «контент» и «CMS». Однако
помните, что эта книга посвящена конкретно управлению веб-контентом,
поэтому я говорю конкретно о «веб-контенте», «WCM» и «WCMS».
Отказываясь от квалификаторов «Интернет» и «W», я не претендую на контент
как на чисто веб-актив или проблему. Скорее, я просто склоняюсь перед
условностями и краткостью.
Примечание о предвзятости
Как консультант, проработавший в этой сфере почти два десятилетия, уверяю
вас, что у меня много предпочтений. Однако я также понимаю, что даже
система, которую я ненавижу, все еще
2 Хотя ЦРУ пыталось еще в 1960-е годы. Оказывается, «почти наверняка» — 93%, а «вероятно» —
75%. См. раздел «Слова об оценочной вероятности» на страницесайт ЦРУ.
восемнадцатый | Предисловие
есть поклонники. Мои предпочтения, несомненно, проявятся, но я сделал все
возможное, чтобы быть объективным и предоставить адекватное обоснование
своих выводов.
Я также понимаю, что, как и у любого консультанта, мой опыт, скорее всего,
ориентирован на один тип проекта или проблемы таким образом, что я могу
даже этого не заметить. Точно так же, как вы не можете пройти милю в шкуре
другого человека, я не могу полностью относиться к проблемам, которые мне
никогда не приходилось решать. Системы, которых, как мне кажется, крайне не
хватает для проектов, над которыми я работал, могут полностью подойти для
решения стоящей перед вами задачи.
Наконец, мой опыт работы с конкретными системами, парадигмами и
методологиями облегчил мне создание примеров и снимков экрана этих
систем. За это я прошу прощения, но существует множество негативных
практических моментов, связанных с начальной загрузкой системы, с которой я
не знаком, для получения изображения или примера. Я благодарю тех, кто
работает в отрасли, кому я удосужился поделиться своим опытом работы с
некоторыми системами, которые, по моему мнению, было важно обсудить, но к
которым у меня не было доступа или доступа.
Благодарности
Прежде всего, я хотел бы поблагодарить эту отрасль. Отойдя от этой книги,
когда она пришла к выводу, я понял, что ничто из того, что я здесь написал, не
является особенно оригинальным. Я просто курирую, сопоставляю, ремиксую и
развиваю концепции и идеи, которые каждый день воплощают в жизнь тысячи
людей по всему миру.
Я узнал, что на самом базовом уровне именно это и делает писатель: мы
обрабатываем информацию. Если мы не сообщаем об оригинальном
исследовании или не пишем полностью оригинальное художественное
произведение, мы просто потребляем информацию из других источников,
собираем ее, фильтруем, анализируем, реорганизуем, объясняем, а затем
распространяем. С этой точки зрения этот процесс мало чем отличается от
самого процесса управления контентом, обсуждению которого мы уделим
следующие 300 страниц.
Однако явно необходимы некоторые более конкретные признания.
Спасибо моей жене Энни, моим детям Алеку, Габриэль и Изабелле, а также
моей крестнице Бруклин за то, что терпели меня, пока я писал первоначальный
вариант, и особенно после того, как я поклялся, что он «готов»… но потом
продолжал писать. в любом случае.
Спасибо моим деловым партнерам Джо Кепли, Карле Санти и Деннису Бреске
за то, что дали мне время написать это.
Спасибо непревзойденным сотрудникам Blend Interactive за помощь в
построении бизнеса, который дает мне возможность проводить дни, думая об
управлении контентом. Я надеюсь, что эта книга представляет собой хотя бы
смутную тень того богатого опыта и знаний, которые существуют в офисе
Blend.
Спасибо моему редактору Элли Макдональд за то, что рискнула выбрать
случайного парня, заполнившего онлайн-форму О'Рейли.
Спасибо команде докладчиков конференции Now What 2014, которые сидели за
столом в гриль-баре Crawford's в Су-Фолс, Южная Дакота, и в первую очередь
уговорили меня написать эту книгу: Карен Макгрейн, Кристина Халворсон,
Джефф Итон, Джаррод Гинграс, Джефф Зауэр, Кори Вилхауэр и Джефф Крам.
Спасибо моим техническим редакторам Арильду Хенрихсену, Линси Струтерс,
Сету Готлибу и Кори Вилхауэру. Любой из них мог бы положить конец этому,
просто сказав мне, что книга плоха. Тот факт, что они этого не сделали, был
первым препятствием, которое мне пришлось преодолеть.
Предисловие | XXI
Спасибо моей помощнице Керри Вилхауэр, которая сначала редактировала
каждую главу и потратила слишком много времени, меняя «то» на «который» и
вычеркивая мои беспорядочные расстановки переносов. 3 Ее
головокружительная решимость разъяснять непонятные правила английского
языка одновременно ценилась и порой пугала.
Спасибо Тони Бирну, моему близкому другу и наставнику на протяжении
многих лет, который очень помог мне, неоднократно помещая этот бизнес и
практику в контекст, и который оказал мне честь написать предисловие.
Наконец, спасибо Бобу Бойко за написание «Библии управления контентом». В
конце концов я закончил ее, находясь в самолете, который был перенаправлен в
Канзас-Сити примерно в 2006 году. Я до сих пор отчетливо помню, как закрыл
1122-страничное чудовище и плюхнулся на свое место, чтобы все это
осмыслить.
Думаю, я действительно вспотел.
3 Стоит отметить, что слово «редактирование» в этом предложении было записано через дефис в
первом варианте этого предисловия.
XXII | Предисловие
ЧАСТЬя
Основы
ГЛАВА1
Что Содержание Управление Является
(иНет)
1 В 1945 году Буш написал невероятно влиятельное эссе под названием «Как мы можем думать», в
котором сетовал на отсутствие необходимых инструментов управления информацией и представлял
себе будущее, которое оказалось удивительно похожим на то, что на самом деле произошло через 70
лет после его публикации. По сути, Буш описал Всемирную паутину примерно за 50 лет до того, как
Тим Бернерс-Ли сделал это возможным.
1
007. Количество мелочей ошеломляло. Конечно, я попытался распечатать
большую часть этого, потому что, если бы этого не было на бумаге, как бы я с
этим справился?
Вскоре я стал соредактором популярного веб-сайта о Джеймсе Бонде — Mr.
Поцелуй, поцелуй, Bang Bang.2 Я узнал, что отслеживание контента было
непростой задачей. В любой момент времени статья существовала только в
виде HTML-файла в корневом каталоге веб-сервера. В то время я не был ИТ-
специалистом, поэтому единственная резервная копия за пределами этого
файла была на моем локальном компьютере. Не было никакого управления
версиями или контроля доступа — одна ошибка, и все могло исчезнуть.
Мне это показалось опасным. Даже тогда я знал, что веб-сайт — это, по сути,
бизнес, основанный на контенте, и, имея не что иное, как кучу файлов, я
эффективно работал без сети. Контент был нашим единственным активом в
бизнесе, и я помню, что думал, что он очень хрупкий; одна непредвиденная
проблема и ее может просто «сдуть», как одуванчик ветром.
Кроме того, каждый HTML-файл представлял собой массу разметки середины
90-х годов, дополненную повсюду вложенными тегами TABLE и FONT. Не
было возможности отделить контент от презентации, и каждый редизайн сайта
(а их было много) включал в себя ручную переработку этих файлов. Серверные
включения в определенной степени помогли, но каждый файл по-прежнему
представлял собой огромный комок смешанного контента и кода
форматирования.
Некоторое время спустя я работал в Microsoft Network менеджером форума
«Мир Джеймса Бонда». Мы все еще писали HTML-файлы в текстовых
редакторах, но Microsoft познакомила своих контент-менеджеров с чудесами
Visual Source Safe, давно устаревшей системы управления исходным кодом. Он
обеспечивал резервное копирование, управление версиями и блокировку
файлов.
Это явно сделало нас безопаснее с точки зрения управления рисками, но
произошел и ментальный сдвиг. Теперь у нас была сеть безопасности. Контент,
который мы создавали, был солидным. Была история и контекст. Мы
редактировали и дорабатывали постоянный контент, а не просто меняли его на
месте. Содержимое существовало не только в простых файлах, оно
существовало внутри более крупной системы, которая предоставляла набор
сервисов для его защиты. Мы перешли от того, чтобы прятать деньги в
матрасах, к хранению их в финансовом учреждении, застрахованном
Федеральной корпорацией по страхованию вкладов (FDIC).
Наконец, на каком-то грубом уровне, моим контентом удалось управлять. Все
еще было запутано с его представлением и, вероятно, имело массу других
проблем, но я был по крайней мере на пару шагов безопаснее, чем был раньше.
Я даже не осознавал этого, но Visual Source Safe фактически стал моей первой
системой управления контентом.
2 Хотя сайт уже не существует, он находился наhttp://ianfleming.org на протяжении многих лет. Есть
архив скринов вобщедоступная группа в Facebook, для интересующихся.
ЧтоСодержание?
Многие люди пытались провести различие между нечеткими понятиями
«данные», «информация», «содержание» и даже «знания». Боб Бойко посвятил
этому вопросу всю первую часть своей плодотворной работы «Библия
управления контентом» (Wiley) — около 5 глав и 61 страницы.
Мы не собираемся заходить так далеко, но подведем итоги, просто разграничив
контент и необработанные данные, что, вероятно, является самой высокой
отдачей, которую мы можем получить. Чем управление контентом отличается
от управления любым другим типом данных?
Есть два ключевых различия:
www.allitebooks.com
Боб Бойко пишет:
Если убрать все технологии и терминологию, которые мы используем для
описания информационных систем, что у вас останется? Простая и совершенно
банальная идея: информационные системы помогают вам разговаривать с
людьми, которых нет рядом с вами.3
Наша сделка купли-продажи из предыдущего раздела не имеет такой судьбы.
Он был создан как ретроспективная запись исторического события. Скорее
всего, в будущем он не будет потреблен кем-либо, кроме как в совокупности
посредством какой-либо отчетности. Его можно получить и просмотреть
индивидуально, но только по необходимости и, скорее всего, в виде
исключения.
Наша новостная статья, напротив, создавалась как перспективная статья,
которая будет опубликована в будущем и использована людьми по любому
каналу (возможно, по нескольким). Его можно перепрофилировать, сокращать,
переставлять и переформатировать, но конечная цель — быть употребленным и
оцененным другим человеком.
Наш контент имеет ценность в будущем. Он может потребляться годами (даже
веками или тысячелетиями) и может продолжать приносить пользу
организации еще в далеком будущем. Каждый раз, когда читается наша статья
или каждый раз, когда новый сотрудник читает политику расчета заработной
платы, создатель контента получает выгоду.
Контент — это инвестиция в будущее, а не запись прошлого.
Определение содержания
Объединив эти две концепции вместе, мы приходим к лучшей попытке дать
краткое определение:
Контент — это информация, созданная в ходе редакционного процесса и в
конечном итоге предназначенная для потребления человеком посредством
публикации.
Это определение также указывает на основную дихотомию управления
контентом: разницу между (1) управлением и (2) доставкой. Контент создается
и управляется, затем он публикуется и доставляется. Эти две дисциплины
требуют разных навыков и мышления, а состояние современных технологий с
каждым днем создает все больше и больше различий.
В этой книге мы еще вернемся к этому двустороннему подходу к управлению контентом.
4 Ранние CMS не были серверными. Некоторые из первых CMS представляли собой инструменты
создания шаблонов на стороне клиента, такие как CityDesk, MarsEdit и Radio UserLand. Это были
устанавливаемые пакеты программного обеспечения, которые позволяли редакторам работать с
контентом в интерфейсе рабочего стола. Затем системы шаблонизировали этот контент и
передавали полученный HTML-код на сервер, обычно через FTP. Сегодня их часто называют
инструментами «управления контентом рабочего стола». Лишь немногие из этих платформ активно
разрабатываются, но большинство все еще существует для покупки.
5 «Пламя» было первоначальным термином для обозначения двух людей, оскорбляющих друг
друга перед виртуальной аудиторией с помощью анонимной магии Интернета. Кажется, теперь
это называется «Facebook».
6 Аббревиатура, ставшая источником бесчисленных шуток, которые, вопреки мнению некоторых,
никогда не устареют.
Управление контентом
CMS позволяет нам получить контроль над нашим контентом, и вы это хорошо
поймете, если ваш контент выйдет из-под контроля. CMS отслеживает контент.
Он «знает», где находится наш контент, в каком он состоянии, кто может
получить к нему доступ и как он связан с другим контентом. Более того, он
стремится предотвратить возникновение плохих вещей с нашим контентом.
СоздаватьСодержание
CMS просто управляет контентом, а не создает его. Он не пишет ваши
новостные статьи, процедурные документы или сообщения в блогах. Вы все
равно должны предоставить редакционную мощь для создания контента,
которым она должна управлять.
Много раз внедрение CMS заканчивалось тем, что группа людей смотрела друг
на друга и думала: «Ну и что теперь?» Каждый магазин веб-разработки в
стране может рассказать вам истории о новой блестящей CMS, которую клиент
ни разу не использовал, потому что они никогда не меняли свой сайт со дня его
запуска. Время от времени моя компания принимала звонки от клиентов спустя
годы после запуска их сайтов, которые хотели узнать, как впервые войти в
свою CMS.
В связи с этим CMS также не гарантирует, что ваш контент будет хорошим.
Хотя CMS может предлагать несколько инструментов для минимизации
некачественного контента с технической точки зрения (например, гарантируя,
что гиперссылки действительны или что все изображения имеют теги ALT),
CMS не может редактировать ваш контент, чтобы убедиться, что он имеет
смысл и соответствует требованиям. потребности вашей аудитории.
Хорошо продуманные планы по созданию огромных объемов качественного
контента часто терпят неудачу, когда сталкиваются с суровой реальностью
жесткого графика и сроков работы. Вам необходимо убедиться, что процесс
создания контента существует отдельно от вашей CMS.
Создавать МаркетингПланы
Даже если предположить, что ваш контент создается последовательно и
хорошо управляется, это не означает, что он действительно представляет
какую-либо ценность для вашей организации.
Обеспечить управление
«Управление» описывает доступ к вашему контенту и процессы, связанные с
ним: кто к чему имеет доступ и какие процессы/шаги они выполняют, чтобы
внести в него изменения. Например:
• Если Боб добавит новостную статью, кто должен ее утвердить и как будет
выглядеть это одобрение? Кто-то редактирует, а кто-то другой редактирует
качество, голос и тон? Можете ли вы изобразить этот процесс на листе
бумаги?
• Если Джон хочет изменить организацию архивов новостей, и CMS
позволяет ему это сделать… сможет ли он? Какой процесс ему придется
пройти, чтобы это сделать?
• Если Дженнифер хочет создать учетную запись на CMS, чтобы начать
создавать контент, как она это получит? Кто решает, кому разрешено стать
редактором?
Чего не делает CMS | 13
В каждой CMS есть метод ограничения действий, которые может совершать
пользователь, но эти ограничения необходимо определить заранее. CMS просто
выполнит то, что прикажет ей ваша организация. Эти планы должны быть
созданы посредством человеческого взаимодействия и суждений, а затем
преобразованы в разрешения и ограничения доступа, которые может
обеспечить CMS.
Управление – это прежде всего человеческая дисциплина. Вы определяете
процессы и политики, которых люди будут придерживаться при работе с
вашим контентом. CMS — это всего лишь основа для обеспечения соблюдения
требований.
А ДомостроениеАналогия
Дом, в котором вы живете, представляет собой грубое сочетание трех вещей:
Ни одна из этих вещей сама по себе не строит дом.Куча дров остается просто
кучей дров, пока Тед не берет молоток и не заставляет что-нибудь произойти.
Тед здесь ключевой персонаж. Материалы и инструменты неодушевлены. Тед
— главный двигатель.
Что касается управления контентом:
Системы и реализации |1 7
та же самая CMS может иметь мало общего. Любое из этих решений может
быть реализовано хорошо или плохо, и эти результаты окажут огромное
влияние на конечный результат.
Самая совершенная CMS в мире может стать практически бесполезной из-за
плохой реализации. И хотя я признаю, что некоторые CMS являются
непоправимо плохими или неподходящими для конкретной ситуации, я видел
множество блестящих реализаций, которые могли заставить посредственные
CMS работать для конкретного проекта.
Тони Бирн из Real Story Group назвал этот тип CMS «платформой», а
противоположный вариант — «продуктом».1
Платформенный стиль2 Системы спроектированы таким образом, чтобы их
можно было перекомпоновывать и настраивать в ходе реализации. Системы
стилей продукта созданы для быстрого и без значительных усилий решения
конкретных задач.
1 «Как дебаты о новых платформах и продуктах влияют на ваш успех» 23 февраля 2010 г.
2 Обратите внимание на намеренное использование термина «платформенный стиль» в качестве
уточнения. Трудно однозначно сказать, является ли что-то платформой или нет. Вернитесь к
комментарию о расстройствах спектра в начале главы. Некоторые системы являются
«платформенными» в некоторых аспектах, но не в других, а некоторые системы в целом более
«платформенны», чем другие. Быть платформой, а не продуктом, во многом зависит от степени.
ДействительныйПо сравнению с
теоретическими преимуществами
При обсуждении преимуществ любого типа программного обеспечения важно
различать фактические и теоретические преимущества:
Технологический стек
Все программное обеспечение работает на «стеке» вспомогательного
программного обеспечения, баз данных и языков. CMS всегда реализуется на
определенном языке и платформе хранения (которая может быть
«заменяемой», а может и не быть «заменяемой»). Этот язык и структура
хранения сильно влияют на то, какая среда хостинга должна работать CMS.
В стек входит следующее:
Windows)Менее
распространенные стеки
включают в себя:
• Рубин на рельсах
• Python (обычно фреймворк Django)
• Node.js
www.allitebooks.com
В группе поддержки полно Java-программистов, то велика вероятность, что вы
ограничитесь этим стеком.
ИТ-отдел довольно часто поддерживает только определенные комбинации
технологий. Серверы Windows являются общим требованием в корпоративных
ИТ, как и конкретные платформы баз данных. Некоторые компании диктуют
Oracle как свою единственную официально поддерживаемую базу данных, в то
время как другие могут быть более либеральными. Если эти ограничения
существуют в вашей организации, они обязательно сократят количество
возможных CMS, которые вы можете внедрить.
Желательность того или иного конкретного стека является предметом
серьезных дискуссий и выходит далеко за рамки этой книги. Важным
моментом является то, что ограничения технологического стека — если они
существуют — обычно очень жесткие. Если ваша организация требует, чтобы в
ее центре обработки данных могли работать только серверы Windows, это вам
обязательно нужно знать, прежде чем выбирать CMS.
Управление ПротивДоставка
Хотя почти все, что делает CMS, по умолчанию относится к категории
«управление», жизненный цикл части контента можно эффективно разделить с
помощью гипотетической кнопки «Опубликовать».
Все, что происходит с контентом с момента его создания и до момента его
смерти, — это «менеджмент». Подмножество всего, что происходит с
опубликованной версией этого контента с момента его публикации, — это
«доставка». Эти две дисциплины совершенно разные.
Управление – это безопасность, контроль и эффективность. Он состоит из
таких функций, как моделирование контента, разрешения, управление
версиями и рабочий процесс. Это функции, которые упрощают создание
контента, обеспечивают совместную работу редакторов и обеспечивают
безопасность контента.
Доставка — это оптимизация и производительность. Функции,
задействованные в доставке, во многом зависят от возможностей CMS. Эти
возможности в настоящее время быстро развиваются на рынке. До недавнего
времени доставка просто означала предоставление контента в публичном
месте. Сегодня современные CMS очень озабочены производительностью и
оптимизацией предоставляемого контента.
В коммерческом пространстве мы видели множество инструментов, которые
позволяют осуществлять расширенный маркетинг во время доставки. Такие
функции, как персонализация, A/B-тестирование и аналитика, имеют
Связанный ПротивРазвязанный
Дихотомия «управление и доставка» проявляется технически при
рассмотрении уровня связи CMS. Какие отношения между хостингом и средой
управления CMS имеет среда доставки?
В связанной системе управление и доставка происходят на одном сервере (или
ферме серверов). Редакторы управляют контентом в той же системе, где его
потребляют посетители. Управление и доставка — это просто две стороны
одного и того же программного обеспечения.
Это чрезвычайно распространенная парадигма. Многие разработчики и
редакторы больше ничего не знают.
В несвязанной системе управление и доставка (подождите) отделены друг от
друга. Содержимое управляется в одной среде (один сервер или ферма), а затем
публикуется в отдельной среде (другой сервер или ферма). В таких ситуациях
функции управления иногда называют «сервером репозитория», а доставка
контента происходит на «сервер публикации» или «сервер доставки». В этих
случаях опубликованный контент переносится в совершенно отдельную среду,
которая может иметь или не иметь никаких сведений о том, как контент был
создан или как им управляют.
Все меньше и меньше систем поддерживают эту парадигму, и это обычно
наблюдается в высокодоступных или распределенных средах публикации,
например, когда веб-сайт доставляется с нескольких серверов, распределенных
по нескольким центрам обработки данных (хотя это может измениться, как мы
обсудим). в конце книги). Он имеет предполагаемые преимущества
безопасности, стабильности и некоторых редакционных преимуществ,
поскольку редакторы могут вносить крупномасштабные изменения в контент,
не затрагивая среду публикации, только для того, чтобы «внести» все
изменения как один пакет, когда контент будет готов ( хотя это преимущество
постепенно находит свое применение во все более и более связанных
системах).
Фактические технические преимущества разделения включают возможность
публикации на нескольких серверах без необходимости установки CMS на
каждом (что снижает лицензионные сборы в случае коммерческих CMS), а
также возможность публикации в сильно распределенных средах
(множественные данные). центры на нескольких континентах, например).
Кроме того,
Код ПротивКонфигурация
Многие функции CMS могут быть реализованы посредством (1) разработчиков,
пишущих код (либо основной код, либо код шаблона), или (2) редакторов и
администраторов, работающих через интерфейс.
Разработчики имеют полную свободу, вплоть до пределов самой системы.
Обычно не существует функциональности, которая была бы недоступна из
кода, поскольку сам код является основной основой системы. Единственное
ограничение для разработчика — это то, насколько хорошо спроектирован API,
обеспечивающий доступ и манипуляции. Но даже при плохо реализованном
API разработчик имеет все возможности языка программирования,
позволяющие обойти недостатки.
Редакторы, с другой стороны, имеют доступ лишь к части того, что
разработчик может сделать из кода. Они ограничены функциональностью,
доступной из интерфейса, которая сильно различается в зависимости от
системы. Некоторые системы позволяют устанавливать незначительные
параметры конфигурации, в то время как другие имеют сложную архитектуру
модулей и подключаемых модулей, которые позволяют создавать новые
функциональные возможности из интерфейса работающей производственной
системы.
Почему бы системе не предоставить все функции интерфейса? Иногда это
происходит потому, что конкретный параметр или часть функциональности
изменяются слишком редко, чтобы оправдать усилия по созданию для него
интерфейса. В других случаях это происходит потому, что человек,
использующий его, скорее всего, будет разработчиком, который хотел бы
изменить его из кода, чтобы гарантировать, что он будет версионирован как
исходный код и развернут, как и другие изменения кода.
Однако наиболее распространенной причиной является то, что эта функция
слишком сложна для управления через интерфейс. Умение писать код
позволяет четко выражать чрезвычайно сложные концепции. Разработчики
привыкли абстрактно мыслить об информации.
Код и конфигурация |2 9
кодирования и кодирования его в коде.6 Некоторые функции слишком сложны,
чтобы можно было легко построить на их основе интерфейс управления.
Хотя создание функций на основе конфигурации звучит заманчиво, это может
стать проблемой для управления и обслуживания. Когда редакторы могут
внедрять новые модули и функциональные возможности в производственную
среду, это может затруднить разработку нового кода для разработчиков. В
настоящее время веб-сайт совместно разрабатывают две группы: одна через
код, другая через конфигурацию. Эти две группы подчиняются разным
парадигмам тестирования и развертывания, и они могут не сообщать о том, что
они делают. Результатом могут стать загадочные, а иногда и катастрофические
проблемы.
1 Или по другой причине, о которой никто не говорит: внедрение дорогого программного обеспечения
часто рассматривается коллегами по отрасли как знак значимости. Людям нравится, когда на
конференциях к ним относятся серьезно, а имена систем случаются чаще, чем кто-либо может себе
представить.
35
Эти три типа поиска должны выявить одного или нескольких поставщиков
CMS, каждый из которых представляет одну из следующих парадигм
приобретения:
Открытый источник
Вы скачиваете и устанавливаете.
Коммерческий
Вы лицензируете (покупаете) и устанавливаете.
Программное обеспечение как сервис(SaaS)
Вы «арендуете» и пользуетесь.
Построй свой собственный
Вы развиваетесь с нуля, внутри своей организации.
Любой из них предоставит вам работающую CMS, с которой можно начать
внедрение. Однако в каждом из этих, казалось бы, простых вариантов
скрывается бесчисленное множество вариаций, особенностей и парадигм.
Открыть ИсточникCMS
Вероятно, в CMS доступно больше вариантов с открытым исходным кодом,
чем в любом другом жанре программного обеспечения. Наиболее часто
используемые платформы в мире — такие системы, как Wordpress, Drupal и
Joomla! — имеют открытый исходный код. (Фактически, почти все системы
стека LAMP имеют открытый исходный код, что демонстрирует тесную связь
между этим стеком технологий и философией открытого исходного кода.)
Изучение тонкостей открытого исходного кода выходит за рамки этой книги. 2
но ключевым моментом является то, что CMS с открытым исходным кодом
обычно можно использовать бесплатно без уплаты лицензионного сбора. У
всех этих систем есть веб-сайт, на котором вы можете загрузить программное
обеспечение, а затем установить его в своей среде и использовать.
При этом помните, что стоимость лицензии не является суммой ваших
расходов. Вам все равно потребуется:
Коммерческие CMS
Как и в случае с любым другим жанром программного обеспечения,
существует множество коммерческих поставщиков CMS, которые готовы
продать вам лицензию на использование их систем.
После нашего обсуждения открытого исходного кода вы, возможно, задаетесь
вопросом, зачем кому-то покупать, когда так много вариантов доступно
бесплатно. Во-первых, коммерческая компания позиционирует себя как более
формальная бизнес-структура, чем сообщество открытого исходного кода, что
важно для некоторых организаций (мы обсудим это позже). Во-вторых,
коммерческие поставщики обычно придерживаются более высоких стандартов
качества и функциональности.
Коммерческие CMS |3 9
они должны продолжать платить клиентам, а также получать доходы от
лицензионных сборов для финансирования профессионального развития.
Как и любое обобщение, это не всегда верно, поскольку некоторые системы с
открытым исходным кодом достаточно зрелы и широко используются, чтобы
конкурировать с любыми коммерческими предложениями. И наоборот,
некоторые коммерческие поставщики плохо справляются с контролем качества
и продают продукты, полные ошибок. Но, как правило, оно имеет место.
Кроме того, за последние пять лет произошло четкое разделение между
открытым исходным кодом и коммерческими CMS по признаку маркетинговых
функций. В то время как сообщество разработчиков открытого исходного кода
одержимо решением проблем управления контентом, коммерческий мир
перешел к контент-маркетингу, который представляет собой инструменты и
функции, которые помогают улучшить ваш контент после его публикации.
Говорят, что CMS с открытым исходным кодом созданы для директора по
информационным технологиям (директора по информационным технологиям),
тогда как коммерческие CMS созданы для директора по маркетингу (директора
по маркетингу). Это во многом справедливо и в отношении того, как системы
продаются: коммерческий сектор концентрирует свои продажи исключительно
на маркетинговых отделах своих клиентов, в то время как поставщики ПО с
открытым исходным кодом больше заинтересованы в попытках завоевать
сердца и умы ИТ-персонала.
Как и в случае с предложениями с открытым исходным кодом, различия
платформ очевидны. Очень немногие системы LAMP являются
коммерческими, в то время как многие системы .NET и Java имеют свою цену.
Наконец, помните, что цифры, обсуждаемые в этом разделе, относятся только к
стоимости лицензий. Покупка коммерческой CMS не освобождает вас от затрат
на ее внедрение — вам все равно придется найти (и заплатить) кого-то, кто
установит, настроит и шаблонизирует вашу систему. В некоторых случаях
коммерческие поставщики предоставляют такую возможность (так называемые
«профессиональные услуги»), а в других случаях у них есть «партнерская сеть»
интеграционных фирм, которые являются экспертами в своих системах и
готовы интегрироваться за платеж.
Модели лицензирования
Коммерческие системы редко имеют единую и простую цену. У продавцов
обычно есть запутанная система формул и таблиц для определения
окончательной цены с общей целью заставить состоятельных клиентов платить
больше, не теряя при этом меньшие продажи для клиентов с более скромными
бюджетами.
На момент написания этой статьи «средний рынок» грубо определяется как
системы с прейскурантной ценой (заявленной «официальной» ценой) от 20 000
до 80 000 долларов США, и почти все оценивается в соответствии с этой ценой
— поставщики классифицируются как выше или выше ниже среднего рынка.
40 | Глава 3: Приобретение CMS
Диапазон коммерческих цен огромен.Окунь5 продается за 79 долларов, в то
время как Adobe CQ нельзя купить менее чем за 250 000 долларов, а стоимость
крупных установок легко превысит семизначную сумму.
Вот наиболее распространенные способы определения цены:
Редактор/пользователь
Цена системы определяется количеством пользователей, редактирующих
данные, либо за рабочее место, либо одновременно. Реже цена системы
определяется количеством зарегистрированных общедоступных
пользователей, но обычно это применимо только к системам сообщества
или интрасети/экстранети, где ожидается, что посетители будут
зарегистрированы.
По серверу
Цена системы определяется количеством серверов, на которых она
работает (или, реже, количеством ядер ЦП). Это довольно
распространенная ситуация, поскольку для более крупных установок
потребуется больше серверов, что приведет к более высокой цене. В
разделенных системах, где среда доставки отделена от среды репозитория,
может возникнуть путаница: платите ли вы за серверы репозитория или за
серверы доставки? Или оба?
По сайту
Цена системы зависит от количества различных веб-сайтов, работающих на
ней. Это может быть размыто неопределенностью того, что представляет
собой «веб-сайт». Если мы переместим наш контент с
«microsite.domain.com» на «domain.com/microsite», останется ли у нас тот
же веб-сайт и лицензионная плата? А как насчет веб-сайтов с разными
доменными именами, которые обслуживают один и тот же контент
(например, фирменные сайты по интересам)? А как насчет альтернативных
доменов для разных языков («en.domain.com» для английского и
«de.domain.com» для немецкого)?
По характеристикам
Цена системы указана с учетом дополнительных пакетов, устанавливаемых
в дополнение к основному. Почти каждый коммерческий поставщик имеет
множество функций или пакетов, которые можно добавить к базовой
системе, чтобы повысить ценность и цену. Они варьируются от подсистем
электронной коммерции до инструментов маркетинга. Обратите внимание,
что каждая из этих функций также может лицензироваться пользователем,
сервером или сайтом, что также делает их цены переменными.
По объему контента
Цена системы зависит от количества контента, находящегося под
управлением. Это менее распространено, чем другие модели, поскольку
количество управляемых объектов контента сильно зависит от реализации.
Например, следует ли вам управлять комментариями в блоге? Или вы
можете переместить их в сопутствующую базу данных (или внешний
сервис, например Disqus) и уменьшить объем контента на 80 % и более?
5 На самом деле рекламируетсякак «Действительно маленькая CMS».
Коммерческие CMS |4 1
Стоимость большинства систем оценивается по нескольким осям, например, по
сочетанию редакторов, серверов и сайтов. Окончательную цену зачастую
невозможно определить без тщательной консультации с отделом продаж
поставщика.
Продавцы пытаются установить цену с учетом предоставленной ценности и
платежеспособности покупателя. Перечисленные здесь методы, по сути,
представляют собой прокси-модели того, что на самом деле может предпочесть
продавец: иметь внутреннюю информацию о том, сколько клиент может
заплатить, и устанавливать цену на свой продукт по этой цифре. Поскольку ни
один клиент никогда не позволит этого, поставщики используют такие
показатели, как количество редакторов или сайтов, чтобы дать
приблизительную оценку.
Программное обеспечениеПодписка
Одна вещь, на которую вы всегда можете рассчитывать при обращении к
коммерческим поставщикам, — это необходимость платить за подписку на
программное обеспечение, которая представляет собой постоянную ежегодную
плату, зависящую от покупной цены. Это вовсе не уникально для CMS —
почти все корпоративное программное обеспечение стоит одинаково.
Подписка обычно составляет процент от покупной цены — обычно от 18% до
22%. Первый год часто включается в покупку, но каждый последующий год
клиенту будет выставляться счет в годовщину покупки.
В среднем 20% в год, это быстро складывается. Простая математика подскажет
вам, что вы будете эффективно «перекупать» свою CMS каждые 4–6 лет.
Необходимость платить этот сбор зависит от поставщика. В большинстве
случаев вы можете просто прекратить оплату подписки в любое время и
продолжить использовать продукт, но вы потеряете все дополнительные
преимущества, которые дает плата за подписку. У большинства поставщиков
эти преимущества представляют собой комбинацию следующих факторов:
• Поддержка по требованию
• Обновления и исправления по мере их выпуска
• Бесплатные лицензии для серверов разработки или тестирования.
В конце концов, то, что когда-то было чистым рынком для поставщиков SaaS,
теперь значительно запуталось из-за изменений в технологиях и бизнес-
моделях. Если идея и преимущества SaaS вас привлекают, поймите, что
практически любой поставщик CMS теперь готов использовать модель, которая
эффективно имитирует модель SaaS, которая раньше была уникальной для
нескольких поставщиков.
• Редакторы
• Планировщики сайтов
• Разработчики
• Администраторы
• Заинтересованные стороны
Обратите внимание, что эти ярлыки представляют собой роли, а не людей. Возможно, вам
будет неприятно взглянуть на этот список.
— вы можете подумать, что ваш проект в чем-то несовершенен, потому что
вокруг вас не слоняются все эти люди. Однако следует понимать, что границы
между ролями не являются абсолютными, и редко можно увидеть проект, в
котором каждая описанная здесь роль была укомплектована отдельным
человеком.
1Для получения дополнительной информации по этой теме я рекомендую книгу Лизы с метким названием
«Управление хаосом: цифровое управление посредством дизайна».Уэлчман (Розенфельд Медиа).
53
Члены команды обычно выполняют несколько ролей, и в каждом разделе будут
отмечены часто пересекающиеся роли. А пока просто знайте, что для очень
небольшого проекта вся команда может состоять из одного разработчика и
одного редактора (а проект-хобби разработчика может представлять собой
шоу, полностью состоящее из одного человека).
Тем не менее, команда управления контентом обычно состоит из комбинации
следующих лиц.
Редакторы
Редакторы несут ответственность за создание, редактирование и управление
контентом внутри CMS. В этой книге мы будем много говорить о редакторах,
поскольку именно они будут наиболее тесно взаимодействовать с CMS после
запуска.
Редакторы имеют тенденцию объединяться в одну группу, но роль «редактора»
— это грубое обобщение: не все редакторы созданы равными, и у них могут
быть самые разные возможности.
То, что характеризует «нормального» или «основного» редактора, зависит от
проекта. Поэтому было бы полезно обсудить, как редакторы могут быть
ограничены в своих возможностях по уточнению своих подролей:
По разделу/филиалу/локации
Редакторы могут иметь возможность редактировать только определенную
часть контента на веб-сайте, будь то раздел или ветвь дерева контента (мы
поговорим о деревьях в разделеГлава 7), или какой-либо другой метод
локализации. Они могут иметь полный контроль над контентом в этой
области (например, раздел прессы или отдел английского языка), но не
иметь контроля над контентом в других областях.
По типу контента
Редакторы могут иметь возможность редактировать только определенные
типы контента (подробнее о типах контента мы поговорим в разделеГлава
6). Они могут управлять профилями сотрудников, которые появляются на
сайтах нескольких отделов, или управлять новостными статьями компании
независимо от их местоположения. Фактически, некоторым редакторам
может быть лучше определить, какие типы контента им не разрешено
создавать — например, некоторым редакторам может быть запрещено
создавать расширенный контент, такой как агрегаты или карусели
изображений.
Редактируя интерфейс
Редакторы могут быть ограничены интерфейсом, который им разрешено
использовать. В более крупных проектах нередко некоторые редакторы
направляются через специализированные, специально созданные
интерфейсы, предназначенные для того, чтобы позволить им управлять
только тем контентом, который находится под их контролем. Например,
если администратор вашей компании отвечает за обновление обеденного
меню в интранете и ничего больше, то ему не нужно понимание более
широкого интерфейса CMS и всех тонкостей, которые с ним связаны.
Редакторы | 55
случается даже только с конкретными атрибутами контента, в случае, если
объекты контента переведены лишь частично). Подробнее о вопросах
локализации мы поговорим вГлава 10.
Не все роли в этом списке будут заполнены. Сайтам без пользовательского
контента не потребуется роль для управления им. Организации, управляющие
документацией по продукту или содержимым библиотеки, могут не заниматься
маркетингом/оптимизацией. Редакция из одного человека не нуждается в
утверждающих. Контент, представленный на одном языке, не потребует
переводчиков.
Некоторые роли также могут быть заполнены извне. Менеджеры
пользовательского контента/сообщества могут не работать в организации. На
сайтах сообществ принято полагаться на самоконтроль самого сообщества,
предоставляя конкретным участникам возможность модерировать контент. В
таких ситуациях пользователи сайта будут выполнять квази-редакционную
роль, обычно обеспечиваемую разрешениями или, возможно, полностью
отдельной пользователем и системой управления.
Переводом контента часто занимаются сторонние организации. В этих случаях
переводчик будет работать удаленно и может вообще не работать с CMS,
вместо этого перемещая контент внутрь и наружу с помощью рабочего
процесса и формата обмена, специфичного для перевода, например XLIFF.2
Планировщики сайтов
Планировщики сайта несут ответственность за разработку веб-сайта, которым
будет управлять CMS. Большая часть их участия будет осуществляться до
запуска, а дальнейшее участие будет спорадическим по мере развития и
изменений сайта с течением времени.
Существует несколько подролей:
Контент-стратеги
Эта роль отвечает за разработку контента как целостно, так и тактически. В
качестве побочного продукта процесса планирования контента
специалисты по контент-стратегии определяют типы контента и
взаимодействия, которые должен поддерживать веб-сайт. Эта роль
потребует знаний о том, как CMS моделирует и агрегирует контент, чтобы
понимать любые ограничения дизайна. Дополнительные знания
особенностей маркетинга потребуются, если специалист по контент-
стратегии отвечает за оптимизацию маркетинговой ценности сайта перед
его запуском.
Дизайнеры пользовательского опыта (UX) и информационные архитекторы
Эти роли отвечают за организацию контента и проектирование
взаимодействия пользователей с веб-сайтом. Им необходимо будет понять,
как CMS организует контент и какие средства доступны для агрегирования
и представления контента конечным пользователям.
2Формат файла обмена локализацией XML — языковой стандарт для автоматического
импорта/экспорта для перевода контента. XLIFF обсуждается далее вГлава 10.
Разработчики
Разработчики несут ответственность за установку, настройку, интеграцию и
создание шаблонов CMS в соответствии с требованиями проекта.
Сколько усилий это потребует, зависит от сложности требований и от того,
насколько хорошо CMS соответствует этим требованиям «из коробки». Для
развертывания простого блога на базе WordPress потребуется совсем немного
разработки (а возможно, и вообще ничего), а создание корпоративной
интрасети с нуля — это огромная задача.
Как и редакторы, не все разработчики одинаковы. В рамках разработки
существует несколько категорий задач, которые определяют разные роли:
Конфигурация CMS
Эта роль отвечает за установку и настройку самой CMS, включая создание
модели контента, создание рабочих процессов и других инструментов
редактирования, создание групп пользователей, ролей и разрешений и т. д.
Эта работа выполняется на достаточно высоком уровне. уровне,
посредством средств и интерфейсов, предоставляемых CMS.
Бэкенд (серверная) разработка
Эта роль отвечает за более низкоуровневую разработку, выполняемую на
традиционном языке программирования (PHP, C#, Java и т. д.) для
выполнения более сложных задач управления контентом или для
интеграции CMS с другими системами. Этот разработчик должен иметь
опыт работы (1) с требуемым языком программирования и
(2) API CMS.
Разработка фронтенда (клиента) или шаблонизация
Эта роль отвечает за создание HTML, CSS, JavaScript, логики шаблонов и
другого кода, необходимого для представления управляемого контента в
браузере. Этому разработчику нужно только знать язык шаблонов и
архитектуру, предоставляемые CMS, а также то, как они интегрируются с
HTML, CSS и JavaScript. (Различные архитектуры шаблонов и парадигмы
могут существенно изменить обязанности этой роли, как мы увидим вГлава
9.)
Во многих случаях все три роли в разработке выполняются одним и тем же
человеком. В качестве альтернативы, очень распространенное разделение
заключается в том, что разработка внешнего интерфейса осуществляется
отдельно.
Разработчики | 57
формируется одним разработчиком, а разработка CMS и серверной части
выполняется другим разработчиком. В этих случаях разработчик внешнего
интерфейса отвечает за шаблонирование контента, которым внутренний
разработчик настроил CMS для управления и предоставления.
Визуальные дизайнеры все чаще пишут код своих собственных реализаций
внешнего интерфейса. Таким образом, один и тот же человек может
спроектировать полный интерфейс на основе каркаса, а затем в конечном итоге
создать шаблон CMS, отражающий этот дизайн.
Разделение между CMS и серверной разработкой зависит от CMS. Некоторые
системы позволяют выполнять огромный объем разработки из интерфейса, и
написание программного кода считается скорее исключением, чем правилом. 3
(и помните, что в мультитенантных средах SaaS возможность написания
программного кода может быть недоступна).
Другие системы спроектированы в первую очередь как платформы
программирования, а это означает, что большая часть конфигурации состоит в
основном из написания, компиляции и развертывания программного кода. В
этих случаях настройка CMS и разработка серверной части — это во многом
одно и то же.
Администраторы
Администраторы несут ответственность за непрерывную работу CMS и
связанной инфраструктуры. В этой группе есть несколько подролей:
3Drupal славится этим. Вы можете реализовать значительный объем функций в этой CMS, даже не
написав ни строчки кода. Таким образом, некоторые сайты Drupal могут быть созданы вообще без
необходимости в бэкэнд-разработчике, хотя, как мы обсуждали в«Код и конфигурация» на странице
29, это может привести к другим осложнениям.
Заинтересованные стороны
Заинтересованные стороны проекта CMS — это аморфная группа,
представляющая людей, ответственных за результаты, которых призвана
достичь CMS. Заинтересованными сторонами обычно являются представители
бизнеса или маркетинга (в отличие от сотрудников редакции или ИТ-
специалистов), которые рассматривают CMS просто как средство для
достижения цели.
В целом заинтересованные стороны ожидают от CMS выполнения одной из двух задач:
• Увеличить доход.
• Сокращение затрат и/или рисков.
Этих целей можно достичь разными способами, и CMS является одним из них.
Заинтересованные стороны часто не имеют прямого контакта с CMS, и их
могут не волновать конкретные функции, которые обеспечивает CMS: их
единственной целью является результат, который может обеспечить CMS.
Например:
Заинтересованные стороны |5 9
Обратите внимание, что в каждом случае конечной целью не была установка
новой CMS. CMS — это просто средство достижения более крупной
заявленной бизнес-цели.
В каждом из этих трех примеров есть кто-то, кто (1) не собирается напрямую
использовать CMS и (2) не собирается разрабатывать или интегрировать CMS.
Итак, почему заинтересованные стороны так важны? Потому что обычно
именно они принимают решения о покупке CMS и контролируют бюджет, из
которого будет финансироваться проект.
Они включены в это обсуждение команды CMS, потому что иногда за
деревьями легко потерять из виду лес. Чем ближе вы подходите к проекту CMS
— как редактор, администратор, планировщик сайта или разработчик — тем
легче вам зацикливаться на мелких деталях.
Никогда не упускайте из виду тот факт, что заинтересованные стороны мало
заботятся о чем-либо, кроме важного вопроса: приведут ли эти расходы к
достижению бизнес-цели, к которой мы стремимся? Особенности того, как
CMS это делает, — это просто детали.
Заинтересованные стороны |6 1
ЧАСТЬ II
Компоненты систем управления
контентом
ГЛАВА5
Анализ функций CMS
«Фитнес кЦель"
Оценивая что-либо, мы склонны мыслить в терминах относительности.
Если мы говорим, что какая-то вещь находится «слева», мы подразумеваем, что
какая-то другая вещь находится справа от нее. В конце концов, вы не можете
быть на левой стороне ничего, поэтому концепция левости существует только
потому, что что-то еще находится справа.
Аналогично, системы управления контентом существуют только в четкой связи
с проблемой, которую они должны решить. Их компетентность можно оценить
только с точки зрения их отдаленности от того, что необходимо для вашей
конкретной ситуации.
Правильный ответ на вопрос управления контентом лежит в пересечении
десятков факторов, в том числе:
Это всего лишь пять факторов. Вероятно, их еще сотни, и вес отдельных
факторов будет разным для каждой организации.
Сравнивая системы, легко взглянуть на две функции и сказать: «Эта лучше».
При этом негласное окончание этого предложения звучит так: «для конкретных
требований, о которых я сейчас думаю». То, что подходит для одного набора
требований, может быть явно неправильным для другого.
Более того, некоторым приложениям просто не нужны определенные функции.
Если вы единственный редактор своего веб-контента и точно знаете, что в
будущем не будет других редакторов (это встречается чаще, чем вы думаете),
то концепции работы…
оценки.
"ДелатьСиндром «всего»
Системы управления контентом, как и другое программное обеспечение,
стремятся включить в один пакет как можно больше функций. Ни один
поставщик (или сообщество открытого исходного кода) не хочет сказать: «Мы
не предлагаем эту функцию», поэтому они заинтересованы в том, чтобы
справиться с каждой возможной ситуацией или непредвиденным
обстоятельством. Если редактору приходится выйти за пределы системы, это
считается провалом.2
В результате системы управления контентом с каждым годом становятся все
более сложными. Отрасль неуклонно отходила от четко определенного ядра,
существовавшего 15 лет назад. Мы уже обсуждали переход от контента к
управлению сообществом, и теперь у нас есть системы, управляющие
социальными сетями, предлагающие мощные маркетинговые пакеты и даже
пытающиеся выступать в качестве общих сред разработки приложений.
Цена, которую мы платим за это, — сложность. Список функций, которые вы
собираетесь игнорировать и пытаться найти способы отключить, может легко
оказаться длиннее, чем список функций, которые вы действительно
собираетесь использовать.
По мере усложнения систем они имеют тенденцию становиться более
универсальными. Разработчики, работающие над любой системой слишком
долго, скатываются к более крупным архитектурным концепциям и
структурам. Они становятся тем, кого Джоэл Спольски назвал
«архитектурными астронавтами»:
Когда вы поднимаетесь слишком далеко, с точки зрения абстракции, у вас
кончается кислород. Иногда умные мыслители просто не знают, когда
остановиться, и создают эти абсурдные, всеобъемлющие, высокоуровневые
картины Вселенной, которые хороши и прекрасны, но на самом деле вообще
ничего не значат.3
Подобные гипотетические разговоры действительно случаются при
обсуждении управления контентом:
2 Напротив, компания Basecamp (ранее 37 Signals) сказала о своем популярном инструменте
управления проектами: «Наш ответ по умолчанию на каждый запрос функции — нет». Функции
должны найти свое место в продукте. Планка для включения в продукт значительно высока. , и
разработчики на самом деле гордятся тем, чего не делает их программное обеспечение.
3 «Не позволяйте астронавтам-архитекторам напугать вас», 21 апреля 2001 г.
4 Я помню, как около 20 лет назад видел отличную демонстрацию рабочего процесса от одной ECM-
компании. Разработчик рабочего процесса может просто перетаскивать прямоугольники и соединять
их стрелками для обозначения состояний и переходов. Это было элегантно и просто. Забыли
упомянуть, что это была еще и надстройка в 15 000 долларов (и это в долларах 1997 года).
5 Филип Мадд, Игра HEAD: Высокоэффективное аналитическое принятие решений – искусство решения
сложных проблемБыстро(Издательская корпорация Liveright, 2015).
Данные Моделирование101
Моделирование не является чем-то уникальным для управления контентом.
«Моделирование данных» существует столько же, сколько и базы данных. На
протяжении десятилетий разработчикам баз данных приходилось переводить
логические
• Вы в каком городе?
• На каком этаже вы находитесь?
• Какие еще предприятия находятся поблизости?
• На какой стороне улицы вы находитесь?
1 Если вы думаете, что, возможно, вам будет полезен опыт проектирования баз данных, вы абсолютно
правы. С этой целью я рекомендую книгу «Проектирование баз данных для простых смертных»
Майкла Эрнандеса (Addion-Wesley). Даже если вам никогда не приходилось проектировать
традиционную базу данных, способность отделять модель данных от хранящейся в ней информации
является ключевым профессиональным навыком.
Краевые случаи
В разработке программного обеспечения наш сложный адрес
называется «крайним случаем», поскольку это вариант
использования на границе основного направления.
Проектирование программного обеспечения изобилует такими
ситуациями, и вы не сможете учесть их все. Попытки
справиться со всем приведут к раздутому программному
обеспечению, которое станет настолько универсальным и
сложным, что даже не сможет выполнить свою
первоначальную задачу.
Только опыт и знание ваших пользователей и требований
могут помочь вам решить, какие крайние случаи следует
учитывать.
2 Это методы отправки почты военным и государственным служащим, проходящим службу в
отдаленных местах. Это аббревиатуры от авиапочты, почтового отделения флота и
дипломатического почтового отделения.
3 Джош много лет разрабатывал Big Medium CMS, а недавно написалПроектирование для сенсорного
управления (Книга отдельно).
4 Личное общение с автором, декабрь 2007 г.
5 Видеть«Реляционная модель данных для больших общих банков данных», Э.Ф. Кодд.
80 | Глава 6: Моделирование контента
упрощайте больше, чем хотелось бы, в то время как другие, по сути, являются
тонкой оболочкой вашей собственной реляционной базы данных.6
Почему не все CMS такие? Потому что зачастую это больше, чем вам нужно.
Индустрия CMS развивалась вокруг общих проблем с контентом и создала
шаблоны для решения ситуаций, которые возникают снова и снова.
Большинство проблем управления веб-контентом попадают в диапазон,
охватываемый этими шаблонами — исключениями являются… подождите…
крайние случаи, — поэтому их достаточно для нормального функционирования
при большинстве требований.
То, попадает ли конкретная CMS в диапазон возможностей моделирования,
оказывает огромное влияние на успех или провал вашего проекта. Некоторые
проекты имеют сложные модели контента и полностью зависят от способности
CMS точно их представлять. В этих случаях ограничения моделирования
контента может быть трудно обойти.
«Постраничная» CMS
Основной вопрос заключается в том, управляет ли ваша CMS контентом или
страницами. Предполагает ли ваша CMS, что каждая часть контента в
репозитории должна создавать веб-страницу? Или это чистые объекты
контента, которые затем можно встроить в страницы?
Объединение объекта контента и страницы привело к тому, что фраза «CMS на
основе страниц» используется для описания CMS, которая явно управляет веб-
страницами, а не более абстрактных понятий контента без представления. Эта
фраза обычно всплывает при сравнении двух систем и обычно подразумевается
уничижительно, поскольку предполагается, что управление простыми
страницами менее благородно и сложно, чем управление чистым контентом.
Это справедливое замечание, но оно может быть неуместным по нескольким причинам.
Во-первых, хотя многоканальная публикация и повторное использование
контента очень ценны, не во всех случаях они нужны. Во многих случаях 99%
просмотров контента приходится на просмотры страниц в браузере, поэтому
управление страницей имеет первостепенное значение.
Во-вторых, тот факт, что страницами управляет CMS, не означает, что
содержимое этих страниц нельзя использовать другими способами. Даже если
ваша CMS предлагает вам тип контента под названием «Страница статьи
новостей», это не означает, что контент нельзя извлечь и перепрофилировать в
такие вещи, как RSS-каналы и веб-API.
Хотя настоящая CMS на основе страниц, скорее всего, будет содержать
некоторые свойства, специфичные для веб-страницы — мета-теги, метки меню,
выбор шаблонов и т. д. — она также будет включать более нейтральную, не
требующую представления информацию, которую можно использовать
другими способами.
В конце концов, разница между «страницей» и более общим «элементом
контента», похоже, заключается в возможности адресации URL. Страницы
получают URL-адреса и предназначены для просмотра изолированно, как
основной объект контента, полученный в результате одного веб-запроса.
Элементы контента (не страницы) предназначены для поддержки другого
контента посредством ссылок или встраивания (см.«Внедрение контента» на
странице 97.), и не будет иметь индивидуальной URL-адресации.
84 | Глава 6: Моделирование контента
Когда производный контент является собственным контентом?
В какой момент твит о новостной статье сам по себе
становится контентом? Чтобы создать твит из нашей CMS, мы
можем просто добавить некоторые атрибуты к типу контента
новостной статьи — например, «Текст Twitter». Это означает,
что твит «прикрепляется» к той же модели контента, что и
сама новостная статья.
Но в какой момент имеет смысл отделить информацию,
необходимую для твита, и опубликовать ее как отдельный
объект контента? Мы могли бы создать еще один тип
контента — «Твит». У него будет атрибут для текста и,
возможно, еще один атрибут для ссылки на статью, которую
мы с его помощью продвигаем.
В таком виде он будет жить своей жизнью в нашей CMS. Это
будет объект со своим собственным жизненным циклом
контента, разрешениями, рабочим процессом и даже
интерфейсом редактирования. Необходимость или
преимущество этого зависит от ваших требований.
• Типы
• Атрибуты
• Отношения
Типы контента
Тип контента — это логическое разделение контента по структуре и
назначению. Каждый тип выполняет свою роль в модели и содержит разную
информацию.
Люди каждый день мыслят типами. Вы маркируете конкретные вещи в
зависимости от того, к какому типу они относятся — с точки зрения «есть»:
• Имя
• Фамилия
• Должность
• Дата приема на работу
8 В оставшейся части книги я буду писать названия типов контента с заглавной буквы как имена
собственные. Я буду писать объекты контента строчными буквами (например, конкретная статья
является объектом типа Article).
Переключениетипы
Переключение базового типа контента после того, как на его основе был создан
объект контента, может оказаться логически проблематичным.
Предположим, мы создали часть контента на основе типа контента «Биография
сотрудников». Теперь, по какой-то причине, мы хотим преобразовать это в
пресс-релиз. У нас есть проблема, потому что у нас есть информация,
специфичная для типа «Биография сотрудника», которой нет в типе «Выпуск
новостей» (например, «Имя»), а это означает, что когда мы переключаем типы,
этой информации некуда идти. Что с этим происходит?
Определение модели контента | 87
По этой причине переключение типов контента после его создания часто не
допускается. Если это так, вам придется принять трудные решения о том, что
произойдет с информацией, которой нет логического места в будущем типе
(Рисунок 6-2).
ВстроенныйАтрибуты
Большинство CMS имеют несколько встроенных атрибутов, которые
автоматически существуют в каждом типе контента и их не нужно явно
добавлять в модель контента. К ним относятся:
ИДЕНТИФИКАТОР
Каждый без исключения объект контента имеет идентификатор
определенного типа, который однозначно идентифицирует этот контент,
мало чем отличаясь от первичного ключа в таблице базы данных
(фактически, за кулисами, это часто является первичным ключом таблицы
базы данных). Большинство систем имеют числовые инкрементальные
идентификаторы. Некоторые другие используют GUID,11 что полезно при
перемещении контента между установками, поскольку они гарантированно
будут глобально уникальными.
Титул или имя
В большинстве систем есть какой-то способ назвать объект контента.
Обычно это явное поле «Заголовок», которое либо используется только как
внутренний заголовок, либо имеет двойное назначение в качестве
отображаемого заголовка объекта (заголовок пресс-релиза, например).
9 «Форматированный текст» часто используется для обозначения любого текста, который допускает
встроенное форматирование, например, полужирный, курсив и т. д. В большинстве случаев это
означает HTML. Таким образом, предполагается, что «редактор форматированного текста» — это
визуальный редактор, который генерирует HTML в фоновом режиме. Однако в некоторых системах
термин «форматированный текст» используется для обозначения полей обычного текста, которые
позволяют вручную вставлять теги HTML или даже сокращенные форматы, такие как Markdown.
10 «Что видишь, то и получаешь». Редактор WYSIWYG — это интерфейс редактирования расширенного
текста, который генерирует HTML, нопозволяет редактировать текст визуально, вместо использования
тегов или другой разметки.
11 Глобальные уникальные идентификаторы. GUID — это последовательность случайных чисел и
символов, достаточно длинная, чтобы практически гарантировать уникальность. Общая длина
составляет 32 цифры, что достаточно для того, чтобы гарантировать, что если бы каждый человек на
Земле обладал 600 миллионами различных GUID, вероятность существования нового GUID все
равно была бы только 50%.
Проверка атрибута
Чтобы гарантировать, что информация введена правильно, ее необходимо
проверить, что означает ее отклонение, если она не имеет правильного формата
или значения для своей цели.
Базовая проверка осуществляется через тип данных. Если что-то должно быть
числом, то оно должно быть введено как действительное число. Кроме того,
интерфейс редактирования может обеспечить это, отображая только небольшое
текстовое поле, позволяющее вводить только числовые символы.
Однако тип данных не рассказывает всей истории. Что, если наше число
представляет собой всего лишь число по формату, но мы хотим, чтобы это
число было годом? Тогда нам потенциально потребуется проверить его
другими способами: по значению, шаблону или с помощью какого-либо
специального метода.
Мы можем проверять значения через диапазоны. В нашем примере с годом,
скорее всего, это должно быть четырехзначное положительное целое число (в
зависимости от того, разрешены ли мы даты до нашей эры или даты после 9999
года нашей эры), и оно, скорее всего, должно находиться в определенном
диапазоне. Например, мы можем потребовать, чтобы это было в прошлом или в
течение определенного определенного периода (например, от 100 лет в
прошлом до текущего года).Рисунок 6-4 показывает пример указания
допустимого диапазона для поля в Drupal.
Определение модели контента | 91
Рисунок 6-4. Варианты числовой проверки в Drupal
• Заголовок
• Тело
• Заголовок
• Тело
• Краткое содержание
• Дата публикации
Рисунок 6-5. Базовый тип страницы предоставляет заголовок и тело для каждого
типа, который его наследует: запись в блоге, событие и тема справки получают
заголовок и тело, а затем добавляют к ним определенныеатрибуты свои
• Заголовок
• Субтитры
Имеет ли это смысл как отдельный тип? Вероятно, нет — какой контент имеет
только заголовок и подзаголовок? Однако, когда он определен как часть более
крупного типа, это имеет больше смысла. Многие типы могут использовать
заголовок и подзаголовок как часть своего определения.
С этой целью мы могли бы определить тело статьи как:
• Тело
• Изображение
• Подпись к изображению
• Имя автора
• Биография автора
• Изображение автора
Затем мы могли бы определить тип статьи как просто комбинацию всех трех:
• Заголовок
• Субтитры
• Тело
• Изображение
• Подпись к изображению
• Имя автора
• Биография автора
• Изображение автора
Чем нам будет лучше в этой ситуации? Потому что мы можем повторно
использовать части для определения других типов. Например, мы могли бы
использовать наш тип заголовка контента в типе галереи изображений,
поскольку заголовок и подзаголовок являются общими как для него, так и для
статьи. Затем, если мы добавим что-то в заголовок контента, это будет
добавлено ко всем типам, использующим этот тип.13
Опять же, эта возможность встречается редко, но там, где она доступна, она
значительно повышает управляемость сложной модели контента.Рисунок 6-7
показывает, как можно добиться частичной композиции типов в Sitecore CMS.
13 Обратите внимание на использование слова «использовать», а не «наследовать». Вы можете «наследовать» от одного другого типа. Вы
«используете» несколько типов.
При составлении типов отношения являются составными, а не родительскими.
Встраивание контента
Некоторые системы допускают встраивание одного элемента контента в другой
элемент либо в форматированный текстовый контент, либо в структуры
данных, которые отображают списки ссылочного контента. Встроенный
контент часто называют «блоками» или «виджетами».14
Богатый текствстраивание
Рассмотрим проект, для которого требуется страница фотогалереи. Вы можете
легко смоделировать тип фотогалереи с заголовком, например, вводным
абзацем текста вверху (описание), и изображениями для галереи под ним.
Затем предположим, что редакторы говорят: «Ну, нам бы хотелось разместить
еще один абзац текста внизу страницы, под галереей». Вы можете справиться с
этим, изменив атрибут «Описание» на «Верхнее описание» и «Нижнее
описание», а затем изменив шаблон для отображения как над, так и под
галереей.
Вернемся к редакторам: «Теперь у нас есть ситуации, когда нам нужно более
одной галереи на странице».
14 Обратите внимание, что блоки или виджеты часто ссылаются на управляемый контент, но это не
обязательно. Они могут просто отображать на странице функции, не связанные с контентом,
например, прогноз погоды.
Определение модели контента | 97
Что теперь?
Возможно, лучшим решением будет смоделировать тип «Фотогалерея» как
элемент, который можно встроить в форматированный текст. Это означает, что
фотогалерея больше не может быть страницей с URL-адресом, а скорее
встраиваемым элементом контента (опять же во многих случаях «блоком» или
«виджетом»), который заключен в страницу. Используя это, редакторы могли
записать свою страницу контента в виде форматированного текста и встроить в
нее объект этого типа контента (Рисунок 6-8).
Отношения
Содержание моделирования бывает двух основных разновидностей:
Дискретный
Описание типа внутреннего контента
Реляционный
Описание типа контента по тому, как он соотносится с другим контентом.
В нашем примере с биографией сотрудника есть обе разновидности. Такие
атрибуты, как имя и фамилия, относятся только к одному объекту контента.
Тот факт, что имя одного человека
Отношения |1 0 3
«Джо Смит» не имеет никакого отношения к какому-либо другому контенту.
Это дискретные, автономные данные этого контента.
Однако атрибут Manager является ссылкой на другой объект контента, что
означает, что он реляционный или определяет, как объект контента
«относится» к другому объекту контента.
Рисунок 6-12 показан пример реляционного моделирования в Episerver, где
свойство под названием «Ссылка на страницу» позволяет редакторам выбирать
другую страницу в CMS в качестве целевой.
Состав контента
Некоторый контент не прост, и его лучше всего моделировать как группу
объектов контента, работающих вместе в структуре. Таким образом,
логический фрагмент контента состоит из нескольких объектов контента.
104 | Глава 6: Моделирование контента
Классическим примером может быть журнал. У нас есть тип контента
«Проблема», но он состоит из следующего:
Содержание МодельУправляемость
Любая модель контента — это баланс между сложностью, гибкостью и
полнотой. У вас может возникнуть соблазн учесть каждую возможную
ситуацию, но это почти всегда будет иметь побочный эффект в виде
ограничения гибкости или увеличения сложности.
Например, при работе с типами контента редакторы должны иметь
возможность понимать различные доступные типы, чем они отличаются и
когда использовать один вместо другого. В некоторых ситуациях может иметь
смысл объединить два типа для простоты и просто учесть различия в
представлении.
Может ли тип контента «Страница» использоваться в качестве публикации в
блоге? Если на странице также есть поля «Сводка», «Автор» и «Дата
публикации», не проще ли просто отображать их в шаблоне только тогда, когда
они заполнены? Если Страница создана внутри типа контента «Сообщение в
блоге», можем ли мы рассматривать эту страницу как сообщение в блоге и
предоставить редакторам на один тип меньше, который нужно понимать?
Упростит это или усложнит задачу, зависит от ситуации и редакторов. Если
они часто работают с CMS для создания очень требовательного контента, то им
могут быть полезны два отдельных типа. Если они создают контент настолько
редко, что их почти каждый раз приходится переобучать, то лучше
использовать один тип.
Если у вас нет возможности наследовать типы контента, то в ваших интересах
ограничить типы контента настолько, насколько это разумно. Имея модель
контента с 50 различными
1 Почему информация растет: эволюция порядка: от атома к экономике Сезара Идальго (Basic Books).
109
Аналогично, контент часто становится более ценным в сочетании с другим
контентом. Эти комбинации называются агрегатами. В некотором смысле
совокупность контента сама становится контентом. «Содержимое» в данном
случае заключается в выборе, сочетании и упорядочении более мелких
элементов контента, которые собираются вместе и образуют новое целое.
Агрегация контента — это способность CMS группировать контент. Обратите
внимание, что мы не слишком конкретны: существует множество типов
агрегаций и множество способов, с помощью которых CMS может это сделать.
Более того, эта способность настолько очевидна, что ее можно воспринимать
как нечто само собой разумеющееся. Мы склонны просто предполагать, что
каждая CMS делает это в той степени, которая нам нужна.
Например:
Форма контента
Форма контента относится к общим характеристикам модели контента, если
рассматривать их в совокупности и сравнивать с моделями использования
потребителей вашего контента. Различные шаблоны и модели использования
приводят к явным различиям между контентом и требованиями к его
агрегированию. Контент может быть:
Серийный
Этот тип контента организован в виде последовательной «строки»,
упорядоченной по некоторому параметру. Очевидным примером является
блог, который представляет собой агрегацию постов в обратном
хронологическом порядке. Очень похоже на это обновления в социальных
сетях — например, поток твитов.
— или ленту новостей. Этот контент не обязательно должен быть
организован в какую-либо более крупную конструкцию, кроме того, где он
расположен в хронологическом порядке относительно другого контента.
Глоссарий также можно считать серийным изданием — это простой список
терминов, упорядоченных по названиям в алфавитном порядке.
Иерархический
Этот тип контента организован в виде дерева. В дереве есть корневой
объект содержимого, имеющий несколько дочерних элементов, каждый из
которых сам может иметь одного или более дочерних элементов и так
далее. Одноуровневые элементы контента (элементы одного родителя)
могут иметь произвольный порядок. Деревья могут быть широкими (много
дочерних элементов под каждым родителем), узкими (меньше дочерних
элементов), мелкими (меньше уровней) или глубокими (больше уровней).
Примером этого являются основные страницы многих простых
информационных веб-сайтов. Веб-сайты обычно организованы в виде
деревьев: есть основная навигация («Продукты», «О нас», «Контакты»),
которая ведет к вторичной навигации (Продукт А, Продукт Б и т. д.).
Навигационные агрегаты для этих сайтов часто можно получить на основе
положения объектов контента в дереве.
Форма контента |1 1 1
Табличный2
Этот тип контента имеет четко определенную структуру одного
доминирующего типа и обычно оптимизирован для поиска, а не просмотра.
Представьте себе большую электронную таблицу Excel с помеченными
столбцами заголовков и тысячами строк. Примером может служить база
данных местоположений компаний. Там может быть 1000 мест, четко
организованных в столбцы (адрес, город, штат, номер телефона, часы
работы и т. д.). Пользователи не будут просматривать эту информацию.
Скорее, они ищут его по параметрам.
Сеть
Этот тип контента не имеет более крупной структуры, кроме связей между
отдельными объектами контента. Весь контент является равным, плоским и
неупорядоченным по отношению к другому контенту, и нет ничего, кроме
связей между контентом, связывающих его вместе. Очевидным примером
этого является Wiki. Вики-страницы не имеют структуры (некоторые
допускают иерархическую организацию страниц, но большинство — нет),
и весь контент удерживается вместе только за счет связей между
страницами. Социальная сеть, если ею управлять как контентом, может
быть еще одним примером. Контент («люди») равноправен в сети и
произвольно связан («друзья») с другим контентом.
Реляционный
Этот тип контента имеет четко определенные структурные отношения
между несколькими высокоструктурированными типами контента, подобно
типичной реляционной базе данных. В базе данных фильмов в Интернете,
например, есть фильмы, в которых есть один или несколько актеров, ноль
или более сиквелов, ноль или более элементов викторины и т. д. Эти связи
обязательны — например, вы не можете добавить элемент викторины для
фильма, который не имеет не существует. Элемент викторины должен быть
связан с фильмом и не может быть добавлен, пока фильм не существует.
Различные CMS имеют разные уровни возможностей обработки различных
форм контента. Например:
The ГлобальныйДерево
Иерархическое дерево — это естественный способ
организации информации для людей, поскольку оно имеет
тенденцию отражать то, как мы думаем об информации и
работаем с ней — настолько, что некоторые системы
используют дерево глобально, а не только для контента. Эти
системы хранят все в виде дерева, при этом содержимое веб-
сайта представляет собой всего лишь один узел. Пользователи,
группы, шаблоны, настройки, даже иногда вплоть до надписей
кнопок в редакторах форматированного текста — все это
хранится в виде объектов в дереве, и доступ ко всем данным
осуществляется через один и тот же API. ВидетьРисунок 7-4
для примера из Sitecore.
Рисунок 7-4. Пример глобального дерева от Sitecore — эта система хранит почти
каждый битданных в древовидной структуре, включая шаблоны и настройки
системы
География контента |1 1 5
Если у страницы не может быть дочерних элементов, то нам придется найти
другой способ связать эти страницы вместе. Единственное содержимое
пространственных отношений в этих системах — это родственные отношения с
содержимым в той же папке. (Что усложняет ситуацию, так это то, что папки
часто рассматриваются как простые сегменты, которые не позволяют
произвольно упорядочивать содержимое внутри них — подробнее об этом
позже в этой главе.)
Другие системы могут зависеть от простой модели разделения типов контента,
в которой тип контента определенной части контента является основным
географическим регионом.3 Вы можете легко разделить весь домен контента по
типу контента и, возможно, по некоторым другим параметрам, но иногда не
более того. Например, мы можем легко просмотреть все выпуски новостей, но
мы не создаем контент в каком-то конкретном месте, и он не существует в
пространственном отношении к какому-либо другому контенту.Рисунок 7-5
показывает инструменты разделения типов в Drupal.
Географическая предвзятость
Как я уже упоминал, в колледже я был большим поклонником Джеймса Бонда.
На заре Интернета я часами проводил в группе Usenet alt.fan.james-bond,
обсуждая одну из самых распространенных тем для поклонников Бонда: кто из
актеров лучше всего справился бы с этой ролью? 4 Эти дебаты часто сводились
к следующему: первый актер, которого вы когда-либо видели в роли агента
007, вероятно, ваш любимый.
То же самое и с географией. Первый стиль географии, с которым вы работали,
часто воспринимается как «правильный» способ организации контента. Это
важно, потому что географическое положение системы абсолютно определяет
то, как с ней работают разработчики и редакторы. География играет огромную
роль в формировании концептуальной модели системы и ее содержания.
Большую часть своей карьеры я провёл, работая с системами с сильными
деревьями контента. Таким образом, мои мысли о CMS развивались вокруг
организации контента в иерархию. По сей день Drupal в этом отношении меня
озадачивает. Я понимаю, что он чрезвычайно популярен и имеет тысячи
приверженцев, но я борюсь со всем, что не имеет в своей основе дерева
контента. Я открыто признаю, что это просто предвзятость, вытекающая из
большей части моего профессионального опыта.
Разрушить подобные предубеждения может быть сложно. Из-за этого
интеграторы могут испытывать трудности при переходе с одной платформы на
другую. Они часто пытаются принудительно вписать новую платформу в
старую парадигму, с которой им комфортно, и это редко срабатывает хорошо.
4 Для справки, это был Тимоти Далтон. Это было окончательно и окончательно решено на всю
вечность и теперь является просто неоспоримым фактом. Если кто-то не согласен, покажите ему эту
сноску и медленно отступите.
География контента |1 1 7
За кулисами этот интерфейс размещает контент в правильном месте
относительно более широкой географии, при этом редактор не знает об этом и
не может каким-либо образом на него повлиять.
Тирания Дерева
Деревья контента очень распространены в CMS, но они могут быть
проблематичными, когда большая часть функциональности привязана к одному
дереву. В этих случаях вы можете обнаружить, что дерево тиранически
контролирует ваш контент, и простые проблемы становится труднее решить.
Например, в различных системах следующая функциональность может быть
каким-то образом связана с тем, где в дереве находится часть контента:
• Разрешения
• Разрешенные типы контента
• Рабочий процесс
• URL-адрес
• Шаблоннастройки
География контента |1 1 9
Если есть только одно дерево, то дерево может показаться «тираническим»,
навязывающим всю эту функциональность контенту исключительно на основе
его положения. Например, вы можете сгруппировать контент в одном месте в
дереве, чтобы упростить назначение разрешений, но хотите более детальный
контроль над выбором шаблона, чем позволяет положение в дереве.
В этих случаях система должна позволять настройкам и конфигурации каким-
то образом отклоняться от дерева. Применение этой информации на основе
положения дерева, безусловно, может быть эффективным, но оно может
перейти черту ограничения, и система должна иметь интеллектуальный и
интуитивно понятный способ обойти это, когда это необходимо.
Кроме того, привязка навигации к положению объекта контента в дереве может
стать проблематичной, если одна и та же ссылка должна появиться в двух
местах сайта. Если навигация по веб-сайту создается путем обхода дерева, вы
ограничены тем, что присутствует в дереве. Если контент должен быть в двух
местах, как с этим справиться?
К счастью, большинство систем, использующих дерево контента, имеют
некоторый механизм, позволяющий контенту появляться более чем в одном
месте. Обычно один из обликов обозначается как «основная» локация, а второй
— это просто заполнитель, ссылающийся на первый. Навигация может
осуществляться одним из двух способов: второе местоположение фактически
отправляет пользователя «по дереву» в первое местоположение или отображает
контент «на месте», по сути предоставляя одному и тому же контенту два URL-
адреса. На практике обычно отдается предпочтение первому варианту.
При отображении внешних навигационных ссылок (на другой веб-сайт) они
обычно должны быть представлены объектом контента. Тип с именем
«Внешний URL-адрес» или что-то подобное моделируется так, чтобы
содержать URL-адрес, на который редактор хочет создать ссылку. При
отображении в навигации этот объект отображает гиперссылку за пределами
сайта.
• Неявный/внутренний
• Явный/внешний
Контент может неявно создаваться как часть более крупной структуры. Это
часто встречается в дереве контента и моделях разделения типов. Когда вы
создаете страницу для продукта X на странице «Продукты», вы создаете связь.
Эти две страницы неразрывно связаны друг с другом как родительская и
дочерняя.
Другими словами, их отношения являются внутренними (или «неявными») —
каждый объект контента знает, где он находится в структуре. Тот факт, что
Продукт X является дочерним продуктом Продуктов или что ваш Пресс-релиз
является частью более крупной совокупности всех Пресс-релизов, является
характеристикой, неотделимой от содержания.
И наоборот, явная агрегация означает, что связь между этими двумя объектами
контента не находится в самих объектах. Если мы свяжем два объекта в Main
АгрегацияФункциональность
Агрегации контента могут иметь множество функций, наличие или отсутствие
которых радикально повлияет на способность редактора получить желаемый
результат.
122 | Глава 7: Агрегация контента
Статический и динамический
Конкретная агрегация может быть статической, что означает, что редактор
произвольно выбрал определенные объекты контента для включения в
агрегацию, или динамической, что означает, что содержимое агрегации
определяется в любой конкретный момент по заданным критериям:
Рисунок 7-6. Статически созданный список контента для карусели изображений в Episerver.
Агрегационная функциональность |1 2 3
дает им возможность настроить его. Они могут иметь возможность поиска по
типу, дате публикации, автору и, возможно, по стоимости свойства.
Когда эти методы терпят неудачу, это может быть крайне неприятно. Либо
CMS несовершенна, либо редактор просто хочет агрегировать контент,
используя такую эзотерическую комбинацию критериев, от которой нельзя
разумно ожидать, что ни одна CMS обеспечит такой уровень специфичности.
Например, предположим, что ваш редактор хочет отобразить совокупность
всех объектов «Выпуск новостей» за 2015 год, отнесенных к категории
«Африка», но только тогда, когда текст не содержит фразу «AFRICON 2015»
(поскольку идет подготовка к конкретной конференции). в Африке могут
исказить результаты). Также должно быть включено все, что содержит слово
«Африка» из любой категории, а также любой пресс-релиз, написанный
автором, назначенным для места в Африке в течение 2015 года.
Возможно, существуют некоторые CMS, которые позволяют редакторам
настраивать этот уровень специфичности из интерфейса, но их очень мало. В
таких ситуациях обычно необходимо обратиться к разработчику за помощью,
создав на основе кода пользовательскую агрегацию.
ДополнительныйИндексирование
Я прочитал несколько книг об организации и продуктивности, которые
сводились к одному и тому же совету: экстернализировать память. 5 Запишите
что-нибудь. Конечно, это непривлекательный совет, но он эффективен.
В управлении данными это процесс «индексации» данных. Базы данных хранят
данные в таблицах, но предоставляют возможность индексировать данные,
используя другие методы организации, чтобы сократить время выполнения
запросов. Точно так же, как индекс книги дает вам альтернативный метод
поиска информации (в отличие от оглавления или просто просмотра страниц),
индекс предоставляет другой и более эффективный способ поиска конкретных
данных в более крупном хранилище.
При управлении контентом иногда бывает полезно создать дополнительные
индексы для помощи в тайном поиске. Например, в предыдущем примере
разработчик мог написать код, который выполнялся при каждом сохранении
выпуска новостей. Если он соответствовал указанным критериям, уникальный
идентификатор этого объекта контента можно было добавить в текстовый файл
(или удалить, если он не соответствовал). Когда нужно было отобразить
агрегацию, все идентификаторы соответствующих объектов контента
находились в одном месте.
Агрегационная функциональность |1 2 5
Мы могли бы захотеть, чтобы сначала появлялись более
основополагающие темы, а более конкретные темы появлялись дальше по
списку.
• Если бы у нас был список недавно обновленных тем справочника, то в
дополнение к тому, что этот список был бы динамическим (по сути, это
поиск, основанный на дате изменения содержимого), мы бы хотели, чтобы
этот контент располагался в обратном хронологическом порядке, чтобы
отображались самые последние обновленные темы. первый. Мы бы просто
упорядочили поиск по дате.
ТипОграничения
Нередко разрешается использовать только определенные типы контента в
определенных агрегатах. Если агрегация динамическая и мы указываем тип в
критериях поиска («покажи мне все выпуски новостей»), то это естественно.
Однако в других ситуациях нам может потребоваться ограничить типы,
поскольку содержимое должно соответствовать определенному формату,
чтобы его можно было использовать в выходных данных.
Например, рассмотрим кадр карусели изображений, изображенный на
рисунке.Рисунок 7-8. Это один кадр мультикадровой галереи, основанный на
агрегировании (плоском списке или коллекции) нескольких объектов контента.
Этот список создан и упорядочен вручную.
Агрегационная функциональность |1 2 7
Для корректного отображения каждый элемент в этом агрегате должен иметь:
• Заголовок
• Краткое содержание
• Изображение
• Некоторый текст ссылки (текст «Читать статью»)
• Постоянный URL-адрес (на который перенаправляются посетители, когда они нажимают
на текст ссылки)
Ограничения количества
Это менее распространено, но некоторые агрегаты могут хранить больше
контента, чем другие, а некоторые системы позволяют требовать определенное
количество объектов контента или не позволяют превышать максимальное
количество.
Рассмотрим нашу карусель изображений — в ней может потребоваться как
минимум два элемента (иначе это не карусель), а их число может быть
ограничено максимум пятью (иначе форматирование пейджера нарушится).
Будет полезно, если интерфейс сможет ограничить редакторов добавлением
элементов только в этих границах.
МежстраничныйАгрегации
В некоторых ситуациях включение контента в агрегацию требует
дополнительной информации, чтобы иметь смысл. В этих случаях включение
контента само по себе становится объектом контента.
Например, предположим, что мы объединяем группу объектов контента
«Биографии сотрудников», чтобы представить команду, планирующую
рождественскую вечеринку компании. Для этого мы создадим статическую
агрегацию контента.
Однако, помимо простого включения в эту агрегацию, мы хотим указать,
какую роль играет каждый сотрудник в группе, представляемой агрегацией.
Итак, в случае с Мэри Джонс мы хотим указать, что она является
председателем комитета. Мария
6 И я надеюсь, что к этому моменту становится очевидным, что география дерева контента
представляет собой одну большую иерархическую совокупность контента. Просто это основная
совокупность для многих CMS.
Агрегационная функциональность |1 2 9
на самом деле администратор в компании, и это звание смоделировано в ее
объекте «Биография сотрудника».
Титул председателя комитета имеет смысл только в связи с ее включением в
эту совокупность, и больше нигде. Следовательно, этот атрибут отсутствует ни
в агрегировании, ни в биографии сотрудника. КакРисунок 7-9 показывает, что
этот атрибут по праву принадлежит точке присоединения между ними; там
описывается назначение Мэри в этот комитет.
135
работа», а не рабочий процесс как конкретная концепция CMS, которую мы
обсудим далее в этой главе).
Это действительно «управление» системами управления контентом. Это
инструменты, которые расширяют возможности редакторов создавать более
качественный контент и получать больший контроль над контентом,
находящимся под их контролем. Это та часть CMS, которую редакторы будут
использовать изо дня в день.
Это критически важная область функциональности, поскольку плохие
инструменты и рабочий процесс могут нанести вред редакторам и подорвать
моральный дух. К сожалению, редакционное удобство использования — это
одна из областей разработки CMS, которую слишком часто упускают из виду.
Как мы уже говорили, CMS создаются разработчиками, но часто они также
создаются в первую очередь для разработчиков. Разработчик понимает вещи
иначе, чем средний редактор контента, и при разработке редакционных
интерфейсов и инструментов разработчики часто идут на скачки и вольности,
которые имеют смысл для них, но не обязательно для людей с другими
точками зрения.
В коммерческих системах и более крупных системах с открытым исходным
кодом эти недостатки юзабилити исправляются за счет давления рынка и
широкого редакционного использования. Однако в небольших системах с
открытым исходным кодом, которым не нужно взимать лицензионные сборы и
которые могут не иметь большого сообщества редакторов, проблемы с
удобством редакционного использования могут сохраняться годами без
исправления.
Хотя редакционные разногласия напрямую снижают производительность
редакторов в краткосрочной перспективе, более разрушительным аспектом
является хроническое воздействие, которое они оказывают на моральный дух в
долгосрочной перспективе. Многие редакционные коллективы с течением
времени все больше разочаровываются и возмущаются плохо
спроектированной или реализованной CMS. Я не раз сталкивался с командами,
которые терпели крах и теряли персонал, потому что устали от дополнительной
нагрузки, налагаемой на них системой, которую они были вынуждены
использовать.
Надежные, хорошо реализованные редакционные инструменты улучшают
редакционный процесс. Плохие или несуществующие инструменты со
временем разрушат его. Как минимум, CMS должна оставаться в стороне и не
создавать каких-либо препятствий сверх того, что абсолютно необходимо.
Интерфейс редактирования
Первая задача среды редактирования — сделать ее удобной для использования
и предоставить редакторам контента компетентный и функциональный
интерфейс для создания и редактирования контента. Если CMS не справляется
с этим, восстановить ее будет сложно. Редакторам, которые ненавидят работать
с контентом в своих CMS, будет сложно создать что-то ценное в долгосрочной
перспективе.
Во всех этих ситуациях критерием поиска контента не является то, что будет
видно потребителю контента, и поэтому CMS может иметь специальные
инструменты редактирования, с помощью которых можно обрабатывать такие
ситуации.
ТипВыбор
При создании нового объекта контента первой задачей редактора обычно
является выбор типа контента, на котором он будет основываться (см.Глава 6).
CMS должна гарантировать, что редактор может выбрать подходящий тип
контента для конкретной ситуации, а не тот тип контента, который работает не
совсем правильно или сломает веб-сайт в случае его публикации.
Во многих случаях целостность дерева контента обеспечивается за счет
ограничений на происхождение типа. У нас может быть тип «Проблема»,
который содержит один или несколько типов категорий статей, каждый из
которых содержит один или несколько объектов «Статьи». Иерархия логична и
необходима для правильного моделирования и рендеринга контента.
Если бы редактору было разрешено создавать контент на основе типа
«Проблема» как дочернего элемента статьи, что бы произошло? Код в шаблоне
не ожидает содержимого этого конкретного типа в этом месте. В лучшем
случае, если бы разработчик проверял тип всего, шаблон просто
проигнорировал бы это. Однако во многих ситуациях шаблонизация будет
нарушаться — разработчик, вероятно, предположит, что CMS будет
обеспечивать соблюдение иерархии типов, и, таким образом, будет полагать,
что Проблема никогда не будет найдена как дочерний элемент Статьи.3
3 Да, очевидно, что это будет означать сбой в проверке ошибок. Но при работе с CMS разработчики
часто доверяют ей соблюдение определенных стандартов и отказываются от исчерпывающей
проверки ошибок ради практичности.
Редактирование ИнтерфейсЭлементы
Редакционная резина сочетается с дорогой в интерфейсе. Наступает момент,
когда редактор действительно печатает или щелкает что-то и создает
некоторый контент. Вообще говоря, CMS должна предоставлять редакторам
правильный элемент редактирования для информации, которую они пытаются
редактировать. Хороший интерфейс редактирования помогает редакторам
принимать правильные решения и защищает их от ущерба.
Представьте, что интерфейс редактирования представляет собой просто список
пустых текстовых полей для всех атрибутов. Для текста это может быть
уместно, но как насчет значения да/нет? Должен ли редактор просто ввести
«да» или «нет»? А как насчет «истина» или «ложь»? Имеет ли значение
капитализация? Очевидно, что в этом случае подходящим элементом
интерфейса является флажок, который отмечен для «да» и снят для «нет».
CMS должна отображать интерфейс редактирования в соответствии с моделью
контента, делая разумные предположения при выборе правильного элемента
для представления редакторам (и допуская административные изменения, где
это необходимо). Цель состоит в том, чтобы создать высокопродуктивную
рабочую среду, избегая ненужных ошибок и догадок.
Помимо вышеупомянутого флажка, есть еще несколько вариантов выбора элементов:
• Простое текстовое поле или текстовая область для ввода длинного или короткого текста.
• Список флажков для атрибута, который может поддерживать несколько
значений из предопределенного списка.
Проверка
Помимо приема входных данных, интерфейс редактирования контента должен
гарантировать корректность введенных данных, чтобы ошибки не могли
поставить под угрозу контент. Проверка может проводиться с использованием
элементов интерфейса редактирования, как обсуждалось в предыдущем
разделе; однако CMS всегда должна проверять данные независимо от
интерфейса в случае, если данные вводятся через API или службу (и,
следовательно, не подпадают под ограничения интерфейса редактирования).
Поймите, что проверка контента связана с его логическим значением, а не
обязательно с его чистым типом данных. Типы данных не понимают контекст;
они понимают только чистые данные, полностью отделенные от того, как эти
данные будут использоваться.
Как мы обсуждали вГлава 6, если атрибут представляет год, то базовый тип
данных может быть числом (или целым числом). Однако логическая идея года
предполагает и ряд других ограничений:
Богатый текстредактирование
Большинство CMS включают в себя расширенный текстовый интерфейс,
позволяющий редакторам создавать HTML-контент как атрибут объекта
контента.
Например, почти все реализации будут иметь тип контента «Текстовая
страница» или «Стандартная страница». Этот тип контента может быть таким
же простым, как заголовок и тело, которые часто представляют собой
форматированный текст. Внутри интерфейса редактирования тела редактор
будет иметь кнопки для форматирования таких элементов, как полужирный
текст, курсив, маркированные и нумерованные списки, вставка изображений,
создание гиперссылок и т. д. «Так же, как Microsoft Word» — это
распространенная фраза, используемая для опишите эти редакторы.
Использование форматированного текста может вызвать разногласия.
Редакторы наслаждаются контролем, но разработчики и дизайнеры могут
нервничать из-за свободы, которую он предоставляет. Известно, что редакторы
широко используют форматирование, часто игнорируя руководства по стилю и
соглашения. Кроме того, если у них есть доступ к исходному коду HTML, они
могут редактировать HTML вручную, что может вызвать проблемы с
рендерингом шаблона, в котором размещается контент.
6 Освоение регулярных выраженийДжеффри Э. Ф. Фридла (О'Рейли), в настоящее время вышло его третье
издание, является основополагающим иавторитетный текст о регулярных выражениях.
Ссылкавыбор контента
В большинстве реализаций контент необходимо будет связать вместе одним
или несколькими способами:
По крайней мере, CMS должна иметь некоторую индикацию того, что объект
контента редактируется или что черновая версия этого объекта контента
находится над опубликованной версией в стеке версий. Редактор должен быть
уведомлен об этом и ему предоставлена возможность работать с
существующим черновиком (который может быть заблокирован) или создать
новый черновик (что может потребовать согласования изменений с
существующим черновиком в какой-то момент в будущем).
Управление зависимостями
Два объекта контента могут быть связаны несколькими способами:
Набор измененийПубликация
Часто редакторы работают над проектом контента, который требует внесения
изменений в несколько объектов контента по отдельности. Редакторы хотели
бы, чтобы эти изменения отслеживались как группа, а также планировались,
утверждались и публиковались вместе.
Он известен под несколькими названиями, но чаще всего как набор изменений
(другие распространенные названия — «проект», «выпуск» и «пакет»). Набор
изменений создается со всем связанным с ним контентом. Планируется сам
набор изменений, а не отдельные версии контента. Когда набор изменений
достигает публикации, все объекты контента публикуются одновременно.
8 Однажды у меня был клиент, которого беспокоил именно этот сценарий. Хотя логическую проблему
нельзя было решить, если не считать простого запрета истечения срока действия для объектов, на
которые были направлены ссылки, мы создали запланированное задание, которое каждую ночь
отправляло веб-мастеру электронное письмо, если оно обнаруживало контент, который (1) был
целью одного или более ссылок, и (2) срок действия истекает в течение следующих 72 часов. По
крайней мере, это дало клиенту некоторое предупреждение, чтобы он мог разрешить ситуацию
изящно, а не допустить разрыва ссылок.
Разрешения
После того как редактор внесет изменение в контент, он может опубликовать
его напрямую или ему, возможно, придется отправить изменение на
утверждение. Многие системы разделяют разрешения на редактирование и
публикацию. Если редактор может редактировать, но не публиковать, он может
внести изменения, но опубликовать их может только тот, у кого есть такое
разрешение.
Концептуально редактору нужен способ сообщить: «Я закончил работу над
этим контентом, но не могу опубликовать его напрямую. Кто-то, кто может
опубликовать его напрямую, должен просмотреть контент и опубликовать его
для меня».
Необходимо решить два вопроса:
Рабочий процесс
Как правило, рабочий процесс — это более масштабное и абстрактное понятие,
чем простое утверждение. Утверждение контента может быть разновидностью
рабочего процесса, но многие рабочие процессы не имеют ничего общего с
утверждением контента. Рабочий процесс шире, чем простое утверждение.
Рабочий процесс — это перемещение контента по карте или сети отдельных
шагов. Шагом рабочего процесса может быть практически любой процесс,
который выполняет какое-либо действие перед перемещением содержимого на
другой шаг. Как правило, контент может находиться только на одном этапе в
любой момент данного рабочего процесса. Шаг рабочего процесса (иногда
называемый «действием» или «задачой») — это четкая граница, определяющая
состояние, в котором находится контент в определенный момент времени.
Во всех случаях один или несколько шагов не будут иметь последующего шага,
что завершает рабочий процесс. Любой контент, находящийся в данный
момент на этапе, находится в активном рабочем процессе, и когда контент
проходит последний шаг, рабочий процесс завершается.
Важно различать шаблон рабочего процесса и фактически запущенный
рабочий процесс. Номенклатура различается, но, как и контент, рабочие
процессы имеют типы (шаблоны) и фактические экземпляры этих шаблонов,
которые в настоящее время работают с контентом.9
Например, организация, публикующая новости, может иметь рабочий процесс
утверждения новостей, который перемещает контент из состояния
«Отправлено» в состояние «Опубликовано». Это шаблон, определяющий, как
должен работать рабочий процесс. В загруженном отделе новостей статьи
могут отправляться на публикацию каждые 5 минут, поэтому, хотя существует
один шаблон рабочего процесса утверждения новостей, в любой момент
времени может быть 20–30 активных экземпляров этого рабочего процесса,
каждый из которых перемещает отдельные элементы контента через этапы к
публикации. .
Многие системы имеют интерфейсы отчетов для просмотра всех запущенных
экземпляров определенного рабочего процесса, включая этап, на котором в
данный момент находится контент. В некоторых случаях контент может
«застревать» на этапе рабочего процесса, что означает, что он ожидает
действия. этого никогда не произойдет по какой-либо причине. Контент,
застрявший в рабочем процессе, обычно можно доработать вручную или
принудительно завершить рабочий процесс.
Хотя это не является обычным явлением для большинства организаций,
контент может даже использоваться более чем в одном рабочем процессе
одновременно. Например, новостная статья может находиться в рабочем
процессе «Утверждение новостей» и в то же время находиться в рабочем
процессе «Запрос СМИ» в ожидании фотографии.
Что представляет собой этап рабочего процесса, может быть неясно и во
многом зависит от того, что позволяет конкретная система. В некоторых
случаях этапы рабочего процесса представляют собой только утверждения,
выполняемые человеком.
9 Хотя было бы удобно называть их «типами рабочих процессов» вместо «типов контента»,
похоже, в отрасли принято называть их «шаблонами рабочих процессов».
Внешний СобытиеДвигатели
Есть некоторые интересные вещи, происходящие в мире
внешних механизмов событий, которые представляют собой
коммерческие службы, которые могут уведомляться о
событиях, а затем выполнять действия в других системах. Эти
системы, такие какЗапир иЕсли это, то то, может быть вызван
такими вещами, как веб-перехватчики (форматированный
HTTP-запрос) или появлением нового элемента в RSS-канале,
и в ответ может выполнять сотни возможных действий в
других системах.
В некотором смысле эти системы определяют общий API
событий для самого Интернета и служат «связующим звеном»
между автономными программными платформами.
Традиционно сложную и дорогостоящую системную
интеграцию можно значительно упростить.
Сотрудничество
В сценариях с несколькими редакторами часто возникает необходимость
указать единицу работы или провести сеанс обсуждения или совместной
работы, конкретно связанный с частью контента.
• Детализированные разрешения
• Рабочий процесс
• Языковой перевод
• Метаданные или дополнительные смоделированные данные
• Персонализация
Добавление СодержаниеФайлы
До последних нескольких лет браузеры никогда не были лучшими в загрузке
файлов, и веб-CMS были связаны этими ограничениями. Загрузка десятков
файлов была утомительным занятием: редакторам приходилось вручную
переносить один файл за другим.
Простая загрузка файлов по-прежнему работает и доступна, но теперь
существуют более эффективные методы загрузки файлов в вашу CMS. К ним
относятся:
Перетащите
Многие системы позволяют редакторам просто перетащить один или
несколько файлов в окно браузера в указанное место интерфейса. Все
файлы будут загружены одновременно.
Псевдо файловая системадо ст у п
Некоторые системы поддерживают протоколы, позволяющие обращаться к
хранилищу как к файловой системе. Пользователи могут иметь
возможность «сопоставить диск» с CMS или получить доступ к системе.
11 Многие системы называют файлы содержимого «двоичными файлами», хотя технически они не обязаны быть двоичными.
Например, ничто не мешает редактору загрузить текстовый файл в CMS (и даже текстовый файл на
каком-то уровне можно считать «двоичным файлом»).
Ассоциация контента
Файлы отличаются от другого контента тем, что они редко существуют
изолированно. Чтобы получить доступ к файлу, пользователю необходимо
перейти к другому контенту, а загрузка файла почти всегда представлена
ссылкой на HTML-странице (которая, скорее всего, представлена объектом
контента).
Рассмотрим, как вы обычно загружаете файлы. Если кто-то не отправил вам
прямую ссылку по электронной почте, как часто вы переходите
непосредственно к загрузке файла, не касаясь других страниц веб-сайта?
Обычно вы заходите на страницу загрузки, а затем нажимаете ссылку для
скачивания.
Кроме того, многие файлы контента служат исключительно для поддержки
определенного контента. Фотогалерея будет содержать несколько
изображений, которые она отображает. Эти изображения не могут
использоваться где-либо еще на сайте и служат только для поддержки этой
единственной фотогалереи.
Это означает, что файлы часто связаны с конкретным содержимым — они
«привязаны» к этому содержимому и работают под одной и той же защитой. В
этих случаях объектами контента и поддерживающими их файлами следует
управлять как пакетом.
Например:
Обработка изображений
Существует разница между самим изображением (оригиналом) и конкретным
файловым представлением этого изображения. Изображение парусника может
потребоваться преобразовать в несколько файлов с разным разрешением и
размером файла для вставки в контент в разных местах.
Многие системы сохраняют исходное загруженное изображение, но создают
его дополнительные версии на основе набора настраиваемых правил, которые
позволяют редакторам и разработчикам шаблонов иметь доступ к нескольким
стилям изображения. Например, после загрузки изображения CMS может
изменить его размер до трех разных размеров.
Это проявляется двумя основными способами:
Разрешения
Разрешения на контент предназначены для предотвращения злонамеренных
манипуляций с контентом или (что более вероятно) для защиты редакторов от
действий, которые они не собираются делать. Предотвращение
• Пользователь
• Действие
• Объект
В любой ситуации, связанной с разрешениями, мы должны спросить себя: (1) кто пытается,
(2) какое действие совершить, (3) над каким объектом? ACE, включенный в
ACL, определяет, что разрешено.
Авторизацияпротив аутентификации
Разрешения технически представляют собой авторизацию, то
есть предоставление пользователям возможностей. Это не то
же самое, что аутентификация, которая представляет собой
процесс проверки того, кто является тем, кем он себя называет.
Мы могли бы целый день говорить о том, чтобы разрешить
Мишель предпринять какие-то действия, но на самом деле мы
этим не занимаемся. Фактически мы разрешаем учетной записи
пользователя Мишель предпринять некоторые действия. Мы
просто надеемся, что учетная запись пользователя, которую мы
знаем как Мишель, в любой момент времени контролируется
человеком, которого мы знаем как Мишель.
Процесс аутентификации этого пользователя и подтверждения
его личности путем входа в CMS — это совершенно отдельная
система и дисциплина, отличная от той, которая разрешает ему
делать что-то, когда он находится внутри.
Разрешения |1 6 5
Пользователи
Во-первых, мы должны определить пользовательский контекст, в котором
будет происходить действие. Для этого мы должны учитывать роли и
разрешения. Например:
Объекты
В абстрактном смысле «объект» — это все в системе, над чем необходимо
воздействовать. Это включает в себя:
• Объекты контента
• Пользователи
• Типы контента
• Настройки
• Шаблоны
• Пользователь имеет полные права на любой выпуск новостей в любой точке системы.
• Пользователь может создать любой разрешенный объект в разделе «Новости» дерева
содержимого.
Действия
Как только мы узнаем пользователя и объект, над которым нужно действовать,
нам нужно разрешить или запретить определенные действия. Хотя
пользователь может иметь так называемый «полный контроль» над объектом
(фраза, заимствованная из модели разрешений Windows), существует большая
вероятность того, что возможности редактора будут ограничены.
Некоторые из наиболее распространенных разрешений в отношении объекта контента:
РазрешениеРешение конфликта
Разрешения могут быть сложными, особенно когда разные правила вступают в
конфликт. В этих случаях каждая система будет иметь определенный метод
разрешения.
Например, некоторые системы упрощаются, предлагая только разрешения
«Разрешить», но другие также имеют явные разрешения «Запретить», которые
часто имеют приоритет над «Разрешить». Кроме того, могут вступить в силу
правила наследования. Имеет ли унаследованное разрешение приоритет над
явным разрешением? Обычно нет; однако, поскольку Deny часто имеет
приоритет над Allow, унаследованный Deny может отменять явное Allow.
Разрешения |1 6 9
Все зависит от системы и от того, как эта система реализует свою модель
безопасности. Чем проще вы сможете сохранить свою модель разрешений, тем
лучше. Более распределенная редакционная база требует более сложных
разрешений, что может привести к созданию некоторых сложных моделей и
иногда к расширенной отладке, когда редактор не может делать то, что он
должен делать.
ТипВыбор
• Как редакторам предоставляются типы для создания? Является ли
интерфейс удобным и полезным? Как он будет масштабироваться для
потенциально десятков различных типов контента?
• Могут ли доступные типы быть ограничены ролью редактора?
• Могут ли доступные типы быть ограничены по происхождению или местоположению в
географическом регионе?
Интерфейс редактирования
• Насколько удобны элементы редакционного интерфейса?
• Какие элементы интерфейса можно выбрать и настроить для каждого типа недвижимости?
• Как можно проверить контент во время входа? Какой уровень контроля
доступен для сообщений об ошибках?
• Доступна ли контекстная справка, помогающая редакторам во время создания контента?
• Как можно настроить интерфейс редакции? Можно ли удалить
функциональность на основе роли? Можно ли добавлять ссылки, кнопки и
другой функционал?
Разрешения
• Какой уровень разрешений предлагает система, помимо двоичного доступа
«полного контроля»?
• Как можно агрегировать пользователей? Предлагает ли система как группы, так и роли?
• Как можно идентифицировать контент для применения разрешений? По
местоположению в географии? По типу контента?
• Может ли контент наследовать разрешения из другого места или объекта
или ссылаться на них, или все разрешения применяются напрямую?
• Какие типы разрешений доступны?
172 | Глава 8: Редакционные инструменты и рабочий процесс
ГЛАВА9
Выход и ПубликацияУправление
• Заголовок
• Краткое содержание
• Изображение
• автор
• Тело
• Текст сообщения
• Положение боковой панели
• Текст ссылки на Facebook
Шаблонизация |1 7 5
CMS как контент? Ответ на этот вопрос оказывает огромное влияние на
удобство использования и управляемость конечной системы.
НесущаяСтены
Дом может быть изменен его владельцами. Они могут его покрасить,
переставить мебель и, возможно, даже снести пару стен.
Однако со временем домовладельцы упрутся в несущие стены. Эти стены
удерживают крышу, поэтому их нельзя переместить или снять. Владельцам
просто придется обойти их или вызвать подрядчика для выполнения серьезных
структурных изменений. Архитекторы, спроектировавшие дом, могут повлиять
на его будущую стоимость тем, где они разместит несущие стены, поскольку
они высечены из камня (иногда в буквальном смысле).
То же самое касается реализации CMS. Хотя редактор может изменить макет,
цвета и другие поверхностные аспекты страницы, в конечном итоге он
наткнется на несущие стены. Эти стены — это то, что редакторы не могут
изменить. Им придется либо обойти их, либо вызвать разработчика для
внесения серьезных изменений.
Многие из этих аспектов существуют на уровне шаблона. Разработчик
встраивает в шаблон элементы, которыми нельзя управлять с помощью
контента или интерфейса CMS. Это несущие стены. Сколько их существует и
где они образно расположены, со временем окажет огромное влияние на
Некоторые могут возразить, что редакторы должны иметь как можно больший
контроль над дизайном и макетом страницы, чего можно добиться либо путем
предоставления опций конфигурации для каждого возможного бита вывода,
либо путем предоставления редакторам свободного доступа к шаблонам (часто
из интерфейс CMS). Это редко работает хорошо. Технологии HTML/CSS
продвинулись до такой степени, что неподготовленный человек может нанести
реальный ущерб, если проявит неосторожность.
Кроме того, в большинстве случаев шаблонный контент является
преимуществом, а не ограничением. Как я упоминал ранее при обсуждении
динамической композиции страниц, разрешение редактору изменять страницу
только по эстетическим предпочтениям может нарушить правила стиля сайта, а
также иметь дело с исключениями (например, когда весь контент устроен
определенным образом, за исключением выпуска новостей X). , очень редко
бывает хорошей вещью.
В целом желательно четкое разделение ответственности между кодом
шаблонов и редакционным контентом.
176 | Глава 9: Управление выводом и публикациями
Предупреждение: код вперед
Если вы разработчик, большая часть информации в этом
разделе будет лишней. Несмотря на некоторые отличия,
шаблонизация тесно связана с основным веб-
программированием. Большая часть информации в этом
разделе представляет собой просто краткое введение в эти
концепции.
Если вы не разработчик, вы увидите вымышленный код. Он
вымышленный в том смысле, что это не какой-то реальный
язык, а представитель основных концепций языков
программирования/шаблонов.
Идея здесь не в том, чтобы попытаться превратить вас в
разработчика. Цель состоит в том, чтобы просто дать
представление о некоторых проблемах, с которыми
сталкиваются разработчики при создании веб-сайта с
управляемым контентом.
Не смотрите на это как на практическое руководство. Вместо
этого просто бегло просмотрите концепции и попытайтесь
понять более масштабные логические проблемы, о которых
идет речь.
ШаблонизацияФилософия
Существуют различные школы мысли о сфере применения шаблонов, которые
вращаются вокруг того, какой силой должны обладать шаблоны. Две стороны
спора выглядят следующим образом:
Шаблонизация |1 7 7
Это верная точка зрения. Если шаблон может все, то в каком смысле он вообще
является «шаблоном» и чем он отличается от любого другого кода?
Другая сторона дебатов может возразить, что это ограничивает и что логика,
связанная с представлением, вполне приемлема. Если шаблону необходимо
представить определенный набор данных, шаблону проще получить эти
данные, а не зависеть от вызывающего кода или системы для их
предоставления. Шаблоны существуют только для того, чтобы упростить
включение кода в презентационную разметку, а не для выделения кода по
какой-либо другой причине.
Независимо от вашей позиции, факт заключается в том, что разные системы
применяют разные модели, и многие придерживаются гибридного подхода:
шаблону предоставляется набор данных, но он может выполнять другие
операции по мере необходимости, если это явно не запрещено конфигурацией.
На практике это означает, что большинство шаблонов будут выполняться в
контексте известного набора данных. Данные будут предоставлены, и
большинство операций в шаблоне будут предназначены специально для
форматирования этих данных.
Например, в языке шаблонов Razor ASP.NET MVC структура данных обычно
называется «моделью».2 Эта модель передается шаблону и называется таковой.
Например, чтобы отобразить тег TITLE страницы, этот фрагмент данных
извлекается из модели:
<title>@Model.PageTitle</title>
В Symfony определено несколько переменных, которые передаются в шаблон,
откуда они извлекаются по имени:
<title>{{title}}</title>
Целью здесь является не обзор языков шаблонов, а просто демонстрация того,
что в большинстве ситуаций шаблоны «глупы» и предназначены для действий
на основе предоставленных данных.
2 Это и философское, и практическое решение. С философской точки зрения «Модель» — это буква «М»
в слове «MVC». Практически эти данныеупоминается в шаблоне как переменная с именемМодель.
178 | Глава 9: Управление выводом и публикациями
В связанной системе нет каталога «politics» или «2015», а также нет файла с
именем «debate-report». Скорее, этот URL-адрес отображается на объект
оперативного контента. Когда запрос URL-адреса получен, этот объект
контента извлекается, и CMS определяет, какой шаблон должен его
отображать. Этому шаблону передается объект контента (и часто
дополнительные данные) и он выполняется для предоставления вывода,
возвращаемого клиенту.
В предыдущем разделе я сказал, что шаблоны работают в контексте
определенного набора данных. В частности, в отношении управления
контентом можно сказать, что шаблоны обычно выполняются в контексте
оперативного объекта контента.
В Episerver (с использованием Razor) рабочий объект предоставляется как
часть модели в свойстве CurrentPage:
<title>@Model.CurrentPage.Name</title>
В Sitecore (также Razor):
<title>@Html.Sitecore().Field("Title", Sitecore.Context.Item)</title>
В платформе eZ (Symfony и Twig):
<title>{{ ez_field_value(content, 'title') }}</title>
В WordPress (сырой PHP):
<title><?php wp_title(); ?></title>
Обратите внимание, что в WordPress заголовок сообщения определяется до
такой степени, что вам даже не нужно передавать ему объект. Когда вы
вызываете эту функцию, шаблон просто предполагает, что вы имеете в виду
объект оперативного контента.
Дело в том, что объект оперативного контента будет известен и предоставлен
шаблону. В предыдущих примерах этот объект был известен шаблону и
упоминался как Model, Sitecore.Context.Item, content и wp_title()
соответственно.
В отдельной системе, которая записывает файлы в файловую систему, модель
сопоставления URL-адресов меняется на противоположную. Вместо того,
чтобы URL-адрес был получен и сопоставлен с объектом, этот URL-адрес
указывается в объекте и просто используется для создания файла в
соответствующем месте. Другими словами, файл существует до запроса. Когда
запрос получен, он обрабатывается базовым веб-сервером вообще без вызова
CMS.
ШаблонизацияЯзыковая функциональность
Все системы неизменно имеют язык для генерации текстового вывода. Когда
приходит время объединить контент и шаблоны, всегда есть какой-то способ
сделать это. Он состоит из шаблонного кода с маркерами, указывающими, куда
должен идти управляемый контент и как он должен себя вести.
Шаблонизация |1 7 9
Очень немногие CMS реализуют свои собственные языки шаблонов.
Большинство современных CMS используют существующий
общеупотребительный язык шаблонов в сочетании с некоторыми
пользовательскими расширениями и структурами данных, специфичными для
этой CMS.
В ASP.NET это веб-формы или Razor для проектов MVC. В PHP в настоящее
время очень популярен Twig, а в прошлом активно использовался Smarty (не
говоря уже о простом использовании самого PHP). Для Java популярны
FreeMarker и Velocity.
В языках шаблонов существует три основных «уровня» функциональности. Мы
рассмотрим их дальше.
3 Опять же, это фикция. В разных языках встраивание кода определяется по-разному, но во всех
случаях в основном будет некоторая комбинация символов, которая определяет содержимое кода, а
не маркетинговое содержимое.
• Зацикливание
• Ветвление
Шаблонизация |1 8 1
* "{related_article.title}" автора: { linked_article.author}
{endforeach}
Здесь мы создали цикл «для каждого», который представляет собой структуру
управления программированием. Предполагая, что linked_articles является
ссылочным атрибутом для нескольких других статей, этот код будет проходить
через них, и внутри цикла токен linked_article будет полностью заполнен как
объект содержимого статьи, из которого мы сможем выводить информацию.
Мы говорим: «Для каждой статьи в коллекции linked_articles сделайте это…»
Обычно мы можем ссылаться на linked_article только внутри цикла. Вне цикла
— перед foreach или послетокен endforeach — токен linked_article не имеет
значения. Это называется «в объеме». Токен связанной_статьи находится в
области действия только внутри цикла и имеет другое значение во время
каждого прохода или итерации цикла. Вне цикла он не имеет значения (он «вне
области видимости»), и обращение к нему может даже привести к ошибке.
Цикл foreach — это очень распространенная программная конструкция и один
из нескольких способов перебора коллекции элементов. Фактическая
реализация будет варьироваться от системы к системе.
Помимо циклов, нам часто приходится принимать решения о выводе
информации на основе критериев внутри объекта контента. Например, что,
если в статье нет связанных статей? В этом случае свойство linked_articles
будет пустым, и в цикле не будет ничего, и в выводе останется только это:
Другие статьи на эту тему включают:
Это выглядело бы странно и заставило бы посетителей задуматься, не
пропустили ли они что-нибудь. Нужно удалить все, что относится к
соответствующим статьям, если их нет.
В этом случае мы могли бы попытаться сделать что-то вроде этого:
{ifarticle.lated_articles.count > 0}
Другие статьи по этой теме:
{foreach связанная_статья в статье.связанные_статьи}
* "{related_article.title}" автора: { linked_article.author}
{endforeach}
{/endif}
Здесь мы используем структуру управления «если… то». Мы говорим: «Если
количество элементов в атрибуте linked_articles нашей статьи больше нуля,
выполните цикл и отобразите связанные статьи. Если это не так, ничего не
делайте между if и endif». Если в нашей статье нет связанных статей, ничего не
будет выведено, и это то, что нам нужно.
Почти все языки шаблонов имеют возможность использовать, по крайней мере,
примитивные структуры управления. Без них вы ограничены базовой заменой
токенов, которая быстро не сможет справиться даже с базовыми задачами по
созданию шаблонов.
4 PHP может быть уникален тем, что изначально он был создан с основной целью создания веб-
страниц. Один из моих технических рецензентов заметил: «Я бы сказал, что PHP — это синтаксис
шаблонов, который превратился в язык программирования». В этом есть правда. На корни PHP как
языка веб-шаблонов намекает основная функция под названиемнл2бр, который преобразует
символы разрыва строки в<br/>HTML-тег. Эта функция не имеет никакой цели, кроме генерации
HTML, и присутствует в языке с версии 4, выпущенной в 2000 году.
Шаблонизация |1 8 3
всей системы, разработчика шаблона интересует только то, как все
отображается.
Таким образом, разработчику шаблонов обычно желательно работать только с
подмножеством функциональных возможностей программирования, а не иметь
доступ ко всему объему и возможностям базового языка программирования,
используемого CMS. Предоставление разработчику шаблонов неограниченного
доступа ко всему языку программирования порождает три проблемы:
• Осложнение
• Безопасность
• Стабильность
Окружение
При рассмотрении отображаемой HTML-страницы необходимо разделить
управляемое содержимое страницы и «окружающее пространство». Окружение
— это все, что (подождите) окружает объект контента на странице.
Концепция объемного звучания возникла у нас задолго до управления
контентом. Включения на стороне сервера уже давно позволяют веб-
разработчикам предоставлять общую разметку для верхних и нижних
колонтитулов, а некоторые системы редактирования на стороне клиента
предоставляют явную поддержку этой концепции, например, функция
Microsoft Front Page «Shared Borders».
Шаблонизация |1 8 5
Рассмотрим новостную статью вРисунок 9-2. Некоторые элементы на этой
странице являются прямым результатом отображения на странице
оперативного объекта контента:
• Название
• Авторство
• Тело
Затем есть все остальное выше, ниже и по бокам новостной статьи. «Все
остальное» — это окружение.
Теперь возникает вопрос: что мы помещаем в тег TITLE и как его туда
получить? Сам шаблон статьи («внутренний» шаблон) явно умеет это делать с
токеном {article.title}, а как насчет окружения? Что он «знает» о рендеринге
контента внутри себя?
Помните, что все шаблоны, которые мы обсуждали до сих пор, знали об
объекте оперативного контента. Все они выполняются в контексте
определенного объекта контента, на который они могут ссылаться. Есть ли в
окружении такая же роскошь? Или он совершенно не знает, что происходит
внутри помещенного в него внутреннего шаблона?
Это вопрос контекста или способности окружения предпринимать действия,
основанные на понимании контента, который в конечном итоге отображается.
В нашем примере мы могли бы сделать это:
<title>{article.title}</title>
Но помните, что наше окружение универсально для всех типов контента. Будет
ли тип контента «Биография сотрудника» иметь атрибут «title»? (Ну, возможно,
но это, скорее всего, будет относиться к названию должности, а это не то, что
нам нужно.)
Кроме того, будет ли язык шаблонов вообще понимать токен {article}? Мы
больше не обязательно отображаем статью. Окружение должно быть
достаточно универсальным, чтобы обрабатывать любой тип контента, который
мы в него добавляем.
Вот метод грубой силы для решения этой проблемы:
<название>
{if object.type == "Статья") {
{название статьи}
}
{if object.type == "СотрудникБио") {
{employee.first_name} {employee.last_name}
}
</title>
188 | Глава 9: Управление выводом и публикациями
Это могло бы сработать — и я уверен, что это было сделано — но это не очень
масштабируемо. Нам придетсядобавьте к этому беспорядку кода для каждого
возможного типа контента.
Возможно, есть лучший способ решить эту проблему. Назад вГлава 6 когда мы
обсуждали моделирование контента, мы говорили о наследовании, при котором
типы контента могут наследовать от более общих типов и в процессе получать
все их свойства.
Используя это, мы могли бы создать тип контента веб-страницы с текстовым
атрибутом Title Tag. Тогда наши типы «Новостная статья» и «Биография
сотрудника» могут наследовать тип «Веб-страница» и в процессе получить
атрибут «Тег заголовка». Тогда мы могли бы сделать что-то вроде этого:
<title>{object.title_tag}</title>
Обратите внимание, что мы используем токен {object} в коде шаблона
окружения. Это чисто гипотетически, но распространено. Окружение обычно
имеет доступ к части контента в форме, содержащей информацию, общую для
всего контента. Возможно, он не сможет вникнуть в особенности объекта
контента, но он может иметь дело с общими понятиями.
Об абстракциях и полиморфизме
Предыдущий пример известен в программировании как
«абстракция» (точнее, он называется «полиморфизмом»). Да,
новостная статья — это особая вещь, но в то же время это
более абстрактная вещь: веб-страница с тегом заголовка. В то
же время это может быть еще более абстрактный тип: объект
контента, имеющий такие атрибуты, как дата публикации и
автор.
Работа с контентом – и особенно его шаблонирование – часто
означает размышление о нем на разных уровнях абстракции и
специфичности.
5 Если это звучит немного цинично, то это так. Не существует Великой единой теории связанного
контента, хотя дизайнеры вайрфреймов обычно предполагают, что это происходит каким-то
волшебным образом, поэтому они регулярно добавляют ее в каждую боковую панель.
Шаблонизация |1 8 9
Чтобы отобразить это, окружение должно знать достаточно о конкретном
просматриваемом контенте — контенте во «внутреннем» шаблоне. Будет ли он
располагать этой информацией достаточно подробно, чтобы принять меры?
Навигация — еще одно очень распространенное контекстное требование. Часто
окружению необходимо знать, где находится контент в более широкой
географии контента. Для левого навигационного меню сайта ваш план,
возможно, состоит в том, чтобы отображать ссылки на все «родственные»
страницы просматриваемой страницы или просто отформатировать ссылку на
текущую страницу по-другому. Для этого окружение должно знать, какой
контент в данный момент отображается. Следы крошек — еще один пример:
следы крошек имеют смысл только тогда, когда известно положение текущего
контента по отношению к другому контенту.
Будет ли у вашего окружения доступ к этой информации? Сможет ли он
получить ссылки на текущий объект, чтобы запросить в репозитории
одноуровневые страницы?
Отсутствие контекста в окружении иногда может сильно расстраивать. Хотя
шаблон для конкретного объекта контента относительно прост, другие вещи
могут быть излишне сложными из-за отсутствия абстракции и недостаточной
осведомленности при рендеринге окружения.
ШаблонВыбор
Для отображения объектов контента необходим шаблон. Как выбирается этот
шаблон? Как объекты и шаблоны сопоставляются для рендеринга?
В большинстве случаев шаблоны подбираются исходя из типа контента. Это
естественно, поскольку тип контента является наиболее очевидным
определяющим фактором того, что должен делать шаблон. Код шаблона,
необходимый для отображения биографии сотрудника, почти всегда будет
сильно отличаться от кода, необходимого для отображения пресс-релиза.
Однако в некоторых случаях шаблон, выбранный для отображения объекта
контента, может отличаться в зависимости от других факторов, помимо типа.
Редакторы могут иметь выбор шаблонов, обычно для изменения макета.
Например, редактор может выбрать шаблон с двумя столбцами для
отображения боковой панели.
В этих случаях путаница может возникнуть из-за того, что для отображения
другого шаблона может потребоваться другой контент, и наличие этого
контента может быть лучшим способом автоматического выбора.
В случае нашего шаблона с двумя столбцами контент должен существовать для
этого столбца боковой панели. Имеет ли объект контента атрибут
«Содержимое боковой панели»? И если да, может ли обычный шаблон просто
отображать или скрывать боковую панель в зависимости от того, заполнено ли
это свойство? Редактору было бы сложно заполнить атрибут «Содержимое
боковой панели», но при этом не увидеть боковую панель просто потому, что
он не смог выбрать шаблон, который ее поддерживает.
190 | Глава 9: Управление выводом и публикациями
В других случаях нам может потребоваться предоставить другой шаблон для
конкретного объекта контента, чтобы обеспечить некоторые расширенные
функции. Если бы, например, у нас был специально запрограммированный
ипотечный калькулятор, мы могли бы создать тип контента «Ипотечный
калькулятор» со своим собственным шаблоном на основе этого типа. Однако в
зависимости от требуемых усилий это может оказаться напрасной тратой для
типа контента, который будет использоваться только один раз — на основе
этого типа будет создан ровно один объект контента.
Возможно, было бы проще просто создать объект Page и назвать его
«Ипотечный калькулятор», а затем использовать другой шаблон для этого
конкретного объекта, содержащий код для отображения нашего калькулятора.
Это может быть сделано путем редакционного выбора, но это сопряжено с
риском того, что редактор выберет этот шаблон и для других страниц.
Вероятно, было бы лучше принудительно использовать этот шаблон для этого
объекта контента на уровне кода или конфигурации. (Видеть«Прокси Кон-
Палаточные объекты» на странице 192..)
Некоторые системы делают это по стандартам именования файлов с
определенным «резервным» списком того, как будет отображаться объект
контента. Система будет искать шаблон от наиболее к наименее конкретному.
Например, предположим, что у нас есть объект контента «Биография
сотрудника» с уникальным идентификатором #632. Наша система может
искать в каталоге шаблонов файлы с именами:
• контент-id-632.tpl6
• контент-сотрудник-bio.tpl
• контент.tpl
Шаблонизация |1 9 1
Наконец, многие системы также предоставляют инструменты разработчика для
отмены выбора шаблона на уровне кода. Разработчик может написать код,
который учитывает любые переменные при назначении шаблона объекту
контента для рендеринга.
ПроксиОбъекты контента
Ипотечный калькулятор, который мы обсуждали в этом разделе, является
хорошим примером «прокси-объекта». В нашем примере ипотечный
калькулятор полностью управлялся кодом — все функции находились в
шаблоне, а часть внутреннего кода была написана разработчиком. Фактически,
код мог быть написан как отдельная исполняемая страница и просто связан с
файловой системой как Calculator.aspx или Calculator.php.
Однако в этом случае эта страница станет «сиротой». CMS, вероятно, ничего об
этом не знает, что ограничивает или исключает любую расширенную
функциональность, которую может предложить CMS. В идеале мы могли бы
найти способ «обернуть» эту пользовательскую функциональность в
конструкцию, о которой знает CMS и которую она может предоставить.
Объект контента в нашем примере сделал именно это. Это была «обертка» или
«прокси» вокруг этого шаблона. Мы создали объект контента, а затем
присвоили этому объекту определенный шаблон. Этот шаблон содержал весь
функционал, необходимый для нашего калькулятора.
Создав прокси-объект в CMS для обертывания этого кода, мы фактически
сообщили нашей CMS, что этот контент существует, и, следовательно,
включили в него значительные редакционные функции. Например:
Шаблонизация |1 9 3
Помните, что фактические статьи будут разными в каждом из трех наших
вариантов использования, поэтому нам нужен способ указать, что означает
переменнаяarticle_list внутри подшаблона. Обычно это достигается путем
указания значения при вызове шаблона:
{include:article_list.tplarticle_list=article.related_articles}
В этом случае мы вызываем подшаблон и сообщаем ему, что (только в этом
случае) список статей состоит из атрибута linked_articles статьи, которую мы
отображаем.
Включение шаблонов довольно распространено (как в CMS, так и в веб-
разработке в целом) и чрезвычайно полезно для уменьшения сложности
шаблонов путем абстрагирования общих выходных структур в их собственные
шаблоны и управления ими там.
Шаблонизация наизнанку
Если мы рассматриваем шаблон оперативного объекта контента как
«основной» шаблон, окружение часто описывается как оболочка этого
основного шаблона. Концептуально это выглядит так:
объемный.tpl
контент-объект.tpl
Однако есть небольшая разница, и я хочу убедиться, что вы понимаете, что
создание шаблонов обычно осуществляется изнутри наружу, а не снаружи
внутрь. Окружение не выбирает внутренний шаблон; скорее, внутренний
шаблон выбирает окружение.
Помните, что шаблон content-object.tpl является основным шаблоном — это
шаблон, который вызывается напрямую. По сути, он командует и иногда может
контролировать, какое объемное звучание применяется. Таким образом, он
«включает себя» в шаблон объемного звучания, что выворачивает концепцию
наизнанку.
Например, шаблон Razor в ASP.NET MVC включает этот код вверху:
@{
макет = "/путь/к/макет/шаблон.cshtml";
}
По сути, это говорит: «Казните меня, а затем поместите меня внутрь этого
конкретного окружения». Основной шаблон определяет желаемое окружение и
сохраняет контроль над потоком рендеринга.
Объект оперативного контента во многом похож на подготовку к вечеринке.
Во-первых, они приводят себя в порядок, красиво одеваются и прекрасно
выглядят. Затем, в последнюю секунду, они просматривают шкаф в прихожей в
поисках подходящего пальто, которое дополняет их наряд, надевают его и
направляются к двери. Они подбирали пальто по своему наряду, а не по пальто.
Окружающий шаблон — это оболочка, которую оперативный шаблон надевает
в последнюю секунду.
194 | Глава 9: Управление выводом и публикациями
Шаблон Разработка иУправление
Мы много говорили о шаблонах, но что они собой представляют и чем они
отличаются от самого контента?
Шаблоны почти всегда основаны на файлах. В то время как контент
существует в CMS как нечто, с чем редакторы работают через интерфейс,
шаблоны существуют в файловой системе как файлы, над которыми
разработчики работают, используя свои стандартные инструменты разработки.
(Видеть«Версия кода наше содержание» на странице 28.)
Некоторые системы также позволяют редактировать шаблоны через интерфейс,
хотя это происходит редко и обычно делается только в экстренных случаях,
когда доступ к базовому коду недоступен. Текстовая область на HTML-
странице предлагает очень мало возможностей для поддержки кодирования,
даже самые элементарные инструменты редактирования кода — нумерация
строк, подсветка синтаксиса, автозаполнение и т. д.7
Существование шаблонов на основе файлов подчеркивает еще одно различие
между шаблонами и контентом: шаблоны являются активом кода, а не активом
контента. Изменение шаблона обычно рассматривается как изменение на
уровне кода и зависит от рабочего процесса разработчика, а не от редактора.
Эти два рабочих процесса совершенно различны.
Шаблоны обычно хранятся в системе управления исходным кодом, такой как
Git или Team Foundation Server. Иногда они хранятся вместе с самим кодом
CMS, а иногда и отдельно. Изменения в шаблонах часто тестируются и
развертываются с помощью известных инструментов сборки, таких как Jenkins
или Cruise Control (подробнее об инструментах разработки мы поговорим в
разделеГлава 12).
Взаимосвязь между кодом и контентом часто понимается неправильно, и их
часто смешивают. Редакторы могут ожидать, что контент будет обрабатываться
как код, а код будет обрабатываться как контент. Понимание разницы между
ними и границ между ними имеет решающее значение для общего понимания
самой CMS.
7 Очень немногие другие системы требуют разработки шаблонов исключительно через интерфейс.
Такое случается редко, но случается время от времени, и это часто приводит разработчиков в
замешательство. Файлы — это универсальный контейнер веб-разработки, это то, на чем разработчики
основывают свою работу и используют их в качестве механизма инкапсуляции и транспортировки
кода. Почти все процессы и методологии программирования предполагают, что код существует в
файлах, а не в записях базы данных, и без управления файловыми артефактами многие методологии и
рабочие процессы программирования полностью перестанут работать.
Шаблонизация |1 9 5
не должен ни включать, ни запрещать какую-либо конкретную парадигму
вывода. В идеале CMS должна стремиться быть «независимой от выходных
данных».
Некоторые CMS обеспечивают обнаружение устройств и используют эту
информацию для выбора шаблона (технически это адаптивный дизайн, а не
отзывчивый), но даже в системах, которые этого не делают, эта
функциональность может предоставляться веб-сервером или каким-либо
другим элементом в технологический стек.
Здесь можно увидеть предыдущее предупреждение о готовых виджетах
интерфейса. Стандартная HTML-структура, предоставляемая «функцией»
CMS, будет бросаться в глаза, как больной палец, если она является
единственным неотзывчивым элементом на странице или не реагирует так, как
все остальное. А учитывая, что HTML-код вашего адаптивного дизайна будет
сильно зависеть от выбранной вами платформы CSS, как эти готовые виджеты
будут решать, какой HTML-код выводить?
В более широком смысле этот вопрос говорит о разделении ответственности.
Входит ли в обязанности CMS управление обнаружением устройств и
генерацией адаптивного HTML? Большинство разработчиков скажут «нет»:
этим должны заниматься другие компоненты технологического стека. Пока
CMS не препятствует генерации любого HTML-кода, который желает
разработчик шаблона, оперативность вывода не является заботой CMS.
ИздательскийСодержание
Как только мы поймем взаимосвязь между нашим контентом и нашей
презентацией и разработаем шаблоны для отображения контента в нужном нам
формате, нам нужно будет привести этот контент в состояние, в котором кто-то
сможет его использовать. То, как мы это сделаем, во многом зависит от
взаимоотношений между нашей средой управления и нашей средой доставки.
8 Обычно. Некоторые установки могут просто публиковать контент в другом месте на том же сервере.
Публикация контента | 197
Какая архитектура по умолчанию?
На заре управления контентом разделение было архитектурой по умолчанию.
Системы управления контентом в основном представляли собой генераторы
статических файлов, которые просто помогали менеджерам веб-сайтов
преобразовывать данные в форматированные HTML-файлы, которые затем
копировались в корень веб-сайта.
Но по мере того, как языки веб-программирования и веб-сайты становились все
более сложными, модель разделения начала давать трещины. Наличие простых
статических HTML-файлов хорошо работало, когда контент не сильно менялся
и не требовалось ничего делать, но рынок начинал требовать, чтобы контент
становился активным.
Менеджеры веб-сайтов хотели, чтобы пользователи взаимодействовали с
контентом контекстуально: они хотели скрыть часть контента от
пользователей, которые не вошли в систему, или они хотели изменить способ
организации контента в зависимости от пользователя, или они хотели включить
режим реального времени. поиск контента. Статические HTML-файлы плохо
адаптировались к этим потребностям.
Постепенно CMS и контент, которым она управляет, стали более связанными.
Зачем писать HTML-файл, если PHP-скрипт может просто запрашивать и
получать содержимое из базы данных в режиме реального времени? С тех пор
связанная CMS стала моделью по умолчанию, а несвязанные системы
становится все труднее найти (хотя ситуация может измениться; мы поговорим
об этом немного позже).Глава 15).
В ситуациях, когда развязка все еще используется, CMS обычно либо
публикует веб-страницы со сценариями (например, PHP-файлы), которые
выполняются по запросу, либо не публикует файлы вообще. Некоторые
системы публикуют чистые записи данных в базе данных. 9 и веб-сайт создан
так, чтобы отображать их в реальном времени (как ни странно, теперь у вас
есть как бы две CMS: отдельная, заполняющая базу данных в качестве места
назначения, и связанная, использующая эту базу данных в качестве источника).
9 Я даже работал над узкоспециализированной сборкой, которая просто заполняла всю базу данных
SQLite содержимым и отправляла его в среду доставки. Таким образом, CMS заменяла весь источник
данных работающего веб-сайта при каждой публикации контента. Хотя он явно не подходит для
многих ситуаций, он оказался правильным выбором для этих конкретных требований и
демонстрирует, что несвязанные данные могут публиковаться во многих различных форматах,
помимо статических файлов.
Развязанный ИздательскийЦели
В несвязанных средах CMS передает контент «целям публикации», то есть
средам, предназначенным для доставки контента. Большинство систем могут
поддерживать более одной среды публикации и публиковать в них контент
одновременно.
10 Очевидно, что еще одним преимуществом этой модели для коммерческих компаний CMS является
то, что все серверы доставки необходимо учитывать и впоследствии лицензировать. Стоимость
лицензирования среды доставки может составлять наибольшую часть общей стоимости
поставщика.
200 | Глава 9: Управление выводом и публикациями
Палатка и потерянные файлы, не имеющие соответствующего содержимого.
Как вы можете отличить эти два понятия друг от друга?
Можете ли вы просто удалить среду доставки и заново опубликовать весь
репозиторий с нуля? Только если все для вашего сайта есть в CMS. Некоторые
решения управляются лишь частично: вспомогательные файлы находятся в
среде доставки (или развертываются там из системы управления версиями), а
файлы контента публикуются из CMS, и все эти файлы перемешиваются в
одних и тех же местах на сервере доставки. Как определить, какие файлы были
опубликованы из CMS, а какие существуют только в среде доставки?
Это поднимает более серьезный вопрос: как отделенная CMS обеспечивает
идеальную синхронизацию с опубликованной средой? «Владеет» ли он средой
доставки и осуществляет ли над ней железный контроль? Или он предназначен
для того, чтобы «вносить вклад» в среду доставки, а не нарушать работу уже
имеющихся файлов? Ответ на этот вопрос зависит от системы.
Архитектура
• Является ли система связанной или разделенной?
• Управляет ли система контентом без привязки к доставке в Интернете или
в нее встроены веб-ориентированные функции?
Шаблонизация
• Создание шаблонов выполняется на предметно-ориентированном языке
или на базовом языке программирования самой CMS?
• Позволяет ли язык замену токенов? Разрешает ли он фильтрацию и
форматирование заменяемых значений?
• Какие структуры управления доступны для логики шаблона?
• Как система шаблонов позволяет вам управлять объемным звуком и
включать его? Как окружение может получить правильный контекст
отображаемого объекта контента?
• Как система шаблонов позволяет абстрагировать и включать другие
шаблоны?
Отдельная публикация
• Как контент передается издательским объектам?
• Как настраиваются и управляются цели публикации? Требуются ли они для
запуска программного обеспечения, специфичного для CMS?
• Может ли CMS фиксировать события публикации? Могут ли процессы
запускаться до или после того, как контент будет отправлен в среду
доставки?
• Какие артефакты данных на самом деле публикуются? Только файлы, или
система может публиковать записи в базе данных или другом методе
хранения, не являющемся файловой системой?
• Как CMS обеспечивает синхронизацию среды доставки с репозиторием?
• Ожидается ли, что CMS также будет управлять файлами, не относящимися
к содержимому, или вспомогательные файлы должны находиться в среде
доставки, и из CMS будут публиковаться только файлы содержимого?
• Что необходимо установить на серверах доставки, чтобы они могли
получать контент из среды управления?
• Как лицензируются серверы доставки?
• Моделирование контента
• Агрегация контента
• Редакционный рабочий процесс
203
• Управление выводом
Номенклатура
При обсуждении многоязычного контента некоторые термины могут вызывать
затруднения. Вот несколько определений, которые следует иметь в виду:
2 Для целей этой главы я буду использовать английский язык, хотя прошу прощения за этноцентризм.
Многоязычная обработка | 205
Язык Обнаружение иВыбор
Язык, на котором ваш посетитель хочет потреблять контент, можно сообщить
тремя распространенными способами:
4 Хотя имело бы смысл просто перечислить языки в порядке предпочтения, «q=» указывает на
«коэффициент качества», который представляет собой порядок предпочтения языков. Почему такое
осложнение? Это связано с более широкой концепцией «согласования контента», встроенной в
спецификацию HTTP. Другие варианты контента, такие как качество или тип, могут более детально
основываться на факторе качества. Однако на практике согласование содержания на этом уровне
используется редко.
5 Технически правильный код статуса должен быть «406 Not Acceptable», что означает, что контент
может быть создан только с «характеристиками, неприемлемыми в соответствии с заголовками
принятия, отправленными в запросе». Однако это используется редко и может сбивать с толку,
поэтому большинство сайтов возвращают ошибку 404 Not Found.
6 Это характерно для «языковых семей» или «праязыков», которые представляют собой группы
схожих региональных языков. Например, норвежский, шведский, датский, фарерский и исландский
языки имеют отдаленное отношение к историческому языку, называемому древнескандинавским.
Большинство европейских языков также считаются германскими и имеют много общих черт
(большие части алфавита, пунктуация и форматирование, например направление чтения слева
направо).
Языковые варианты
В каждой стране также могут быть определенные диалекты языка. В этих
случаях в соответствии со стандартом ISO-639 коды языков пишутся через
дефис. Например, «fr-ca» означает «французский язык, на котором говорят в
Канаде», а «en-nz» означает «английский язык, на котором говорят в Новой
Зеландии».
Некоторые страны требуют дифференциации. Например, в Норвегии
существует два официальных варианта письменного и устного языка:
Букмол
«no-nb», официальный вариант
Нюнорск
«нет-нн»,буквально «новый норвежский»
Все органы власти по закону обязаны публиковать/передавать 25% своего
контента в Нюнорске. В таких случаях обычно применяются резервные
правила. Для 75% контента, который не обязательно должен находиться в
Nynorsk, запрос контента в «no-nn», скорее всего, будет настроен на возврат к
«no-nb».
7 Хотя это и не связано строго с вашей CMS, это малоиспользуемый вариантСВЯЗЬТег можно
использовать для указания на эквивалентный контент на других языках:<link rel="alternate"
hreflang="se"href="http://se.mywebсайт.com/" />. Некоторые индексаторы поисковых систем
используют это для идентификации одного и того же контента на нескольких языках.
Языковые правила | 209
ВнеТекст
Хотя текст — это контент, на который чаще всего влияет локализация, это не
единственный контент:
АнонимныйПерсонализация
Цель любого веб-сайта, ориентированного на маркетинг, — индивидуально
адаптироваться к каждому посетителю. Теоретически один веб-сайт может
меняться в ответ на информацию о посетителе и предоставлять контент и
функциональность, необходимые конкретному посетителю в данный
конкретный момент, чтобы более эффективно побудить посетителей к
действию.
Эта функция известна под общим названием «персонализация». Существуют
два совершенно разных типа:
Входящий запрос обычно фиксируется еще до того, как CMS вступит в игру, а
события на стороне клиента отслеживаются с помощью кода, разработанного в
процессе создания шаблонов. Учитывая это, ценность интеграции аналитики
сомнительна.
С тех пор тенденцией стала интеграция аналитических пакетов от других
поставщиков, наиболее распространенным из которых является Google
Analytics. Многие системы теперь предлагают возможность подключаться к
специальной учетной записи Google Analytics для сайта, которым управляет
CMS, и отображать эту информацию внутри интерфейса, сопоставленную с
самим контентом.
Редакторы могут иметь возможность просмотреть часть контента в CMS, а
затем перейти на другую вкладку или виджет боковой панели в том же
интерфейсе, чтобы просмотреть аналитическую информацию конкретно по
этому контенту.
Благодаря функциям персонализации, описанным в последнем разделе,
некоторые аналитические отчеты могут иметь ценность с точки зрения
информации о том, сколько посетителей соответствует критериям для
конкретной демографической группы. Это даст редакторам некоторое
представление о том, насколько распространена или редка определенная
комбинация посетителей.
ФормаЗдание
Управление контентом обычно связано с выводом контента; однако в
большинстве систем есть некоторые методы обработки приема контента
посредством создания форм.
При создании форм у редактора есть две основные проблемы:
• Требуется ввод.
• Входные данные должны соответствовать указанному формату (числовому,
определенному количеству цифр или шаблону регулярного выражения).
• Ввод даты (или числовой ввод) должен находиться в пределах указанного диапазона.
• Входные данные должны быть из указанного списка опций.
Эти параметры снова подчеркивают (или еще больше размывают) грань между
редакционным контролем и контролем разработчиков. В какой момент
сложность формы переходит от того, с чем может справиться редактор, к тому,
что должен реализовать разработчик? Граница нечеткая, но она достаточно
твердая — редакторы обычно не знают, где находятся границы, пока не
наткнутся на требование, которое невозможно реализовать.
Управление URL-адресами
На заре существования CMS URL-адреса контента обычно были «уродливыми»
и выдавали внутреннюю работу системы. Например:
/articles/two_column_layout.asp?article_id=354
Это отличалось от «дружественных» или «красивых» URL-адресов, которые
выглядели так, будто были созданы вручную из имен файлов и папок и
придавали некоторую семантику.16 ценность для содержания. Например:
/articles/2015/05/politics/валютный кризис в Китае
Сегодня довольно редко можно найти CMS, которая не реализует тот или иной
метод семантических URL-адресов. В случае систем с деревом контента
(обсуждаемым вГлава 7), эти URL-адреса обычно формируются путем
назначения сегмента каждому объекту контента, а затем объединения
сегментов для формирования полного URL-адреса (и, возможно, добавления
индикатора языка в начало).
Итак, если ваше дерево выглядело вот так:
• Статьи(сегмент: «статьи»)
• 2015 («2015»)
• Мэй («05»)
• Политика («политика»)
16 «Семантика» — это изучение значения. Описать что-то как «семантическое» — значит сказать, что
оно несет в себе какое-то большее значение, выходящее за рамки его первоначальной или очевидной
цели. Фактическая цель URL-адреса — просто идентифицировать контент. Семантический URL-
адрес не только идентифицирует контент, но и дает некоторое представление о нем.
224 | Глава 10: Другие функции
• Валютный кризис в Китае («валютный кризис в Китае»)
Однако трудно сделать общий вывод о том, выгодно это или нет, поскольку два
сайта в одном экземпляре CMS могут иметь широкий диапазон отношений. В
некоторых ситуациях делиться — это преимущество, а в других —
обязанность.
С одной стороны, второй сайт может быть просто переработкой первого. Он
может иметь точно такое же содержание и архитектуру, но иметь немного
другой бренд.18 В этом случае совместное использование редакторов, контента
и кода чрезвычайно выгодно.
На другом конце шкалы второй сайт может принадлежать совершенно другой
организации (возможно, вы являетесь третьей стороной, предоставляющей
SaaS-подобный хостинг CMS). В этом случае совместное использование одного
и того же экземпляра CMS, скорее всего, создаст больше проблем, чем пользы,
поскольку предотвращение совместного использования редакторов, контента и
кода будет гораздо важнее, чем совместное использование чего-либо из этого,
и потребует контроля и повышенной сложности кода. .
Где-то посередине находится наиболее распространенный сценарий: второй
сайт предназначен для той же организации, поэтому совместное использование
редакторов полезно, а второй сайт требует части контента основного сайта, что
также может быть полезно. Но второй сайт также принесет много уникального
контента, функциональности и форматирования до такой степени, что
совместное использование кода и шаблонов станет невозможным. Это
становится все более распространенным, поскольку отделы маркетинга
поддерживают более крупные кампании с помощью отдельных микросайтов,
которые намеренно сильно отличаются от основного сайта с точки зрения
стиля и формата.
Кроме того, второму сайту могут потребоваться изменения в моделировании
контента, поэтому совместное использование типов контента будет затруднено.
Например, если на страницах вашего микросайта есть правая боковая панель (а
на основном сайте ее нет), как с этим справиться? Добавляете ли вы атрибут
правой боковой панели к типу контента «Текстовая страница» для всей
установки и просто убедитесь, что
Поиск контента
Мы обсуждали варианты поиска в предыдущих разделах — вГлава 7 мы
обсуждали поиск контента как метод агрегирования и только что обсуждали
поиск с точки зрения системного API или отчетов. Однако поиск в этих
контекстах был «параметрическим» поиском, или поиском по параметру.
Это точный, или «жесткий», поиск. Если вам нужен список всего контента,
опубликованного в 2015 году, в обратном порядке по дате, то это очень
понятная операция поиска, не подлежащая интерпретации. Год — в данном
случае 2015 — является четким, однозначным параметром и
19 Для этого случаяна латыни означает «для этой цели» и обычно означает «что-то, сделанное по
определенной или конкретной причине без предварительного планирования».
Поиск контента |2 2 9
объект содержимого либо соответствует ему, либо нет. Порядок также
однозначен: даты можно легко изменить в обратном порядке, не прибегая к
какой-либо интерпретации.
Поиск по контенту является противоположным. Это поиск контента, который
пользователи выполняют — вездесущее поле поиска в правом верхнем углу
страницы. Это «мягкий» поиск, который по своей сути является неточным.
Цель состоит в том, чтобы интерпретировать то, что хочет пользователь, а не
делать именно то, что он говорит. Предоставляемые результаты должны
представлять собой совокупность контента, связанного с запросом (даже если
он не совсем соответствует запросу), и упорядочены таким образом, чтобы
наиболее близкое совпадение находилось вверху.
Лусене
Большинство систем, реализующих расширенный
полнотекстовый поиск, используют технологию с открытым
исходным кодом под названием Lucene.21 Lucene — это
система поискового индексирования и поиска, выпущенная в
1999 году. Это де-факто отраслевой стандарт текстового
поиска, который широко используется в Интернете в целом.
Lucene окружен двумя основными поисковыми серверами с
открытым исходным кодом: Solr и Elasticsearch. Эти системы
предоставляют широкий спектр функциональных
возможностей, и поставщики очень часто либо используют их
скрытно, либо предлагают инструменты для прямой
интеграции с ними.
Пользователь и РазработчикЭкосистема
Это может показаться странной «особенностью», которой можно завершить эту
главу, но сообщество поддержки и разработчиков, окружающее платформу
CMS, возможно, является ее самой важной особенностью. Просто мало что
заменит поддержку, обсуждение и вклад процветающего сообщества
пользователей и разработчиков, которые помогают другим.
Продавцы могут помочь или помешать этим усилиям. Большинство
поставщиков предоставляют своим пользователям официальный адрес
сообщества через форумы и платформы совместного использования кода. Если
поставщика нет, он может возникнуть органически, хотя о его существовании
может быть неизвестно за пределами небольшой группы.
Продавцы могут и дальше поддерживать сообщество, участвуя в нем.
Несколько форумов сообщества CMS частично патрулируются разработчиками
продуктов, что обеспечивает механизм поддержки по обратным каналам и, что,
возможно, более важно, дает этим разработчикам место в первом ряду для
наблюдения за борьбой своих пользователей и способами, которыми продукт
должен разрабатываться для удовлетворения их потребностей.
Разработчики, предоставляющие код сообществу, — это огромное
преимущество, которое можно измерить в чистом бюджете. Часто вы не первая
организация, пытающаяся решить конкретную проблему, и проверенный,
проверенный код для вашей конкретной ситуации может уже существовать.
21 Да, имя уникальное. Дуг Каттинг, первоначальный разработчик, черпал вдохновение из второго
имени своей жены, которое было именем ее бабушки по материнской линии. Похоже, что в
последний раз «Lucene» было хотя бы отдаленно популярно как женское имя в Соединенных
Штатах в 1930-х годах.
The КодAPI
Интерфейс прикладного программирования (API), лежащий в основе любого
программного продукта, представляет собой набор инструментов
программирования, которые разработчику предоставляются для работы с
контентом из кода.
Например, вот код от Episerver для получения заголовка страницы контента на
C#:
var repo = ServiceLocator.Current.GetInstance<IContentRepositoryService>();
var myPage = repo.Get<TextPage>(new ContentReference(123));
var title = myPage.Property["PageTitle"].Value;
Концепции, представленные в этом коде — существование репозитория как
внедренного сервиса, объект контента, доступный как строго типизированный
объект TextPage, идентификация контента по числовому идентификатору,
свойства контента, представленные словарем с ключами, — представляют
собой API, доступный для этой конкретной CMS. Базовым языком является C#,
но API — это словарь и инструменты, предоставляемые C# для работы с
Episerver.
Для сравнения, вот тот же общий код в Concrete5 (PHP):
$my_page = Страница::getByID(123);
$title = $page->getAttribute('PageTitle');
В Магнолии (Java, с использованием JCR):
Сеанс сеанса = MgnlContext.getJCRSession("myWorkspace"); Узел
myPage = session.getNodeByIdentifier(123);
String title = myPage.getProperty("pageTitle").getString();
И в Plone (Python):
из API импорта Plon
my_page = api.content.get(UID=123)
title = my_page.page_title
Специфика явно разная, но общая цель и результат одни и те же. API — это
набор инструментов, доступных разработчикам из кода. (Стоит отметить, что
приведенные выше примеры кода взяты из API, которые обычно считаются
достаточно компетентными. Менее функциональные API будут иметь менее
элегантные примеры.)
236 | Глава 11: API и расширяемость
Недавно я учил свою 14-летнюю дочь водить машину. 1 В ходе этого процесса я
выявил аспект вождения, который раньше никогда не замечал: нужно быть
предсказуемым. Цель водителя — делать то, чего от вас ожидают другие. Во
многом из того, что происходит в дороге, другие люди делают предположения
о том, что вы планируете делать. Быть непредсказуемым — значит быть
небезопасным.
То же самое относится и к API. Ключевыми факторами являются
последовательность и предсказуемость. API должен иметь согласованный
интерфейс, который может предсказать разработчик. На самом деле это было
названо принципом наименьшего удивления.2 Способность разработчика
предсказать, как API может работать и какую функциональность он может
предложить, имеет огромное преимущество при расширении системы.
Динамика общей разработки программного обеспечения — это тема,
выходящая далеко за рамки этой книги, но качество API любого программного
обеспечения зависит от того, как программное обеспечение создавалось с
течением времени. Программное обеспечение часто создается бессистемно, а
API развивается по мере необходимости — менеджер по продукту или
торговый представитель в панике говорит: «Нам нужна функция X, чтобы
продавать продукт!» и команда разработчиков торопливо пишет функцию X,
попутно меняя API любым возможным способом.
Более разумная команда разработчиков сначала планирует и пишет API, чтобы
иметь возможность предвидеть потребности групп по продукту и продажам, а
новые функции вписываются в более широкую логическую модель и
философию того, как CMS моделирует и управляет своим контентом. Это
программное обеспечение имеет тенденцию писаться заранее, начиная с API, а
не реактивно, начиная с «новости дня» внутрь. API управляет функциями, а не
наоборот.
1 Да, в Южной Дакоте вы можете водить машину в 14. Это откровение часто встречают с ужасом люди
в более строгих частях страны.
2 Кроме того, эксперт по юзабилити Дон Норман упомянул «концептуальную модель» чего-либо,
которая представляет собой мысленное понимание того, как пользователь ожидает, что это будет
работать. Норман говорил о потребительских продуктах, но то же самое справедливо и в отношении
API: система должна стремиться работать так, как ожидает от нее большинство разработчиков.
• Как вы извлекаете контент из кода? Если у вас есть контент в коде, как вы
можете манипулировать им и сохранить новую версию?
• Насколько детальным может быть извлечение на уровне кода? Сколькими
способами вы можете искать контент? Можете ли вы получить список
контента на основе X различных критериев и упорядочить его по одному
или нескольким из этих критериев?
• Как вы можете создавать новый контент из кода?
• Как реализовать новую функциональность, которая может быть даже не
связана с контентом? Как пользовательский код вашей организации может
сосуществовать с кодом CMS?
• Какие события, перехватчики или триггеры уровня кода доступны?
Например, когда контент публикуется, может ли ваш код обнаружить это
событие и внедрить новую логику в процесс?
• Какая существует возможность запускать задания командной строки или
запланированные задания из интерфейса CMS?
• Как можно настроить административный интерфейс для управления
пользовательскими функциями?
• Доступен ли API только из кода, локального для установки CMS, или
доступны веб-службы или другие удаленные API?
238 | Глава 11: API и расширяемость
API, как известно, своеобразны. Опять же, не существует Великой
унифицированной теории управления контентом, поэтому нет и Великого
унифицированного API.3
Кроме того, качество API часто не имеет никакого отношения к качеству
продукта с точки зрения пользователя или редактора. Некоторые очень
привлекательные на вид системы имеют ужасно сложные API, которые
постоянно расстраивают разработчиков, в то время как другие системы,
которые кажутся упрощенными, обладают невероятной мощью и
элегантностью кода. (По иронии судьбы, возможно, именно поэтому они
выглядят упрощенно из коробки — их настолько легко настроить, что
большинство клиентов делают это значительно.)
Опять же, единственный способ убедиться и подтвердить компетентность API
CMS — это позволить вашим разработчикам фактически работать с ним.
Модели событий
Одной из проблем любого пакетного программного обеспечения является
вставка в него логики, при которой собственный код будет выполняться среди
основного кода системы. Одним из решений было бы покопаться в исходном
коде и просто вставить новый код в те места, где вы хотите, чтобы он
выполнялся. Однако очевидно, что это открывает многочисленные проблемы с
удобством сопровождения и стабильностью, не говоря уже о том, что исходный
код просто не поставляется со многими коммерческими системами.
Более управляемый способ добиться этого результата — использовать так
называемую модель событий. Программирование на основе событий не
является специфичным для CMS; это обычная архитектура программирования.
Когда код выполняется, он может вызывать события. Событие — это
объявление о том, что что-то произошло внутри исполняющего программного
обеспечения. Внешний код может «подписаться» на эти события, по сути
говоря: «Когда произойдет событие X, выполните этот блок кода». Этот код
обычно известен как обработчик событий.
Обработчикам событий не обязательно знать, где именно в коде CMS
происходят события. Разработчикам просто нужно знать, какие события
доступны и какую информацию предоставляют эти события при их
возникновении. Любой код внутри CMS может вызвать событие, и пока
обработчик событий подписан, он будет выполняться. На событие может быть
подписано более одного обработчика событий, и обычно они выполняются в
том порядке, в котором на них были подписаны.
События обычно предоставляют обработчику информацию о том, что
произошло. Эта информация может быть просто уведомлением, чтобы можно
было написать код для выполнения действия.
3 Хотя попытки были. Службы взаимодействия управления контентом (CMIS) и API репозитория
контента для Java (JCR) представляют собой попытки унифицировать обработку контента на уровне
API. Они имели разную степень успеха и имели ограниченное применение на рынке, в основном в
более крупных корпоративных системах.
Обычно два события «закрывают» код. Событие «до» будет вызвано перед
кодом, часто предоставляя обработчикам информацию, которую можно
изменить, чтобы повлиять на то, как будет выполняться последующий код. Код
выполнится, затем возникнет событие «после». Та же самая информация
обычно будет предоставлена после события, но ее изменение не будет иметь
никакого эффекта.4
4 В некоторых системах используется соглашение «ing/ed». События «до» и «редактирование» после
событий (например, «Публикация контента» и «Контент опубликован»).
ПлагинАрхитектуры
С API, который предлагает система, тесно связана возможность упаковки и
распространения настроек либо на коммерческой основе, либо через решения с
открытым исходным кодом. Некоторые системы имеют обширные расширения
своих основных функций, доступные через пакеты кода, которые по-разному
называются плагинами, надстройками, расширениями, компонентами или
модулями (мы будем использовать «плагин»).
Таким образом, «архитектура плагинов» представляет собой набор
устоявшихся концепций API, событий и точек подключения, которые
позволяют разработчику создавать некоторые функциональные возможности
для CMS, а затем объединять их в той или иной форме, которая затем может
быть установлена в другой установке системы. эта CMS.
CMS с открытым исходным кодом обычно имеют хорошо развитую
архитектуру подключаемых модулей из-за характера их разработки.
Программное обеспечение с открытым исходным кодом разрабатывается
сообществом разработчиков, а архитектуры подключаемых модулей часто
создаются для обеспечения единообразной интеграции новых функций, когда в
них участвует большая распределенная группа людей. Кроме того, рост
сообществ пользователей систем с открытым исходным кодом приводит к
тому, что множество разных людей пробуют много разных вещей. Огромный
объем реализаций имеет тенденцию приводить к тому, что больше кода
превращается в доступные плагины.
За коммерческим программным обеспечением, напротив, стоит официальная
организация, и предполагается, что эта организация будет обеспечивать
функциональность. Кроме того, лицензионные сборы, естественно, сократят
базу пользователей по сравнению с альтернативами с открытым исходным
кодом, поэтому будет меньше реализаций. Эти реализации будут выполняться
Подключаемые архитектуры |2 4 3
организации, которые в среднем меньше придерживаются философии
открытого исходного кода и больше защищают свой код.
Количество и качество доступных плагинов обычно напрямую связаны с
принятием конкретной платформы. Такие системы, как WordPress и Drupal,
имеют тысячи доступных плагинов, способных удовлетворить практически
любые требования. Действительно, для многих систем наиболее ценным
навыком, которым может обладать разработчик, является глубокое знание того,
какие функциональные возможности доступны через соответствующие
библиотеки плагинов. Большая часть любого внедрения этих систем — это
выбор, настройка и адаптация наиболее подходящих плагинов для выполнения
заявленных требований.
Недостатком плагинов являются проблемы с безопасностью, удобством
сопровождения и согласованностью. Когда плагин внедряется в установку,
третья сторона по существу получает доступ к среде. Интегратор предполагает,
что этот плагин надежен, хорошо протестирован и не создает дыр в
безопасности (непреднамеренно или злонамеренно).
Абстракция репозитория
Предполагается, что большая часть содержимого установки CMS будет
храниться в самом репозитории CMS. Однако это не обязательно так.
Некоторые системы позволяют абстрагировать части репозитория. Код для
фактического сбора данных для объектов контента можно заменять и
делегировать другому коду и другим источникам. Пользовательский код может
позволить некоторым данным поступать из других источников хранения, а
также представлять их и манипулировать ими точно так же, как контент,
который фактически находится в
ПодключаемыйАутентификация
Одним из недостатков внедрения нового программного обеспечения в
организацию является наличие нового набора учетных данных, которым нужно
управлять и который пользователи должны помнить. Один из самых простых
способов для пользователей почувствовать, что система является
неотъемлемой частью их организации, — это разрешить им использовать те же
учетные данные, которые они используют для других систем. Добавляем еще
один набор креативов
Подключаемая аутентификация |2 4 7
Dentials вызывает утомление паролей, что обычно приводит к появлению
стикеров с паролями, прикрепленных к боковым сторонам мониторов.
Многие CMS позволяют либо интегрировать свои системы с
распространенными методами аутентификации, либо полностью заменить их
на пользовательскую систему. Интеграция с Active Directory от Microsoft
является обычным явлением, как и более общая интеграция с LDAP.
Некоторые системы имеют интеграцию OAuth, OpenID или Facebook Connect,
что позволяет пользователям входить в систему путем аутентификации с
помощью своих учетных записей Google или Facebook.
Если организация использует менее известную или даже специальную систему
аутентификации, иногда можно разработать код и предоставить его CMS для
выполнения задач аутентификации. В этих случаях очевидно, что
разработчики-реализаторы обязаны предоставить хорошо протестированный
код, поскольку безопасность CMS будет настолько безопасна, насколько это
позволяет этот код. CMS будет взаимодействовать только с этим
пользовательским кодом и будет предполагать, что аутентификация
пользователей выполняется безопасным и строгим способом.
Обратите внимание, что подключаемая аутентификация и общие учетные
данные не обязательно означают единый вход. Чтобы обеспечить единый вход,
ваши редакторы входят в одну систему и проходят беспрепятственную
аутентификацию во многих других системах, включая, надеюсь, вашу CMS.
Даже если вы подключите свою CMS к поставщику Active Directory,
редакторам все равно придется вводить свои учетные данные, но это будут те
же учетные данные, которые они используют везде, что само по себе полезно.
Веб-сервисы
Многие системы предоставляют интерфейс веб-службы, позволяющий
удаленно взаимодействовать с CMS через HTTP. Системы различаются по (1)
конкретному используемому протоколу веб-сервиса и
(2) допустимая глубина взаимодействия.
SOAP (простой протокол доступа к объектам) на протяжении многих лет был
стандартным протоколом веб-сервисов, но эту позицию узурпировал REST
(REpresentational State Transfer).5 Аналогично, XML уже давно является
доминирующим форматом сериализации, но его вытесняет JSON. Большинство
систем предлагают некоторую комбинацию этих двух переменных (XML через
SOAP или JSON через REST или иногда наоборот).
Некоторые веб-сервисы доступны только для чтения, но другие системы
стремятся обеспечить полный доступ к своим API через веб-сервисы.
Некоторые системы идут еще дальше и запускают собственные
пользовательские интерфейсы из своего веб-сервиса. Уровни абстракции во
многих языках программирования и средах продвинулись до такой степени,
что доступ к веб-сервису можно получить через общий API и даже заменить
его.
5 Многие разработчики не называют REST «протоколом», а скорее считают его соглашением или философией.
Очевидно, что в идеале вам нужно и то, и другое: надежная CMS в сочетании с
надежной реализацией. Даже простое понимание и принятие того факта, что
реализация так же важна, как и сама CMS, настроит вас на правильный
настрой.
Типы изРеализации
На самом общем уровне реализации CMS можно разделить на три типа в
зависимости от их связи с текущим веб-сайтом:
Только CMS или «погрузчик»2
В этом случае цель состоит в том, чтобы ничего на веб-сайте не менялось
— дизайн, контент и информационная архитектура останутся
идентичными, но CMS, на которой работает веб-сайт, будет заменена на
другую (или, реже, на статически управляемую систему). на сайте будет
внедрена CMS). В этом типе реализации текущий веб-сайт является
моделью нового веб-сайта.
CMS плюс изменение оформления или реорганизация
Это расширение реализации вилочного погрузчика, когда организация
решает провести легкую служебную работу, поскольку ей предстоит
внедрить CMS. Часто применяются новые дизайны, поскольку шаблоны в
любом случае придется переделывать, а миграция контента часто означает,
что контент можно очистить или реорганизовать без значительной
дополнительной работы. Некоторые вещи изменятся, но изменения
ограничиваются стилем и редакцией, а это означает, что текущий веб-сайт
по-прежнему в некоторой степени актуален в качестве модели.
2 Называется вилочным погрузчиком, потому что веб-сайт «поднимается», а новая CMS заменяется «под» ним.
Типы реализаций |2 5 5
Полная реконструкция
В таких случаях пересматривается весь веб-сайт. Новая CMS может быть
лишь частью более крупного цифрового оборота. Веб-сайт получит новый
дизайн, новый контент, новую информационную архитектуру и новую
функциональность — от старого сайта практически ничего не останется.
Внедрение CMS часто происходит после большой стратегии контента и
этапа планирования UX. Очевидно, что существующий веб-сайт не
подходит в качестве модели для нового веб-сайта.
Хотя первый тип, реализация вилочного погрузчика, может показаться самым
простым, он может оказаться обманчиво сложным, поскольку теперь вам
предстоит обернуть существующую базу исторических функций вокруг новой
CMS. Новая система всегда будет работать иначе, чем старая CMS, и веб-сайт,
вероятно, со временем адаптируется, чтобы соответствовать принципам работы
старой CMS. Команды внедрения часто пытались перенести существующую
функциональность в новую систему, чтобы воспроизвести развитие веб-сайта
на основе старой системы.
Пословица о крайних случаях, обсуждавшаяся ранее, справедлива и здесь. При
наличии достаточного количества времени редакторы найдут каждый уголок
CMS. Как упоминалось вГлава 10, любой конкретный редактор может
использовать только 25% общей функциональности, но каждый редактор
может использовать разные 25%, то есть редакционная группа коллективно
ожидает, что все старые функции будут работать в новой системе, иногда
одинаковым образом. , даже если это неэффективный способ достижения
какой-то цели.
С другой стороны, полная перестройка, по крайней мере, дает вам возможность
сопоставить новые функциональные возможности с новой CMS, на которой
они будут работать. Сопоставление требований к новому дизайну и
функциональности с технической осуществимостью — это ожидаемая
динамика проекта реконструкции, которая дает команде внедрения
возможность влиять на планы в отношении функциональности, которую будет
поддерживать новая CMS.
Предварительная реализация
Прежде чем приступить к реализации, вам необходимо подвести итоги того, с
чем вам придется работать, а затем использовать это для разработки плана.
Предварительная реализация |2 5 7
сами по себе — тогда они могут не иметь отношения к усилиям по развитию.
Например, разработчика не волнует, требует ли дизайн шрифта с засечками или
без засечек, или же контент написан от первого или от третьего лица. Усилия
по развитию те же.
Будьте осторожны: изменения в дизайне и контенте необходимо тщательно
исследовать на предмет потенциальных изменений модели контента. Казалось
бы, простые изменения в дизайне и содержании могут потребовать
значительных изменений базовой модели, и эти изменения имеют странный
характер лавинообразного роста. Изменение вещи А внезапно вызывает
изменения в вещи Б и вещи С. Изменения порождают новые изменения, пока
две недели спустя вы не меняете вещь Z и не понимаете, что первоначальные
изменения зашли гораздо глубже, чем вы думали.
Один винт
Один из моих технических рецензентов рассказал этот анекдот,
который удивительно похож на многие проекты CMS:
Все началось с того, что из нашей старой
посудомоечной машины выпал шуруп. Мы могли бы
заменить винт, но решили, что посудомоечная машина
старая и, вероятно, все равно скоро выйдет из строя.
Поэтому мы купили новый. Новая посудомоечная
машина привлекла больше внимания к нашей
уродливой кухне. Поэтому мы отремонтировали его и
пристроенную к нему столовую. Когда этот проект
был завершен, вид из нашей новой столовой на
старую гостиную был жалким. Итак, мы
отремонтировали третий этаж, перевезли туда детей.
Одну из детских комнат превратили в комнату с
телевизором, а нашу гостиную превратили в красивую
гостиную… и все это благодаря одному винту.
Каков единственный винтик вашего проекта?
Предварительная реализация |2 5 9
Фаза открытия проекта CMS обычно выполняется командой специалистов по
контент-стратегии или специалистов по UX/IA, которые работают с
организацией для определения потребностей. Ключевым моментом является
то, нужно ли этой команде работать со знаниями о предполагаемой CMS или
нет, если эта информация вообще известна на данный момент.
Некоторые говорят, что сайты следует планировать так, чтобы они не зависели
от CMS, и что основное внимание должно быть уделено предоставлению
организации наилучшего веб-сайта. Однако более практичная школа мысли
утверждает, что если известна предполагаемая CMS, то необходимо проверить
планы и проекты на предмет того, что действительно может быть реализовано,
что означает отфильтровывание идеалистических и грандиозных планов,
которые невозможно воплотить в жизнь. Например, планирование
комплексной стратегии персонализации — это дорогостоящая трата времени,
если ваша CMS не поддерживает персонализацию и вы не можете
интегрировать необходимые функции из внешнего сервиса.
Если предполагаемая CMS известна, обычно разумно поручить команде
внедрения проанализировать планы и проекты на предмет осуществимости по
мере их появления. Раннее обсуждение гипотетической функциональности
может помочь команде дизайнеров получить четкое понимание того, какие
идеи действительно могут работать.
Предварительная реализация |2 6 1
Для любого элемента каркаса планировщики сайта, владельцы или редакторы
должны объяснить, откуда он взялся. Это управляемый контент? Это из
объекта оперативного контента? Это из другого объекта контента? Это из
внешнего источника данных? Это контекстная логика, например связанный
контент или навигация по боковой панели? Если да, то на каких данных
основана эта логика?
Им не обязательно иметь полное техническое понимание (это работа
разработчика), но им необходимо иметь хотя бы какое-то логическое
представление о том, откуда берется контент. Если нет, разработчик может
сделать резервную копию и задать более общие вопросы о характере
информации:
3 Конечно, если CMS уже выбрана, это может быть спорным вопросом, но это могло бы, по
крайней мере, пролить свет на то, как должна формироваться эта география.
Предварительная реализация |2 6 3
В ходе анализа на уровне функций команда должна будет принять во внимание:
Вот пример.
Допустим, дизайн сайта требует множества текстовых выносок, все в разных
стилях. Должна ли быть визуальная «палитра» различных стилей, которую
редакторы смогут просматривать и выбирать один щелчком мыши? Или, с
другой стороны, можно ли этим редакторам доверить простое текстовое поле, в
котором можно ввести имя известного CSS-класса, который будет применен к
окружающему DIV?
Первый вариант явно более удобен для пользователя и отточен, но его
реализация может стоить значительно дороже и быть менее гибким. При
втором варианте новые классы CSS могут создаваться «на лету», и редакторы
могут просто вводить их, тогда как при первом варианте палитру стилей,
возможно, придется изменить вручную, чтобы представить новый стиль.
Некоторым редакторам нужен максимально удобный и контролируемый
интерфейс. Другие хотят быть «приближенными к металлу» и иметь больше
ручного контроля над этими вещами. Эти редакторы могут возмущаться, когда
им дают варианты с ложки, и раздражаться тем, что они не могут просто ввести
класс CSS, о существовании которого они знают. Только знание предпочтений,
навыков, подготовки, опыта и политики управления редактора может помочь
вам принять это решение.4
Использование Markdown и других форматов разметки — еще один яркий
пример. Некоторым редакторам нравится точность и скорость, которые дает
Markdown. Другие редакторы
4 Сложнее всего, когда интегратор является внешним и получает оплату за свою работу. В то время
как интегратор может использовать второй вариант в искренней попытке повысить гибкость, клиент
может рассматривать первый вариант как явно лучший и интерпретировать план интегратора как
недостаток навыков или, что еще хуже, желание предоставить некачественный продукт увеличить
свою прибыль.
Правильный путь
Однажды в моей компании шла бурная дискуссия о
приемлемости срезать углы и оставлять некоторые острые
углы ради экономии бюджета (конечно, с понимания клиента).
Один из разработчиков сказал: «Я бы не стал этого делать,
потому что хочу сделать все правильно». Невысказанным
осталось то, что означало «право». Означает ли это
архитектурно совершенный путь? Или это означает
практичный, но менее совершенный способ достижения целей
клиента, одна из которых — уложиться в рамки бюджета?
Разработчикам приходится принимать подобные решения
десятки раз в ходе любой реализации. (Обратитесь к«Несущие
стены» на странице 176.)
ШагМногослойность
Архитектор Фрэнк Даффи известен своей концепцией под названием
«сдвигающиеся слои» или «наслоение темпов». Он рассматривает проект
здания по слоям, которые движутся и меняются с разной «темпностью». Всего
существует шесть слоев, все начинаются с буквы «S»:5
Сайт
Фактическая территория, на которой находится строительная площадка
Состав
Недвижимые части здания
Кожа
Внешняя поверхность здания
Услуги
Базовые электрические, водопроводные и климатические системы здания.
Космос
Внутренний дизайн здания
Вещи
Вся мебель и отделка внутри здания.
Эти слои движутся с разной скоростью. Мебель в комнате будет переставляться
с гораздо большей скоростью, чем земля под зданием будет разрушаться с
течением времени. Точно так же внешняя поверхность здания меняется гораздо
легче, чем фундамент или опорные столбы.
То же самое относится и к веб-сайту и его содержимому. Все меняется с разной
скоростью. Основная цель CMS будет меняться с другой скоростью, чем слова,
хранящиеся в ней. И логотип в верхнем углу будет меняться с другой
скоростью, чем список выпусков новостей.
Каждый элемент имеет темп. Эти темпы необходимо учитывать при
планировании. Для объектов, которые движутся медленнее, может
потребоваться меньше инструментов управления (или, возможно, менее
совершенных инструментов управления). Очевидно, что понимание темпов
является ключом к принятию разумных решений о том, как реализовать.
5 Подробно Стюартом Брэндом в книге «Как учатся здания: что происходит после того, как они сданы в
эксплуатацию»Построен(Пингвин).
Предварительная реализация |2 6 7
В некоторых случаях разработчикам может потребоваться напомнить, что они
не создают структуру или абстракцию. По сути, они создают настоящий веб-
сайт с ограниченным набором задач, которые необходимо решить.
Процесс реализации
Реализации CMS может быть трудно обобщать, но следующее описание
должно быть как можно более всеобъемлющим и разумно представлять
важные этапы, через которые будет проходить реализация.
СредаНастраивать
В большинстве случаев разработчики будут разрабатывать новый веб-сайт на
своих локальных рабочих станциях. Они отправят свой код в центральный
репозиторий, который представляет собой платформу управления исходным
кодом (SCM), такую как Git, Subversion или Team Foundation Server. Несколько
разработчиков могут отправлять новый код, который затем объединяется и
развертывается на сервере интеграции для проверки и тестирования.
Разработчики продолжают цикл разработки новых функций, отправки
собственного кода в SCM и загрузки кода, предоставленного другими, для
обновления своих локальных рабочих станций. Каждый разработчик
поддерживает полнофункциональную версию CMS и разрабатываемый веб-
сайт на своей локальной рабочей станции.
Процесс развертывания этого кода на серверах обычно называется «сборкой».
Обычно это достигается с помощью инструментов, называемых «серверами
сборки». Сервер сборки — это программное обеспечение, работающее на
сервере интеграции, которое отслеживает репозиторий SCM. Он обнаруживает
новый код
6 Тайсон сказал это, но это не было записано. Сведения о том, сказал ли он «в лицо», «в нос» или «в
рот», расходятся. Учитывая, насколько сильно бил Железный Майк, я сомневаюсь, что это различие
действительно необходимо.
268 | Глава 12: Реализация CMS
отправляет и запускает процесс, который проверяет код и выполняет задачи,
необходимые для его запуска на сервере — компиляцию кода, удаление
исходных файлов, копирование кода в каталог веб-сервера, внедрение файлов
лицензий и т. д.7 Jenkins и Cruise Control — два популярных сервера сборки с
открытым исходным кодом.
Помимо сервера интеграции часто используется «тестовый» сервер для
обеспечения более стабильной среды. Хотя веб-сайт создается на сервере
интеграции, новый код (часто отправляемый разработчиками, иногда
несколько раз в час) развертывается на тестовом сервере реже, чтобы
поддерживать полустабильную среду для тестирования. Тестовый сервер
обычно имеет собственный сервер сборки, но он либо активируется вручную,
либо подключается к другой ветке репозитория SCM, где код объединяется
реже.8
7 Эти инструменты также известны как серверы «непрерывной интеграции». Идея состоит в том, что
новый код должен постоянно интегрироваться в единое целое, чтобы проблемы можно было
обнаружить на ранней стадии, вместо того, чтобы выполнять редкие сборки всего решения, которые
не выявляют проблемы до поздней стадии процесса. Отправка кода, который не работает и
препятствует успешному развертыванию решения, называется «нарушением сборки». Обычно это
является источником остракизма и открытых насмешек среди коллег разработчика.
8 Обратите внимание, что веб-сайты тестирования и интеграции могут находиться на одном
сервере, поэтому их правильнее называть экземплярами тестирования и интеграции.
9 Известно, что менеджеры проектов с гордостью сообщают руководству, что они «завершили
установку CMS!» при этом не упоминая, что эта впечатляющая веха могла занять три минуты.
Процесс реализации |2 6 9
базу данных, или все разработчики общаются с центральной базой данных? А с
какими базами данных работают серверы интеграции и тестирования — со
своей или с центральной версией?
Если у каждого разработчика есть копия базы данных, он может работать, зная,
что его изменения не повлияют на других разработчиков. Однако наличие
нескольких копий базы данных означает, что все работают с разными копиями
контента, а изменения кода, требующие сопутствующих изменений данных,
могут потребовать репликации этих изменений в нескольких версиях базы
данных. Может быть развернут код, который нарушит работу установок других
разработчиков, поскольку соответствующие изменения данных не были
внесены в их копии базы данных.
Эту задачу можно значительно облегчить с помощью CMS, которая хранит
конфигурацию и управляет ею в виде кода. В некоторых системах создание
нового типа контента осуществляется путем написания кода: в Plone новый тип
контента определяется как новый файл Python; в Episerver новый тип контента
— это новый файл класса C#. В этих системах развертывание кода и настройка
представляют собой один и тот же процесс. Действия разработчика,
развертывающего код, также развертывают изменения конфигурации,
необходимые для работы этого кода.
В других системах новые типы контента могут быть созданы путем перехода
через административный интерфейс CMS. Эти изменения типа сохраняются в
базе данных, к которой подключена эта копия CMS. Если разработчик создает
новый тип контента на своей локальной рабочей станции, теперь у него есть
определение этого типа контента, локальное для его базы данных. Ему нужно
либо заново создать тип на сервере интеграции (а затем на тестовом сервере, а
затем на рабочем сервере…), либо использовать какой-то внешний инструмент
для перемещения этих данных из своей базы данных в другую.
Наконец, как разработчики учитывают контент, постоянно создаваемый
редакцией? Если редакторы обнаруживают ошибку в новом контенте или
разработчику необходимо внести изменения, требующие новейшего контента,
как разработчик обновит свою локальную базу данных до уровня рабочей
версии?
Процесс «согласования» изменений контента — проклятие разработчиков
CMS. В то время как некоторые системы разработали значительные технологии
для переноса изменений контента между средами, в других системах просто
есть сообщество разработчиков, которое привыкло перемещать контент
вручную. У других CMS есть внешние поставщики, которые специализируются
на инструментах, специально предназначенных для решения проблем
согласования.
Разработчики обычно работают с локальной базой данных, которая постепенно
становится все более и более устаревшей, пока они не почувствуют, что она
достаточно «устарела», и им необходимо обновить ее из производственных или
тестовых данных, часто с помощью резервного копирования и восстановления
вручную.10
10 И это не говоря уже обо всех файлах контента, созданных и управляемых в рабочей среде, хотя, к
счастью, их реже приходится «возвращать назад» в разработку.
Процесс реализации |2 7 1
расширенные параметры скрыты от пользователей, которые не поймут их
или не должны иметь к ним доступа?
Определение разрешений
Это требует, по крайней мере, минимальной доработки пользовательской
модели, чтобы группам можно было предоставлять различный доступ к
контенту. В частности, вам нужно быть осторожным с разрешением на
удаление, поскольку многие объекты контента будут «несущими стенами»
структуры контента, и если они будут удалены, то весь сайт может
перестать работать.
Помимо фактического контента, на этом этапе, возможно, придется создать
другие структуры для поддержки различных агрегатов, в том числе:
Шаблонизация
К этому моменту среда настроена, установлена CMS, создана модель контента
и доступен готовый контент.
Наконец, пришло время шаблонов. Это момент, которого вы ждали, когда вы
действительно сможете создать несколько презентаций контента, для
управления которым вы внедряете эту систему.
Шаблонизация существует в двух формах:
Шаблонизация объектов
Внутри окружения находится вывод, созданный для конкретного объекта
контента. Обычно это гораздо проще, чем окружение, поскольку шаблон знает,
какой объект он отображает, и может принимать конкретные решения,
основываясь на безопасных предположениях о том, какие данные доступны.
Шаблон объекта не обязательно должен работать для всего контента, а только
для одного типа контента.
Кроме того, шаблон оперативного объекта на самом деле не имеет никакой
зависимости от шаблона объемного звучания. Хотя окружение во многом
зависит от объекта, обратное обычно неверно. Объект часто не может
выполняться, не зная и не заботясь о том, в какое окружение он в конечном
итоге будет обернут.
Некоторые шаблоны объектов контента представляют собой не более чем одну
или две строки, возможно, для простого вывода заголовка и тела простой
текстовой страницы контента.
Один объект контента может иметь несколько шаблонов для одного и того же
канала, в зависимости от критериев. В большинстве реализаций между типом и
шаблоном существует связь «один к одному», но в некоторых случаях шаблон
может различаться в зависимости от местоположения или содержимого или от
некоторой конкретной комбинации значений свойств внутри самого
содержимого. (Однако, если несколько типов контента имеют несколько
шаблонов, которые значительно различаются, можно подумать о создании
разных типов вообще.)
Создание шаблонов (как окружения, так и объектов) иногда может занимать
большую часть времени разработки реализации. В некоторых командах один
разработчик может нести ответственность за написание кода внешнего
интерфейса (HTML/CSS), тогда как в других ситуациях целая команда может
нести ответственность конкретно за этот код и либо предоставлять его
разработчикам внутреннего интерфейса, либо создавать шаблоны. сами себя. В
последнем случае бэкэнд-разработчик может «набросать» шаблоны, а затем
предоставить доступ внешним разработчикам для завершения кода.
Когда создание шаблонов будет завершено, сайт станет доступен для
навигации, все объекты будут опубликованы правильно, и он будет выглядеть
практически завершенным.
11 Примечательно, что одними из самых оживленных споров в проекте разработки могут быть
философские разногласия по поводу места кода. Возможно, не существует никаких споров о
экзистенциальной достоверности конкретного блока кода или о том, как он работает, но у двух
разработчиков могут возникнуть почти жестокие разногласия по поводу того, какое место в кодовой
базе является «правильным» местом для размещения этого кода.
Процесс реализации |2 7 7
• Где хранятся внешние данные?
• Насколько он изменчив? Как часто оно меняется?
• Нужно ли его переносить в CMS или можно получить доступ к нему там, где он есть?
• Если его необходимо переместить в CMS для доступа, каким должно быть
расписание? Насколько «устаревшим» можно позволить ему стать перед
обновлением?
• Соответствует ли каждая запись во внешнем источнике полному объекту
контента или мы просто добавляем контент к существующему объекту?
• Какова задержка доступа? Как быстро его можно получить?
• Насколько стабильно соединение между CMS и источником данных?
• Нужно ли будет когда-нибудь его модифицировать в среде CMS и отправлять обратно?
• Каковы проблемы безопасности? Может ли кто-нибудь иметь к нему доступ?
• Должны ли отдельные записи иметь URL-адрес или данные предназначены
только для просмотра в совокупности?
Как и почти любой другой тип приложений, CMS больше склоняются к облаку,
чем к локальному хостингу. Финансовые учреждения и сектор
здравоохранения продержались дольше остальных из-за проблем
конфиденциальности (или восприятия таковой), но даже эти организации
постепенно отказываются от локальных установок.
Хостинг, предоставляемый поставщиками, становится все более
распространенным, поскольку поставщики CMS стремятся перейти от
продуктовых компаний к сервисным компаниям. Многие объединяют плату за
хостинг и лицензию в рамках модели, подобной SaaS. Некоторые поставщики
продают локальные лицензии только по запросу — новые продажи считаются
продажами в облаке.
Хостинг средадизайн
Простота настройки виртуальных серверов и резервных облачных архитектур
полностью изменила способы запуска и управления хостингом. Раньше
настройка серверов была трудоемким и капиталоемким процессом.13 Запуск
серверов и установка CMS стали важной вехой. Теперь это может происходить
между встречами.
Полное обсуждение хостинга приложений выходит за рамки этой книги, и, к
счастью, оно не сильно отличается от хостинга других типов приложений. При
обсуждении хостинга основные моменты, которые следует учитывать и
обсуждать с вашей инфраструктурной командой, включают:
Отказоустойчивость и резервирование
Насколько избыточна среда и насколько она защищена от сбоев
архитектуры? Идеальное, бесшовное резервирование, безусловно, является
идеальной ситуацией, но оно редко реализуется в полной мере и часто
обходится дорого.
13 Я до сих пор помню, как часами устанавливал и настраивал Ektron CMS400.NET с наспех
записанного установочного компакт-диска (сервер изначально не имел доступа к сети), стоя перед
физическим сервером в стойке в каком-то замерзшем дата-центре еще в начале 2000-х. Мы прошли
долгий путь.
Процесс реализации |2 7 9
Аварийное переключение и аварийное восстановление
Если что-то пойдет не так, каков процесс восстановления? Будете ли вы
выполнять восстановление из резервной копии в новой среде или будете
поддерживать вторую среду с версией вашего контента, которую можно
будет удалить?
Производительность
Какой трафик может выдержать сайт? Как проходит нагрузочное
тестирование? Насколько быстро он может масштабироваться при
увеличении нагрузки? Можно ли запланировать масштабирование в
ожидании увеличения нагрузки? (Например, можете ли вы запланировать
временное или «пакетное» масштабирование среды на 72 часа в ожидании
увеличения трафика после выпуска основного продукта?)
Безопасность и доступ
Кто имеет доступ к серверу? Как новый код развертывается на веб-сайте?
Кто может одобрить такое развертывание?
Независимо от модели и технических характеристик среды, среда должна быть
доступна задолго до запуска, чтобы ее можно было протестировать под
нагрузкой, иметь установленные и протестированные процедуры резервного
копирования и переключения при сбое, а также иметь достаточное количество
тестовых развертываний, чтобы гарантировать, что процесс свободен от
ошибка. Чего вы явно не хотите, так это того, чтобы среда была доступна в
ночь перед запуском.
Как только рабочая среда станет доступной, убедитесь, что развертывание кода
было выполнено полностью, а команда разработчиков проверила
работоспособность сайта в этой среде. Многие планы запуска были отменены в
последнюю минуту из-за непредвиденных проблем, вызванных первым
развертыванием производства.
Обучение и ПоддерживатьПланирование
Редакторам и администраторам необходимо будет пройти обучение работе с
новой CMS. Существуют два различных типа обучения:
Обучение CMS
Это общее обучение работе с CMS по умолчанию, что означает обучение
работе с Concrete5, Sitecore, BrightSpot или любой другой системой, в
которой был реализован ваш веб-сайт. Обычно это предоставляется
поставщиком.
Обучение внедрению
Это обучение на вашем конкретном веб-сайте, что означает понимание
того, как общая CMS соответствует вашим требованиям, а также
понимание концепций и структур, которые могут существовать на вашем
веб-сайте и ни на каком другом. Это может обеспечить только инструктор,
знакомый с реализацией, поскольку поставщик не имеет ни знаний, ни
понимания того, как был реализован его продукт.
280 | Глава 12: Реализация CMS
И то, и другое ценно, хотя последнее более важно для большинства редакторов.
Понимание того, как работает базовая CMS, не лишено достоинств, но
редакторам в первую очередь необходимо понимать, как были реализованы
функции их конкретного сайта. Соответствующие аспекты базовой
архитектуры могут быть включены в это обучение по мере необходимости, но
обычно в организации есть несколько избранных «чемпионов по продукту»,
которые знают базовую систему вдоль и поперек, а также для остальной части
редактирования. команде просто иметь конкретные знания о работе в пределах
своей профессиональной юрисдикции.
Помимо первоначального обучения, следует составить план обучения будущих
редакторов. В более крупных и распределенных организациях (например, в
университетах) каждый месяц можно нанимать новых сотрудников, которым
потребуется обучение тому, как добавлять и редактировать контент в CMS.
В дополнение к официальным часам обучения необходимо рассмотреть
возможность специального процесса обучения и поддержки. Что происходит,
когда у редактора возникает проблема или ему нужна более глубокая помощь
по созданию контента? Кто может провести редакторов по системе в
кратчайшие сроки? И как CMS впишется в существующую инфраструктуру
ИТ-поддержки организации? Знает ли служба ИТ-поддержки о новой CMS?
Знают ли они, как этим пользоваться? Как проблемы обостряются?
К сожалению, обучению редко уделяется много внимания, и многие
организации делают как можно меньше в надежде, что все «просто получится».
Помните, что обучение — это прямая основа для внедрения пользователями.
Когда пользователи понимают систему и чувствуют себя комфортно с ней, они
с большей вероятностью примут ее и будут использовать в полной мере. Не
один проект провалился из-за прохладной реакции пользователей, возникшей
из-за отсутствия понимания и обучения.14
Процесс реализации |2 8 1
Окончательные функции могут все еще находиться в стадии разработки вплоть
до запуска, хотя многие функции часто выбрасываются за борт в безумной
схватке за запуск. Многие из них откладываются до повсеместного проекта
«Фаза 1.1», который неизменно планируется сразу после первоначального
запуска (о том, произойдет ли это на самом деле или нет, можно горячо
спорить).
Запуск может оказаться сложным делом в зависимости от того, заменяет ли
новый сайт существующий сайт в существующей среде хостинга или
развертывается в новой среде. Последнее всегда предпочтительнее, поскольку
тогда запуск — это просто вопрос изменения места разрешения доменного
имени (DNS), а не необходимость отключать сайт, выполнять установку и
регрессионное тестирование, а затем освобождать его. Учитывая простоту
настройки новых виртуализированных сред, обычно более эффективно
развернуть сайт в новой параллельной среде, запустить его через изменение
DNS, а затем просто заархивировать старую среду.
Если вы зависите от изменения DNS, возможно, придется временно отключить
пользовательский контент. Во время распространения DNS — процесса,
который варьируется от мгновенного до длительного (до 24 часов), в
зависимости от пользователя — некоторые пользователи будут
взаимодействовать с новым сайтом, а некоторые — со старым. Хотя редакторы
должны создавать контент исключительно на новом сайте, невозможно
гарантировать то же самое для пользователей. В некоторых случаях у
пользователя может возникнуть задержка DNS, он оставит комментарий на
старом сайте, а затем произойдет изменение DNS, в результате чего
пользователь просматривает новый сайт и задается вопросом, почему этот
комментарий отсутствует.
Заранее планируйте и репетируйте запуск сайта. Нет ничего более неприятного,
чем когда все готово к запуску, и обнаружить, что единственный человек,
способный изменить запись DNS, ушел в отпуск. Пройдитесь по запуску
заранее, при необходимости составив поминутный график.
Избегание РазработкаЦентризм
Если есть что-то, что должна была продемонстрировать эта глава, так это то,
что фактическая разработка веб-сайта часто составляет меньшую часть всей
работы. Тем не менее, в проектах CMS по-прежнему очень распространен
подход, ориентированный на разработку, как будто все, что вам нужно сделать,
это создать сайт, а все остальное получится.
Подумайте о строительстве нового дома. На ум приходит образ плотника,
сковывающего пиломатериалы. Однако давайте посмотрим на более широкую
картину. Давайте сделаем шаг назад и учтем все, что происходит в этом
процессе, от начала до конца.
Нашим гипотетическим домовладельцам необходимо:
Наконец дом готов. Но работы нет. Теперь нашим домовладельцам еще предстоит:
Предупреждение: НеясностьПредстоящий
Разговор о миграции контента может быть крайне
расплывчатым, поскольку мы обсуждаем гипотетически
существующую CMS, наполненную гипотетическим
контентом, которая переходит к новой гипотетической модели
контента в новой гипотетической CMS. Обсуждать эти вещи в
определенных терминах практически невозможно, поэтому
будьте готовы рассмотреть эту тему теоретически, понимая,
что специфика вашей ситуации всегда будет отличаться.
The РедакционныйИспытание
Хотя, казалось бы, главной задачей миграции является перемещение байтов на
диске из одной системы в другую, первая задача миграции на самом деле носит
редакционный характер: какой контент мигрирует и как он изменится?
Для некоторых проектов (например, внедрения вилочных погрузчиков,
обсуждаемых вГлава 12), ответы: (1) весь контент и (2) он вообще не
изменится. Однако для многих других миграция предоставляет ценную
возможность навести порядок, удалить нежелательный контент и изменить
существующий контент, чтобы более эффективно служить целям организации.
The МиграцияПроцесс
В идеальном мире вы могли бы просто открыть административную консоль в
своей новой CMS и нажать кнопку с надписью «Импортировать контент из
[вставьте сюда существующую CMS]». Такая ситуация действительно
существует в той или иной форме для широко известных и
конкурентоспособных платформ с открытым исходным кодом, таких как
Drupal и WordPress, но недоступна для других.
Перенос контента между двумя системами обычно является индивидуальной
задачей. Просто нет стандартизации между системами и еще меньше
стандартизации между методологиями построения моделей контента. Даже
контент, поступающий из разных установок одной и той же CMS и
попадающий в него, может потребовать значительных изменений, в
зависимости от того, как контент в каждой установке был смоделирован и
агрегирован. Модель контента в одной установке редко просто сопоставляется
с моделью контента в другой установке.
288 | Глава 13: Миграция контента
Успешный перенос контента — это слабо структурированный процесс,
состоящий из следующих этапов:
Добыча
К контенту вашей текущей CMS необходимо будет получить доступ и
перенести его в нейтральный формат, из которого его можно будет
преобразовать и импортировать. Контент необходимо извлекать на двух
уровнях: (1) отдельные объекты контента, которые разбиты на (2) отдельные
атрибуты контента.
Итак, вам нужно извлечь все ваши статьи, а также разбить их по атрибутам.
Пока эти два критерия соблюдаются, фактический целевой формат не имеет
значения. XML распространен, как и JSON. Даже вставка содержимого в
простую базу данных может работать нормально. Он просто должен быть в
формате, свободном от презентационных данных (например, дополнительного
HTML-кода, вставленного из шаблона рендеринга), легко манипулируемом и
доступном. Я даже видел, как извлеченный контент просто сохранялся в новой
CMS, чтобы его можно было переместить и уточнить позже.
В идеальном мире ваша существующая CMS имеет функцию экспорта, которая
может предоставить вам весь ваш контент в формате без представления. К
сожалению, встроенный экспорт часто не поддерживается или в результате
получается формат, непригодный для будущих этапов процесса миграции.
Попытка работать с предопределенным форматом экспорта со временем может
обнаружить, что было бы проще написать собственный процесс экспорта.
Без удобной функции экспорта есть два других способа извлечения контента:
4 Кто-то может сказать, что несвязанная система устроена именно таким образом и что сам процесс
публикации на самом деле является формой экспорта.
5 Не говоря уже о предыдущих версиях контента, хотя я еще не видел миграции контента, которая бы
переносила какую-либо версию, кроме текущей, опубликованной версии. Перенос всей истории
версий каждого объекта контента был бы чрезвычайно амбициозной задачей. Многие системы даже
не имеют возможности явно воссоздавать старые версии из API (по замыслу), поэтому контент
придется сначала импортировать как самую старую известную версию, а затем последовательно
перезаписывать более новыми версиями, надеясь при этом, что все ссылки на реляционный контент,
используемые для конкретной версии, также будут доступны во время импорта объекта. Достаточно
сказать, что большинство организаций довольствуются простым сохранением где-нибудь старой
CMS на случай, если им придется обратиться к более старым версиям контента.
Трансформация
Извлеченный контент редко бывает в форме, подходящей для вашей новой
CMS. Велика вероятность, что он содержит дополнительные HTML-теги или
структуру, не подходящую для вашей новой системы и стандартов реализации.
Например, контент, созданный много лет назад, может содержать устаревшие
HTML-теги, такие как FONT и даже BLINK.6 Чаще всего информация о стиле,
которая была действительна в вашей старой реализации, просто меняется.
Новая реализация может иметь новые классы CSS, новые методы указания
заголовков контента, новые методы выравнивания изображений и т. д.
Содержимое HTML необходимо будет изменить, чтобы отразить эти новые
стандарты. Обычно вы извлекаете контент, содержащий большие блоки HTML,
и вы не можете рассматривать этот HTML как непроницаемую единицу. Вам
часто придется «добраться» до этого HTML-кода и каким-либо образом
изменить его.
Сборка
При обсуждении моделирования контента вГлава 6мы различаем дискретное
моделирование и реляционное моделирование. Первый описывал информацию
о контенте, которая ограничивается самим объектом контента. Последнее
касается того, как этот контент вписывается («относится») к другому контенту.
292 | Глава 13: Миграция контента
После того как вы извлекли сотни или тысячи объектов контента из
существующей CMS, эти объекты необходимо будет собрать и организовать,
чтобы правильно отразить их отношения в новой системе. Необходимо
перенести не только контент, но и отношения между контентом.
В частности, необходимо переносить деревья контента, а это означает, что
контент необходимо извлекать таким образом, чтобы отношения
родитель/потомок оставались неповрежденными или могли быть
реконструированы. В некоторых случаях это может означать экспорт
родительского идентификатора с каждым объектом контента. Если вы
выполняете очистку экрана, это может означать вывод родительского
идентификатора в МЕТА-теге или даже попытку реконструировать иерархию
на основе путей URL (при условии, что они правильно отражают древовидную
структуру).7
Изменение географии
Переход от древовидной системы к древовидной системе
интуитивно понятен, но при попытке переключить географию
возникает больше проблем. Если ваша старая система основана
на дереве контента, а новая CMS — на структуре папок, как вы
с этим справитесь? В старой системе контент имеет
родительский элемент, но в новой системе родительским
элементом является папка.
Здесь нет универсального ответа. Необходимо принимать
трудные решенияо том, как адаптировать контент к
фундаментальным географическим изменениям.
Процесс миграции |2 9 3
Заглушка контента
В некоторых ситуациях сборка контента становится критической проблемой.
Новая система может потребовать точной географии, но контент старой
системы не содержит извлекаемой структуры, которую можно было бы
использовать повторно.
В этих случаях может быть правильным вариант «заглушить» контент в новой
системе. Используя этот метод, вы вручную создаете пустые объекты контента
в новой системе, организованные в правильную реляционную структуру, но
каждый из которых не содержит ничего, кроме ссылки на соответствующий
объект в существующей системе (и, возможно, заголовка, чтобы их можно
было легко идентифицировать).
Используя этот метод, редакторы создают «оболочку» новой географии
контента, не вводя при этом ничего, кроме существующих идентификаторов
контента. Когда эта структура завершена, ссылки на существующие элементы
контента используются для автоматического извлечения контента из
существующей CMS и заполнения соответствующих объектов в новой CMS.
Здесь работает более широкий принцип: ссылки на контент могут быть
структурированы в новой системе для представления новой реляционной
географии контента без какого-либо фактического дискретного контента. Вы
выделяете географические связи контента в виде заполнителей, которые можно
Импортировать
До этого момента мы получали контент только из старой системы. После того
как контент извлечен, преобразован и снова собран в работоспособную
структуру, его фактически необходимо перенести в новую CMS. Обычно эта
задача требует специального программирования.
Единственным исключением может быть случай, когда ваша новая система
имеет функцию импорта и имеет известный документированный формат, в
котором вы можете упорядочить экспортированный контент. Это редкость.
В большинстве систем разработчик пишет собственное задание для загрузки
нового контента в систему. Это может быть либо отдельная программа, которая
использует веб-службу или аналогичный API для «проталкивания» контента,
либо код, который работает внутри новой системы и «извлекает» контент.
Во многих случаях разработчику придется не просто импортировать контент,
но и создавать другие структуры данных для поддержки дополнительных
географических регионов, например теги, категории или меню.
Например, если ваши объекты контента назначены категориям в старой
системе, то эти категории необходимо будет создать в новой системе перед
миграцией.
Разрешение
Объекты контента имеют связи между собой. Они могут существовать в
географическом пространстве, которое было воссоздано на этапе повторной
сборки, обсуждавшемся ранее, но они также могут иметь явные ссылки —
например, свойство Author объекта Article может ссылаться на другой объект
контента. Кроме того, внутри форматированного текста может быть множество
HTML-ссылок.
Эти ссылки, скорее всего, оборвутся во время извлечения и импорта. Если
HTML-ссылка глубоко внутри форматированного текста объекта контента X
ссылается на объект контента Y, вам необходимо убедиться, что ссылка по-
прежнему действительна после того, как X и Y переместятся в свою новую
систему. При переносе контента структура URL-адресов контента часто
меняется. Эти внутренние ссылки необходимо найти и исправить, чтобы они
представляли новую структуру URL.
Для этого вы всегда должны хранить старый идентификатор вместе с новым
объектом контента. Импортированный объект контента должен знать, откуда
он взялся, то есть ему необходимо знать идентификатор или URL-адрес.8
соответствующего объекта контента в старой CMS. Довольно распространено
создание временных свойств для типов контента в новой CMS для хранения
этих значений во время разработки и миграции, а затем удаление этих полей и
их значений после успешного запуска, когда они больше не нужны.
Возможность обнаружения связей между объектами контента во многом
зависит от API существующей системы. Можно ли при обработке статьи
просто экспортировать идентификатор автора? Или ваша существующая CMS
хранит это как общедоступный URL-адрес автора? Или
8 Это, давайте посмотрим правде в глаза, просто еще одна форма удостоверения личности.
Процесс миграции |2 9 5
API системы предоставляет вам весь объект контента «Автор» при ссылке на
это свойство?
Для ссылочных атрибутов попытайтесь экспортировать идентификатор, если
это вообще возможно. Если ваша статья ссылается на автора, укажите
идентификатор этого объекта «Автор» в качестве значения атрибута. Вы бы
предпочли знать, что «Автором» является объект контента № 634, чем «Боб
Джонс». В последнем случае вам придется искать авторов по имени «Боб
Джонс» и надеяться, что найдется только один из них.
Процесс повторного подключения или «разрешения» всех этих ссылок
происходит в конце задания импорта. Контент импортируется с
неработающими ссылками, а затем, как только весь контент оказывается в
новой системе, эти ссылки разрешаются и указывают на правильные объекты.
Это невозможно сделать, поскольку контент импортируется, поскольку нет
никакой гарантии, что целевой объект уже находится в системе — например,
статья может быть импортирована до того, как будет импортирован ее автор.
В некоторых случаях вам, возможно, придется скорректировать модель
контента, чтобы разрешить более слабые ссылки во время импорта. Например,
если свойство Author вашего типа контента «Статья» должно быть
обязательным, вам, возможно, придется ослабить это значение во время
импорта, чтобы разрешить импорт статей без имени автора, а затем определить
автора позже в процессе. Как только весь контент будет добавлен, ссылки
можно будет разрешить и снова включить необходимые ограничения.
Чтобы разрешить HTML-ссылки, вам обычно придется анализировать HTML,
что означает поиск компетентной библиотеки синтаксического анализа, такой
как AngleSharp для .NET или Beautiful Soup для Python. Необходимо
обработать весь HTML-код с поиском всех тегов привязки или мультимедиа,
которые затем необходимо проверить, чтобы определить, ссылаются ли они на
внешние веб-сайты или внутренние объекты контента. Для привязок,
ссылающихся на другие импортированные объекты, эти объекты необходимо
найти на основе ссылки и изменить цель ссылки, чтобы отразить новый URL-
адрес (или альтернативный метод связывания). URL-адрес должен быть
вставлен в правильный формат репозитория для новой CMS, который может
быть не общедоступным URL-адресом, а скорее URL-адресом-заполнителем,
предназначенным для разрешения во время запроса.
Обычно разрешение ссылок на контент не происходит сразу. Обычно перед
тем, как весь контент будет успешно импортирован и можно будет начать
разрешение ссылок, выполняется несколько заданий импорта.
296 | Глава 13: Миграция контента
"Давайте Только Держать тот URL-адреса тотТакой же!"
Это отлично подходит для SEO, но может не помочь вашему
процессу импорта. Во многих системах встроенные URL-
адреса фактически хранятся как идентификаторы целевого
контента. Итак, URL-адрес внутри репозитория может
выглядеть так:
<a href="CMSLINK:634">
Во время рендерингаCMSLINK:634обнаруживается и заменяется
фактическим URL-адресом объекта контента № 634 в этот
момент. Маловероятно, что обе CMS поддерживают один и тот
же формат и последовательность идентификаторов, и обычно
вы не можете указать новый идентификатор при создании
нового контента. Это означает, что сохранение неизменных
URL-адресов, скорее всего, вам не поможет, поскольку
идентификатор целевого объекта контента («634» в примере)
почти наверняка изменится при импорте.9
контроль качества
Как только контент окажется в новой CMS и ссылки будут разрешены, можно
приступить к контролю качества миграции. Контроль качества миграции
предназначен для проверки того, что контент был успешно перенесен в новую
систему.
Он имеет два уровня:
Функциональныйконтроль качества
Это может выполнить человек, не обладающий знаниями в предметной
области, что означает отсутствие знаний о том, что на самом деле означает
контент. Все, что проверяет этот тестер, — это то, является ли контент в
целом неповрежденным — все ли свойства контента заполнены, все ссылки
работают, все изображения не работают и т. д. Этому человеку не нужно
понимать сам контент.
Контроль качества домена
Это должен выполнять человек, обладающий знаниями в предметной
области, что означает понимание предмета контента. Этот тестер
проверяет, находится ли контент в правильном месте в навигации,
правильно ли он классифицирован, правильно ли он отвечает на поисковые
запросы и т. д. Этот человек должен иметь квалификацию, чтобы
принимать редакционные решения относительно контента.
В идеале должен быть конкретный контрольный список контента для проверки
и четко структурированный метод записи проблем. Если тестировщик
обнаруживает проблему с контентом, где сохраняется эта информация? Во
многих случаях полезно добавить свойства временного контента.
9 В некоторых случаях CMS будет использовать в качестве идентификатора 32-битный GUID. В этих
системах иногда возможно явное указание идентификатора при создании контента. Если обе CMS
имеют этот формат, теоретически возможно сохранить одни и те же идентификаторы во время
миграции. Однако очевидно, что это случается редко, и даже в этом случае фактический текст
ссылки (который обнаруживается и заменяется) будет другим.
Процесс миграции |2 9 7
например флажок для Migration QA Complete или текстовое поле для записи
дефектов миграции непосредственно в самом объекте контента.
Альтернативно, система управления заявками или проблемами, используемая
для функционального контроля качества, может использоваться для устранения
дефектов миграции.
При обнаружении дефекта его необходимо оценить на предмет объема.
Дефекты могут быть одного из двух типов:
Импортные дефекты
Это дефекты, которые необходимо исправлять на уровне импорта, а это
значит, что они, скорее всего, широко распространены. Зачастую
небольшие дефекты являются предвестниками более серьезной проблемы.
Обнаружение одной или двух статей, у которых не заполнено свойство
Author, может обнаружить, что большая часть объектов Author была
случайно пропущена во время миграции, и единственным решением
является повторный запуск импорта и начало заново. Дефекты импорта
могут быть очень разрушительными, и всей команде миграции, возможно,
придется остановиться в середине работы, пока импорт будет исправлен и
повторен.
Дефекты объекта
Это дефекты, характерные для конкретного объекта контента. Это не
результат импорта, а проблемы, которые либо присутствовали на старом
сайте и были перенесены, либо возникли в результате чего-то, возникшего
в результате взаимодействия с новой CMS — например, отсутствующего
стиля или библиотеки JavaScript. Для них не обязательно заново выполнять
весь импорт, но их необходимо пометить для ручной коррекции после того,
как импорт будет выполнен в последний раз.
Эффективность является ключевым фактором в таких ситуациях. Наличие
нового веб-сайта на одном экране и старого веб-сайта на другом экране может
облегчить процесс сравнения версий контента. Если старый URL-адрес
сохраняется вместе с новым объектом контента, старая страница может даже
отображаться под новой страницей во временном IFRAME, поэтому
тестировщики могут просматривать оба объекта одновременно.
Автоматизированный контроль качества может быть полезен во время
тестирования миграции. Наличие средства проверки ссылок, запускаемого раз
в день и предоставляющего отчет о неработающих ссылках, может повысить
способность тестировщиков находить проблемы.
Миграция СкриптРазработка
Процесс автоматической миграции имеет тенденцию быть итеративным, этапы
которого выполняются циклично. По сути, это процесс выполнения какого-
либо действия, анализа результата, изменения процесса, а затем его
повторения.
Цель состоит в том, чтобы разработать сценарий миграции, который
экспортирует контент, правильно его преобразует, импортирует и разрешает
все ссылки за одно непрерывное выполнение, которое может занять минуты
или часы. Тогда этот скрипт можно будет выполнить непосредственно перед
запуском. Всю предыдущую работу в ходе цикла миграции можно
рассматривать как «пробный прогон», чтобы фактическую миграцию можно
было провести ближе к запуску.
ОбручениеМодели
Существует несколько форм работы с интегратором, основанных на
распределении работ:
Интегратор разрабатывает
В этом случае вы просто выписываете чек и получаете взамен сайт. В
некоторых случаях вы можете даже заключить контракт с интегратором на
хостинг и поддержку, что означает, что вы никогда не сможете фактически
получить реализацию.
Интегратор и организация совместно разрабатывают
В этой ситуации вы и интегратор разрабатываете веб-сайт вместе, разделив
работу по какому-то согласованному методу.
Организация развивается, интегратор консультирует
В ситуациях, когда вы хотите выполнить большую часть работы
самостоятельно, вы все равно можете обратиться к интегратору за
экспертной консультацией. Во время плановых или специальных
совещаний интегратор может просмотреть текущую работу, обсудить
предстоящие проблемы и дать рекомендации по решению конкретных
ситуаций или проблем.
Организация развивается
Технически в этой ситуации интегратора нет, хотя иногда программное
обеспечение будет продаваться через другую сторону. Либо вы купите у
поставщика, либо программное обеспечение будет перепродано через
интегратора.
В крайних случаях диапазон является односторонним — только интегратор на
одном конце и исключительно ваша организация на другом — с различными
оттенками серого между ними.
Из двух средних вариантов модель совместного развития является наиболее
сложной с точки зрения логистики. Совместная работа над одной и той же
кодовой базой часто может быть затруднена, особенно между командами,
разбросанными по двум не связанным друг с другом организациям. Как ты
Артефакты до реализации
Ключевым фактором в попытке получить объем от исполнителя является то,
что вы привносите в отношения. Интегратору нужно с чего-то начинать. Что
вы им предоставляете для управления процессом анализа?
Рассмотрим эти отправные точки:
Затраты | 313
Можно сказать, что разработчика мало волнует, существует ли 100 объектов
или 100 000 — уровень усилий, необходимых для создания типов, агрегатов и
инструментов редактирования, в основном один и тот же.
Это та же самая причина, по которой «разовый» дизайн страницы может
привести к завышению стоимости реализации. Известно, что UX-фирмы сходят
с ума, предлагая детальный индивидуальный дизайн для десятков и десятков
страниц, каждая из которых привносит особенности управления контентом или
шаблонами, за которые интегратору придется учитывать. Помните, что
непоследовательность — это проклятие шаблонов, и каждый уникальный
дизайн страницы имеет свою цену.
Даже динамическая композиция страниц имеет ограничения, поскольку эти
системы работают с палитрой доступных элементов интерфейса. Каждый из
этих элементов должен быть идентифицирован вместе со всеми его
вариантами, а затем разработан, шаблонизирован и управляем таким образом,
чтобы страница сочеталась друг с другом так, как задумал дизайнер.
Наконец, при составлении бюджета на неизвестные вещи уходит слишком
много времени и средств. Внешняя интеграция, вероятно, является лучшим
примером. Когда вашей CMS приходится работать с Other System X, если
только команда внедрения не работала с обеими, из-за этого пострадают
график и бюджет. Заставить две системы работать вместе может быть сложно,
а иногда и невозможно. Усилия, необходимые для даже, казалось бы, простой
интеграции, иногда могут превзойти затраты на остальную часть проекта.
Письменные соглашения
В какой-то момент соглашение между вами и интегратором необходимо будет
кодифицировать и оформить посредством какого-либо письменного документа.
Этот документ якобы является юридическим соглашением для обеих сторон.
Номенклатура здесь является проблемой, поскольку не существует
общепринятого словаря для этой отрасли, особенно когда речь идет о
проектной документации. То, что одна фирма называет «предложением», для
другой может быть «заявлением о работе» или «меморандумом о
взаимопонимании».1
В целом документация делится на следующие типы. При работе с
интегратором вы часто будете видеть все три из них:
Маркетинговое предложение
Это привлекательный пакет продаж, предназначенный для того, чтобы
рассказать вам о возможностях фирмы. Это может вообще не относиться к
вашему проекту или даже к вашей организации, но вместо этого
продвигает возможности интегратора в общих чертах. Вы можете увидеть
этот пакет
Заявление о работе
Техническое задание является руководящим документом для любого
конкретного проекта. Если возникают разногласия по какому-либо аспекту
проекта, ТЗ обычно является арбитражным документом. Если чего-то нет в ТЗ,
значит, этого юридически не существует.
Письменные соглашения |3 1 5
Как минимум, в ТЗ необходимо объяснить:
2Обратите внимание, что соглашения о хостинге почти всегда отделены от соглашений об интеграции.
Модель участия в размещении веб-сайта в течение длительного времени в отличие от одноразовой
интеграции делает характер соглашений совершенно иным.
316 | Глава 14: Работа с внешними интеграторами
Консультации по вопросам невнедрения
Иногда вы можете обратиться к интегратору по причинам,
отличным от реализации. Они могут консультировать вас,
чтобы ответить на некоторые вопросы, или оценивать
неэффективную реализацию, или, возможно, помогать вам
оценить и спланировать некоторые новые функции.
Для этих соглашений лучше всего сосредоточиться на
результатах. Что предоставляет интегратор в обмен на оплату?
Документ? Установленное количество часов анализа? Серия
телефонных звонков? Какой-то прототип кода?
Если проект не предполагает конкретной реализации, он может
быть расплывчатым и неопределенным. Четкое определение
того, что предлагает интегратор, помогает всем сторонам
понять, к какой цели движется проект.
3Если интегратор может мгновенно приступить к огромному проекту, было бы неплохо спросить,
почему. Иногда у интегратора просто оказывается удобная дыра в графике. В других случаях они
могут быть перегружены персоналом или не иметь достаточного бизнеса для поддержания себя.
Письменные соглашения |3 1 7
Фиксированная плата
Вы получите сайт X за Y, и точка. Ожидайте этого в проектах, где вы четко
определили свои требования. Если ваши требования расплывчаты и носят
исследовательский характер, единственный способ получить
фиксированную плату — это значительные дополнения (или глупость со
стороны интегратора).
Время и материалы
Интегратор выполнит работу за X долларов в час или в день. Интегратор
должен предоставить вам оценку общего количества часов. Если они этого
не делают, то вы просто соглашаетесь платить определенную почасовую
ставку, неограниченную по времени.
Платеж-ограниченный
Вы потратите X долларов, а за эту сумму интегратор получит как можно
больше функциональности.
Очевидно, что первый вариант является наиболее жестким и, следовательно,
наиболее безопасным для обеих сторон. При этом варианте объем работ и
стоимость определяются в ТЗ. Однако из-за того, что это настолько жестко, это
приводит к двум другим явлениям, которые мы обсуждали ранее: тенденции к
увеличению затрат и необходимости чрезмерно определять объем работ, что
часто приводит к задержкам.
Два других варианта более гибкие. У проекта «время и материалы» определен
объем, но стоимость не ограничена. Интегратор просто будет продолжать
работать по часам, пока работа не будет завершена. Это может быть
рискованно для организации. Проект с ограниченной комиссией имеет жесткий
лимит расходов, но не предполагает ожиданий по предоставленной
функциональности. Теоретически интегратор может достичь предела, завершив
только 50% проекта.
В конечном итоге сделки заключаются в основном вокруг распределения
рисков. Обе стороны — организация и интегратор — стараются
минимизировать свой риск. Жесткие сделки являются рискованными для
интегратора, поэтому их часто компенсируют (что предполагает определенный
тип риска для организации — риск переплаты). С другой стороны, гибкие
соглашения опасны для организации, поскольку нет четкой корреляции между
функциональностью и расходами.
Вполне возможно использовать гибридный подход. Если 90% вашего проекта
просты, рассмотрите фиксированную плату за эту часть работы. 10%, которые
являются исследовательскими и рискованными, могут быть обработаны на
разных условиях — по времени и материалам или по ограничению гонорара.
Этот метод позволяет быстро начать работу над основной частью проекта,
вместо того, чтобы откладывать весь проект, пока прорабатываются детали
более сложных разделов.
Независимо от структуры сделки необходимо определить условия и график оплаты:
Производство
Возникает искушение думать, что, поскольку вы платите интегратору
конкретно за производство, то, как только проект запускается, вы остаетесь в
стороне. Сопротивляйтесь этому мыслительному процессу. У вас есть
несколько важных вещей, которые нужно отслеживать во время производства.
Разработка и ТестированиеИнфраструктура
Где будет находиться незавершенная работа и какой у вас будет к ней доступ?
Разработчики обычно работают на своих локальных рабочих станциях и через
регулярные промежутки времени развертывают код в среде интеграции. Кто
контролирует эту среду? Это будет в вашей инфраструктуре или на сервере,
контролируемом интегратором?
Где будет храниться исходный код? Интеграторы обычно хранят исходный код
в своей среде, но в какой момент он должен передать его вам? Кроме того,
какой уровень прозрачности у вас есть в системе управления исходным кодом?
Вы можете проверить его в любое время?
Как вы записываете проблемы? Во время разработки вы можете сообщить о
проблеме, но вам скажут, что она будет решена позже. Как отслеживается эта
проблема? Существует ли система управления билетами или вики, где можно
отслеживать эти предметы, чтобы они не ускользнули? Если ваши опасения
где-то не записаны, вероятность того, что производственная группа запомнит
каждую из них и проактивно вернется обратно, весьма мала.
4Программисты обычно пытаются достичь идеального состояния «потока», когда они находятся в зоне
действия и добиваются необычайных успехов. Это явление хорошо известно и широко
распространено в программировании, а прерывания ему противоречат. Возможно, стоит прочитать
основополагающую статью об этой концепции:«Поток: психология Оптимальный опыт» Михай
Чиксентмихайи.
Производство | 321
процесс выглядит? Это может быть тесно переплетено с методологией и
стилем разработки, которые использует интеграционная фирма.
Чтобы описать свою деятельность, многие команды разработчиков используют
термин «гибкая». Этот термин имеет смысл только при рассмотрении того, как
создавалось программное обеспечение.
В прошлые годы при разработке программного обеспечения использовалась
так называемая методология «водопада». Процесс разработки шел по
последовательному ряду задач. Точно так же, как вода не может снова
подняться и упасть водопадом во второй раз, каждая задача строится на первой,
медленно и неуклонно продвигаясь вперед. В результате программный продукт
имел тенденцию не складываться до самого конца процесса. Возможно, пока
проект не был почти завершен, смотреть было не на что.
Проблема здесь должна быть очевидна: если ничего не видеть, как узнать,
хорошо ли собран продукт? Огромная проблема может быть обнаружена
только после тестирования конечного продукта, и тогда уже будет слишком
поздно что-либо менять.
В 2001 году группа инженеров-программистов выпустила то, что они
назвали«Гибкий мани- фесто, это было заявлением о том, что старая
методология не работает должным образом. В манифесте 12 принципов, но
первый из них является ключевым:
Нашим высшим приоритетом является удовлетворение потребностей клиентов
посредством своевременной и непрерывной поставки ценного программного
обеспечения.
Это ключ к гибкой разработке программного обеспечения: выполняйте работу
как можно раньше и чаще. Передайте что-то клиенту как можно скорее,
независимо от того, насколько оно грубое или урезанное, затем соберите
отзывы и повторите процесс. Совершенствуйте продукт с течением времени,
используя отзывы клиентов как неотъемлемую часть процесса.
Термином «гибкий» злоупотребляют (и его часто используют разработчики,
слишком молодые, чтобы даже иметь дело с «негибким» процессом), но его
следует принять как стандартную практику. Ключевым моментом для
интегратора является избежание синдрома «заползания в пещеру», когда вы
создаете веб-сайт так, чтобы вы его не видели, до самого запуска.
Разработка контента
Весьма вероятно, что проект внедрения изменит ваш сайт таким образом, что
потребуются изменения в контенте. Контент придется реорганизовать или
создать новый контент. И это не учитывает весь контент, который придется
перенести.
Кто будет вносить эти изменения или создавать этот контент? Вы платите
интегратору за эти изменения? Вы платите другой фирме? Или вам нужно
внести эти изменения самостоятельно?
Масштабы разработки контента часто недооцениваются организацией и, как
следствие, задерживаются. Многие веб-сайты уже завершены и простаивают
месяцами в ожидании необходимых изменений контента. «Мы запустим, как
только приведем в порядок контент» — распространенный рефрен.
Определите, что необходимо сделать с вашей стороны перед запуском, и
выделите для этого персонал и ресурсы. Убедитесь, что время четко указано.
Когда ваш контент должен быть завершен и в каком состоянии он должен
быть? Можете ли вы ввести его непосредственно на разрабатываемый веб-сайт,
или вам нужно будет разместить его в каком-то нейтральном месте, например в
Google Docs, или в службе, специально предназначенной для этого,
напримерСбор контента? Не один интегратор прямо перед запуском получил
неожиданный ZIP-файл с сотнями документов Word с пометкой: «Вот весь наш
контент. Дайте нам знать, когда он появится в системе!»
В этой отрасли (и во многих других, я уверен) ходит шутка о том, что «эта
работа была бы отличной, если бы не клиенты». Хотя явно черный юмор,
поймите, что самый большой
Производство | 323
угрозой вашему проекту на самом деле можете быть вы. Убедитесь, что в
процессе внедрения у вас есть собственные основы.
Не Быть ЧТОКлиент
У каждого интегратора есть десятки страшных историй о
клиентах, которые медлили с выполнением каждой
поставленной перед ним задачи. Независимо от того,
насколько четко интегратор понимает, что и когда необходимо
сделать, некоторые клиенты никогда не выполняют свою часть
сделки.
Хуже того: когда клиент наконец получает то, что должен был
предоставить, он ожидает, что интегратор бросит все и
немедленно вернется к своему проекту. Эти клиенты не
понимают, что интегратору следует избегать дыр в графике, и
когда становится очевидно, что клиент не сможет выполнить
поставленную задачу, их исключают из производственного
графика.
Всегда помните, что у вашего интегратора есть и другие
клиенты. Если вы приведете к остановке вашего проекта,
ожидайте, что интегратордвигаться дальше. Когда и если вы
наконец справитесь, ожидайте, что вас ждет задержка, пока вы
вернетесь в их производственный график.
Обучение и поддержка
Как мы обсуждали вГлава 12Обучение и поддержка могут быть непростыми,
поскольку веб-сайт часто представляет собой комбинацию программного
обеспечения поставщика и реализации интегратора.
Планируя обучение, определите, кому в вашей организации необходимо
пройти обучение и на каком уровне. Сколько людей должны знать основные,
основополагающие принципы программного обеспечения CMS? С другой
стороны, скольким людям не нужно знать ничего, кроме того, что нужно для
выполнения работы?
Большинство интеграторов не будут проводить базовое, фундаментальное
обучение по той причине, что поставщики используют обучение как источник
дохода. Поставщики зарабатывают деньги на обучении и не одобряют
интеграторов, предлагающих формализованные курсы обучения по их
программному обеспечению в качестве конкурентов.
Большинство поставщиков предлагают обучение по одной или нескольким из нескольких
моделей:
На месте
Тренер от поставщика приезжает в вашу организацию, что подходит для
обучения больших групп.
Хостинг
Ваши сотрудники прилетают к месту расположения поставщика (либо к
своему фактическому местоположению, либо к удаленному месту, из которого
они проводят обучение в определенное время); Это
А ФиналСлово
Хотя было бы идеально, если бы отношения между организацией и
интегратором были совершенно деловыми и свободными от межличностных
проблем, это никогда не бывает так. Организация и интегратор (и, в меньшей
степени, поставщик) будут тесно сотрудничать, обычно в течение длительного
периода времени. В некоторых случаях эти отношения могут растянуться на
годы после запуска.
В таких отношениях со временем в игру вступит человеческий фактор.
Организационная политика может и будет оказывать влияние на проект.
Команды разработчиков в организации могут быть возмущены приходом
внешнего поставщика, команды маркетинга могли иметь неудачный опыт в
прошлом, или интегратор может быть не в состоянии игнорировать свое
восприятие неискушенного мышления организации.
Развязка вернется
Разделенные CMS создали Интернет. Когда я впервые пришел в эту отрасль, у
нас даже не было термина «CMS». У нас почти не было термина «контент».
Как я отметил в предисловии, у нас просто лежала куча файлов, и мы были
вынуждены управлять ими по чистой необходимости.
Некоторые из первых CMS фактически представляли собой просто наборы
скриптов Perl, которые шаблонизировали данные и упрощали управление
агрегатами. Movable Type — одна из первых платформ для блогов, запущенная
в 2001 году, — представляла собой основанную на Perl систему сценариев,
генерирующую статический HTML.
Но развязанные CMS страдали от необходимости в активной среде доставки.
Потребность в интерактивности в реальном времени (доски объявлений,
комментирование, рейтинги) никогда не подходила для статических файлов.
Поскольку веб-сайты становились все более разнообразными, требовался
немедленный доступ к репозиторию, а концепция четко определенного
«момента публикации» становилась все более и более размытой. Небольшие
изменения в среде доставки (комментарий, оценка и т. д.) требовали полной
повторной публикации, что становилось проблематичным.
Со временем в среду доставки добавлялось все больше и больше функций, пока
новым разработчикам не стало очевидно, что контентом следует управлять и
там. При этом разделенные архитектуры начали приходить в упадок.
В то же время управляемые веб-сайты становились все меньше и меньше. Хотя
CMS использовались на более крупных сайтах, многие небольшие веб-сайты
по-прежнему управлялись с помощью клиентских редакторов, таких как
Microsoft FrontPage и Adobe Dreamweaver. Когда CMS начали фильтровать
вниз, в сети появилось поколение сайтов, которые не могли страдать от
сложностей развязки и требовали новейшей интерактивности на стороне
доставки. Это еще больше стимулировало внедрение связанных платформ
CMS.
Но ситуация постепенно возвращается вспять. Судя по всему, произошло то,
что интерактивность, необходимая в среде доставки, стала отделена от CMS —
теперь ее могут обслуживать системы, которым может вообще не
потребоваться взаимодействие с CMS. Добавить комментарий на веб-сайт
теперь так же просто, как использовать подключаемую систему, например
Развязка вернется |3 3 1
Disqus, IntenseDebate или даже Facebook. Клиентские технологии продвинулись
до такой степени, что интеграция с платформами социальных сетей
осуществляется просто с помощью JavaScript. Поставщики средств
автоматизации маркетинга могут интегрироваться исключительно на стороне
клиента, и даже A/B-тестирование доступно практически без изменений
шаблонов.
Это означает, что богатый и разнообразный пользовательский интерфейс
теперь может размещаться «поверх» статических HTML-файлов. HTML-
файлы, содержащие контент, просто служат основой для ошеломляющего
набора интерактивных возможностей, предоставляемых другими сервисами.
Большинство клиентских технологий не знают и не заботятся о том,
существуют ли их HTML-хосты в файлах, записанных на диск 10 лет назад или
сгенерированных на лету миллисекунду назад.
Еще дальше по этому пути отношения между контентом, генерируемым
сервером, и клиентскими технологиями могут оказаться на грани полного
переворота. Полнофункциональные JavaScript-фреймворки, такие как
AngularJS, React и Dojo, порождают «одностраничные приложения», в которых
клиенту доставляется вовсе не контент, а приложение, которое запускается в
браузере и может получать контент в зависимости от пользователя. поведение.
В таких ситуациях вместо контента, доставляющего функциональность
клиента, мы имеем прямо противоположное — функциональность клиента
доставляет контент. По сути, мы устанавливаем в браузер механизм шаблонов
и вывода каждый раз, когда посетитель заходит на сайт.
Все эти изменения сводят на нет некоторые существенные преимущества
связанных CMS. Удаление функций после публикации, а иногда даже
шаблонов, оставляет редакционное ядро, которое может выжить так же
хорошо, как и отдельная система, и может быть для нее даже лучше.
Как отмечено вГлава 9Отдельная публикация дает уникальные преимущества с
точки зрения масштабируемости, стабильности и безопасности. Среды
доставки становятся все проще создавать и поддерживать. Amazon Web
Services позволяет размещать статический контент из платформы хранения
Amazon S3, и парой щелчков мыши его можно интегрировать в CloudFront,
сеть доставки контента. Объедините это с отдельной CMS, и вы буквально
получите практически бесконечно масштабируемую среду для размещения
контента для оптимизированной доставки по всему миру за пять минут. (Для
разработчиков, работающих в этой области с середины 90-х, это просто
поражает воображение.)
Мы вполне можем увидеть, как CMS возвращается к своему ядру, которое
традиционно заключалось в моделировании, управлении и агрегировании
контента. Когда и если это произойдет, развязка сыграет огромную роль в
сложившейся ситуации.
332 | Глава 15: Куда движется управление контентом
The Рост из Статический СайтГенераторы
Новая волна генераторов статических сайтов в сочетании с
грид-хостингом является интересной разработкой.1 Сейчас
существует множество инструментов командной строки для
шаблонирования и сборки контента, хранящегося в плоских
файлах, обычно в Markdown. Полученный HTML-код затем
передается в среду хостинга.
Некоторые инструменты даже превращают сайты на базе CMS
в статические. У вас может быть сайт Drupal или WordPress на
вашей локальной рабочей станции или за корпоративным
брандмауэром, и эти инструменты подключаются к нему и
«сглаживают» его в статический HTML для размещения в
другом месте.
Подобные инструменты эффективно превращают связанные
CMS в несвязанные. Все редакционные функции по-прежнему
используются для моделирования, управления, агрегирования
и шаблонирования контента, но функции доставки отменяются
в пользу всех других преимуществ, которые обеспечивает
развязка.
• Моделирование контента
• Агрегация контента
• Редакционный рабочий процесс
• Управление выводом
1По иронии судьбы, на веб-сайте этой книги не используется система управления контентом. Глоссарий
поддерживается в Markdown, а веб-сайт создается с помощью замечательного генератора статических
сайтов под названиемВьям.
340 | Послесловие
Индекс
А веб-сервисы,248
абстракция(и),189 одобрения
частей репозитория,246 редакционная,157
шаблон,193-194 краткое описание функций,171
запись контроля доступа утверждающие,55
(ACE),165 список контроля атрибуты
доступа (ACL),165 и типы данных,88-90
приобретение,35-51 как редакционные
от коммерческих метаданные,92
поставщиков,39-44 встроенный,90
собственная разработка,47-49 Проверка,91
варианты с открытым аутентификация
исходным кодом,36-39 авторизация против,165
вопросы/контрольные списки подключаемые архитектуры для,247
для,49 автоматическая миграция контента,288
риски, связанные с ИТ- автоматизация контента,11
требованиями,44 SaaS,45-47
время покупки,42
неизвестные неизвестные в процессе Б
отбора,51 действия, разрешения для,168 особенности подпора,204
интерфейс администратора,140 Базовый лагерь,67
администратор,58 преимущества, фактические и
пользователь уровня администратора, теоретические,19 Бернерс-Ли,
разработчик,272 Adobe Дримвивер,331 Тим184
сайты по интересам,227 предвзятость,117
соглашения об агрегировании (см. двунаправленная публикация,30
агрегирование контента), платформы для блогов,80
письменные,314-319 Поле тела,91
Веб-сервисы Amazon,332 Бойко, Боб,5
интеграция Бултон, Марк143
аналитики,218 объем бюджета,313
AngularJS,332 покупка,CMS (см. приобретение, CMS)
аннотированные каркасы,311
анонимная персонализация,214-217 С
API (интерфейсы прикладного CAPE (создавайте где угодно, публикуйте
программирования),235-250 везде),338
и подключаемые категории
архитектуры,243-245 как
сдвинутые во времени
отношения,250 код API,236-243 341
модели событий,239-242
как вторичная география,118 по конфигурации или по коду,130-131
теги против,119 география контента,114-120
CCMS (компонентные системы управления
контентом),8,150
CDN (сеть доставки контента),240 набор
изменений,156
каналы,81
CKEditor,246
Кларк, Джош,79
облачные вычисления (см. программное
обеспечение как услуга) CloudFront,332
API кода CMS (см. системы управления
контентом),236-243
сотрудничество, рабочий процесс
для,160 коллекции, как вторичная
география,118 коммерческое
программное обеспечение CMS
приобретение,39-44
и регулярный доход,43
модели лицензирования,40
программное обеспечение с
открытым исходным кодом
или20-23 методы
ценообразования,41
риски, связанные с ИТ-
требованиями,44 подписка на
программное обеспечение,42
терминология,37
время покупки,42
синдром коммерческого программного
обеспечения,23 сообщество (экосистема
пользователей и разработчиков),
233
комьюнити-менеджеры,55
сложность, анализ функций и,67
системы управления компонентным
контентом (CCMS),8,150
условные поля,222
конфигурация,269
содержание
созданные людьми посредством
редакционного процесса,3
предназначенные для потребления
человеком через
публикация,4
автоматизация/агрегирование,11
код против,28
определенный,5
презентация против,83,173
издательский,196-202
необработанные
данные по
сравнению с,3
отделение презентации от,81-85
агрегирование контента,109-133
и глобальное дерево,115
плоский или и связанные и разделенные системы,26
иерархический,129 управление контентом против,5,25
функциональность, сеть доставки контента (CDN),240
122-130 разработка контента, интеграторы и,323
неявные/явные модели,120-122 встраивание контента
межстраничный,129 и моделирование контента,97-
создание объекта контента 103 и миграция,291
из,121 заказ вручную или блоки,100
производный порядок, последствия для композиции страницы,101-
125-127 103 регионы,101
моделирование для реализации,271-273 встраивание расширенного
разрешения,128 текста,97-100 виджеты,100
фильтры статуса срок действия
публикации,128 контента,156 файлы
ограничения по содержимого
количеству,128 добавление,162
форма ассоциация,163
содержания,111- Обработка изображения,164
113 статический управление,162-164,172
или форматирование контента,13
динамический,123- заморозка контента,301
125 краткое география контента,114-120
описание и предвзятость,117
функций,133 изменение во время миграции
ограничения контента,293 редакционные
типа,127 ограничения,117
URL-адресация,122 вторичная география,118
переменная или деревья,115,119
фиксированная,125 интеграция контента,277
утверждение контента,171 жизненный цикл
создание контента,136-138
контента,12 управление
доставка содержанием
контента
342 | Индекс
и система управления контентом,5-7 элегантности,32 системы против
основные характеристики,1-14 реализаций,17 целевые типы
доставка контента по сравнению с,5,25 сайтов,16
содержание,3-5 стек технологий,23-25
моделирование данных виды,7-9
и,80 дисциплина однонаправленная или двунаправленная
против программного публикация,30
обеспечения,6 первые
дни,xv развивающаяся
роль,60
четыре столпа,339
будущее,329-338
многоязычный (см. многоязычное
управление контентом)
системы против реализаций,17
системы управления контентом (CMS)
получение (см. приобретение,
CMS) фактических и
теоретических выгод,19
и синдром коммерческого
программного обеспечения,23 и
редакционная эффективность,11
и технический
долг,32 как
цифровой хаб,242
код против
конфигурации,29 код
против контента,28
автоматизация/агрегация контента,11
контроль контента,9
ограничения форматирования
контента,13 повторное
использование контента,10
основные функции,9-12
связанные или
разделенные,26
определенный,5-7
расширяемость (см. расширяемость)
функций анализа функций (см.
анализ функций), не
обрабатываемых,12-14 аналогия
домостроения,14 реализация (см.
реализацию) реализации по
сравнению с системами,17
установлено по сравнению с SaaS,27
управление против доставки,5,25
управление несколькими объектами,226-
228
программное обеспечение с открытым
исходным кодом или коммерческое
программное обеспечение,20-23 на
основе страниц,84
стиль платформы и стиль продукта,18
точки сравнения для выбора системы,15-
33
практичность против
команда управления определение
контентом,53-61 модели,85-104
администраторы,58 контрольный список
и заинтересованные функций,107
стороны проекта,59 для реализации,271-273
Разработчики,57 управляемость,105
редакторы,54-56 страничная CMS,84
планировщики сайтов,56 отношения,103
промежуточное программное обеспечение для разделение содержания и представления,81-
контента,338 85 типы,85-88
миграция
контента,285-303
и скорость
контента,300 и Индекс |3 4 3
встроенный
контент,291
автоматизирован
ный или
ручной,287
меняя географию во
время,293 опасность
недооценки,301 на ранних
стадиях процесса
реализации,273
редакционный вызов,286
добыча,289-291
окончательный,281
Импортировать,294
разработка скрипта
миграции,298 один к
одному,299
планирование,302
процесс, 288-298
Контроль качества для,297
повторная сборка, 292-294
разрешение перенесенного
контента,295-297 заглушка,294
время,300
трансформация,291
моделирование контента,75-108
и встраивание
контента,97-103 как
редакционный
выпуск,106
проверка
атрибутов,91
атрибуты и типы
данных,88-90
атрибуты как
редакционные
метаданные,92
встроенные
атрибуты,90
состав,104
Тип содержимого,85-88
наследование типа
контента,93-96 контент
против презентации,83
моделирование данных и
управление контентом,80 основы
моделирования данных,76-79
навигация по
обработка данных, формы
контенту,170
и,223 моделирование данных
объекты контента
и управление
тип контента по сравнению с,86
контентом,80 основы,76-
преобразование агрегации в,121
79
оперативный,178
администраторы баз данных,58
шаблонизация,276
типы данных,88-90
выбор типа,140-142
отдельная система CMS
разрешения на контент,164-
преимущества,198
170 (см. также
контент и код,28
разрешения)
связанная система
предварительный просмотр контента,170
против,26
согласование контента,269
синхронизация среды доставки,200
планирование контента,155,171
краткое описание функций,202
поиск контента,229-233
поиск контента в,139
и поиск информации,230
будущее,331
Люсене,233
публикация контента с помощью,196-
контент-стратеги,56
199 краткое описание функций
заглушка контента,294
публикации,202 публикации целей
обход контента,138-140,170 в,199-201
деревья контента,114 доставка (см. доставку контента)
проблемы с функциональностью,119 синхронизация среды доставки,200
иерархический,115 управление зависимостями,153
миграционный Разработчики
процесс,293 Тип и качество API,250
содержимого и
и моделирование контента,85-88 функциональность,
объект контента по сравнению 29
с,86 и обобщение,266
в агрегатах,127 как пользователи уровня
наследование,93-96 администратора,272 избегая
выбор нового объекта контента,140- центризма развития,282-284
142 типы переключения,87 экосистема,233
шаблон против,175 в команде управления контентом,57
скорость контента,300 центризм развития,282-284
контекст, окружение и,188 сообщество разработчиков,233
постоянный/периодический доход,43 управление цифровыми
структуры управления,181 активами (DAM),7 цифровой
COPE (Создать после публикации хаб,242
везде),338 расходы моделирование дискретного
внедрения CMS,313 контента,103 дискретная
прокладка,312 информация,274
связанная система CMS, Дискус,331
развязанная система распределенный прием
или26 контента,337 DNS (система
публикация контента с доменных имен),282 синдром
помощью,196-199 Круиз- «делай все»,67 управление
контроль,269 документами,7 документация
пользовательские перенаправления,225 и программное
управление взаимоотношениями с обеспечение с открытым
клиентами (CRM),218 исходным кодом,38 в
контексте,149
Д Документум,8
DAM (управление цифровыми активами),7 Додзё,332
информационные панели,228 система доменных имен
(DNS),282 контроль качества
домена,297 шаблонах,101
дропзоны, в Друпал,8,31,101
Друпал Гарденс,15
344 | Индекс
плагины Друпала,244 публикация набора изменений,156
модуль Drupal Views,131 сотрудничество,160
динамическая агрегация,123-125 утверждение контента,160
заказ,125-127 срок действия контента,156
критерии поиска управление файлами контента,162-164 жизненный
в,123 переменная или цикл контента,136-138
фиксированная,125 планирование контента,155
динамическая композиция страниц,101- управление зависимостями,153
103
Э
ECM (управление корпоративным
контентом),7 крайние случаи,79,203
редактирование
и создание агрегации контента,133
моделирование контента как
редакционная проблема,106
редакционные ограничения по
географии,117
интерфейс редактирования,138-150
обход плохих инструментов,150
возможность поиска/обхода
контента,138-140
предварительный просмотр
контента,142-144
настройка,245
элементы, 144-150
краткое описание
функций,171 для
построения
формы,221
контекстная
помощь/документация,149
многоязычное управление
контентом,211 персонализация и
предварительный просмотр,144
подбор справочного контента,148
расширенное редактирование
текста,146
настройка редактора
форматированного текста,246
масштабируемость,140
выбор типа,140-142
Проверка,145
РедактироватьLive!, 246
редакционные разногласия,135
редакционные метаданные,
атрибуты как,92 редакционный
процесс
и миграция контента,286
CMS и эффективность,11
создание контента с
помощью,3
редакционные инструменты/рабочий
процесс,135-172
одобрения,157
интерфейс редактирования,138-150 событий,159
обход редакторами внешние интеграторы (см. интеграторы, внешние)
плохих извлечение,289-291
инструментов,150 платформа эЗ,24,99
краткое описание
функций,170-172 Ф
Обработка изображения,164 Фейсбук,331
многоязычное анализ функций, CMS,65-73
управление и детали реализации,69
контентом,211 и уникальные потребности
разрешения,164-170 организации,72 контрольный список
контроль версий,153 агрегирования контента,133
метки версий,151 контрольный список моделирования
управление версиями,151-153 контента,107 трудности,65-71
рабоч синдром «делай все»,67
ий контрольный список
процесс,1 редакционных инструментов,170-
57-160 172
редактор
ы
доступ к функционалу,29
в команде управления Индекс |3 4 5
контентом,54-56
элегантность,
практичность vs.,32
встроенный контент,
миграция,291
встраивание (см.
встраивание контента)
Синдром пустого дома,273
управление
корпоративным
контентом (ECM),7
Эписервер,24,101,179
обработчики событий,239
модели событий,239-242
события),239
срок действия,156,171
модель
явной/внешней
агрегации,120
функция
экспорта,289
расширяемость,235-250
и API кода,236-243
настройка
редакционного
интерфейса,245
модели событий,239-
242
подключаемые архитектуры,243-245
подключаемая аутентификация,247
абстракция репозитория,246
запланированные/по требованию
работы,249
веб-
сервисы,
248
внешние
механизм
ы
соответствие цели,66 помощь, в контексте,149
сопоставление функций с иерархические агрегаты,129
проблемами,70 цели,108
контрольный список управления
выводом,201 обзор возможностей
CMS,71 контрольный список
управления публикацией,201 целое
против частей системы,68
файловые шаблоны,195
фильтры,128
соответствие цели,66
плоские агрегаты,129
управление потоком,181
иностранные языки (см. многоязычное
управление контентом)
реализация погрузчика,255-257
форма здания,220-224
обработка данных,223
редактирование
интерфейсов для,221
интеграция механизмов внешних
форм,224 проблемы с
дополнительными
инструментами,68 стилистическая
сложность,222
формировать сервисы
двигателя,224 форматирование
(содержание),13 модель
программного обеспечения
freemium,38 трение,135
документ спецификации функции,311
функциональный контроль качества,297
будущее управления контентом,329-338
развязанные системы,331
распределенный прием
контента,337 SaaS
начального уровня,335
маркетинговые инструменты и
интеграция,333-335 многоканальное
распространение,336
CMS с открытым исходным кодом,330
г
соглашение о генеральном обслуживании
(GSA),315 обобщение,266
география контента (см. географию
контента) глобальное дерево,115
Гудридс,83
управление,13
GPL (Универсальная общественная
лицензия GNU),37 GSA (договор
общего обслуживания),315 GUID
(глобальные уникальные
идентификаторы),90
ЧАС
иерархическое дерево,111,115 настройка среды,268
исторические URL-адреса,225 окончательная миграция
домостроение, как аналог контента,281 монтаж,269
CMS,14 модели хостинга,279 запуск,282
HTML из готовых виджетов,185 неконтентная интеграция/разработка,277
предварительная реализация,257-268
я принцип конструкции,254
IA-диаграмма,311 процесс,268-284
управление планирование/настройка
идентификацией производственной среды,278
(IdM),167 Обработка ОК,281
изображения,164 грубость,271-273
реализация(и),253-284 поддерживать,280
агрегатное системы против,17
моделирование,27 шаблонизация,274-276
1-273 в рамках обучение,280
анализа виды,255-257
функций,69 код неявная навигация,271 модель
против неявной/внутренней агрегации,120
контента,28 импортные дефекты,298
конфигурация,26 функция импорта,294
9 импорт,294
миграция (см. также миграцию
контента,273, контента) контекстное
281 (см. также редактирование,142
миграцию контекстная помощь,149
контента) контекстное управление,138
моделирование контента,271-273 собственная разработка
согласование контента,269 CMS,47-49 индексы,
расходы,313 дополнительные,124
информационные архитекторы,56
346 | Индекс
информационный поиск
разговорный (см. многоязычное
(ИР),230 Инженуикс,15
управление контентом)
наследование,93-96
запуск,282
внутренний шаблон,194
системы управления обучением
монтаж,269
(LMS),8 лицензирование
интеграторы, внешние
коммерческое программное
в качестве отправной точки для
обеспечение CMS,40
приобретения CMS,35
программное обеспечение с
Профессиональные услуги поставщиков
открытым исходным
CMS,307 разработка контента,323
кодом,39
расходы,313
жизненный цикл (см.
инфраструктура разработки и
жизненный цикл
тестирования,320 во время
контента)списки,100,118
производства,319-324
LMS (системы управления
модели взаимодействия,306-308
обучением),8 локализация,205
консультации по вопросам
Люсене,233
неисполнения,317
артефакты перед реализацией,310-312
общение по проекту и регистрация, М
320 управляемый хостинг,38
ОК,323 управление (см. управление контентом) (см.
В отношениях с,327 системы управления контентом (CMS))
определение объема ручная миграция контента,287
проекта,309-312 ручной заказ, производный порядок
поддержка, или,125-127 маркетинг
предоставляемая,325 интеграция аналитики,218
близость и преданность коллективу,319 и интеграция CRM,218
обучающие модели,324 анонимная персонализация,214-
доверие и,327 217 как выходящее за рамки
прием работ,321-323 CMS,12
работать с,305-327 как редакционная
письменные соглашения с,314-319 роль,55
ИнтенсивныеДебаты,331 автоматизация,213-
виджеты интерфейса, 220
готовые,185 будущее маркетинговых
интернационализация,205 инструментов/интеграции,333-
(см. также управление многоязычным 335
контентом) IR (поиск информации),230 документ предложения,314
ISO (Международная организация по Медиа Вики,112
стандартизации),206 встречи с интеграторами,320
ИТ-отдел, требования организаций по Мендельсон, Ной,184
сравнению с,44 меню, как второстепенная
география,118 метаданные
Дж атрибуты как,92
определенный,92
Дженкинс,269
Microsoft FrontPage,11,331
задания, запланированные/по
промежуточное программное обеспечение,338
требованию,249
миграция (см. миграцию контента)
сценарий миграции,298
К моделирование (см. моделирование
известная персонализация,214 контента) многоканального
распространения,336 многоязычное
л управление контентом,204-213
языки проблемы управления контентом,212
родные языки программирования и поддержка внешних переводческих
шаблонный код,183-185 услуг,211 определение/выбор языка,206
языкправила,208-209
языковые варианты,209
номенклатура,205
Индекс |3 4 7
нетекстовый контент,210 укладка,103
многочастные формы,223 страничная CMS,84
управление несколькими объектами,226- Парр, Теренс177
228 частичные типы, объединение,95
мультитенантное программное разрешения
обеспечение,45 и редакционный рабочий процесс,164-170
(см. также CMS-системы «программное
обеспечение как услуга» (SaaS))
Н
сетевой контент,112
неконтентная интеграция/разработка,277
программное обеспечение с неоткрытым
исходным кодом, терминология,37
консультации по вопросам
неисполнения,317
Норман, Дон,237
О
дефекты
объекта,298
объекты
разрешения на контент (см.
объекты контента),167
индивидуальная миграция
контента,299 программное
обеспечение CMS с открытым
исходным кодом
приобретение,36-39
и терминология программного
обеспечения с закрытым исходным
кодом,37
бизнес-модели,37-39
коммерческое программное
обеспечение против,20-23
будущее,330
объект оперативного
контента,178 Оракул,25
фруктовый сад,330
порядок, ручной или производный,125-
127 выходной агностицизм,195
управление выводом,173-196
контент против
презентации,173 краткое
описание функций,201
шаблонизация,175-196
п
наслоение темпа,266
дополнение
(затрат),312
композиция
страницы
встраивание контента и,101-103
горизонтальная и вертикальная
авторизация против элегантность vs.,32
аутентификации,165 предварительная
Решение конфликта,169 реализация,257-268
краткое описание функций,172 открытия и артефакты,257-260
для действий,168 разработка технического
для объектов,167 плана,260-268
для пользователей,166 презентация
с агрегатами,128 контент против,83,173
персонализация,214-217 отделение контента от,81-85
анонимн редактирование без
ый,214- презентации,142
217 идея принцип конструкции,254
против формулировки проблем,311
реальнос проблемы, сопоставление
ти,217 функций с,70 CMS-системы в
известен, стиле продукта,18
214 производственная среда
при модели хостинга для,279
предварительном планирование и
просмотре настройка,278
контента,144 планы, профессиональныйуслуги,307
ограничения,268 проприетарное программное
CMS-системы обеспечение, терминология,37
платформенного прокси-объекты контента,192
типа,18 публикация
подключаемые как характеристика
архитектуры,243- содержания,4 краткое
245 описание функций,201
основные однонаправленный или
компоненты двунаправленный,30
CMS, такие издательское дело,196-202
как,245 для связанное и разделенное управление
аутентификации, контентом,196-199
247 синхронизация среды доставки,200
полиморфизм,189 краткое описание функций,201
редактор цели публикации, отделенные друг от
мощности,55 друга,199-201 покупка, CMS (см.
практичность, приобретение, CMS)
348 | Индекс
вопрос поиск
контроль качества
для миграции
контента,297
перенесенного
контента,281 с
интеграторами,323
р
Радредактор,246
Реагирова
ть,332
сборка
и затыкание,294
миграция контента,292-294 сверка
(см. сверка контента) управление
записями (RM),7
регулярный доход,43
регионы, в
шаблонах,101
регулярные выражения (regex),146
реификация,77,309
реляционное содержание,112
реляционное моделирование
контента,103 реляционная
информация,274
исполнения,81
инструменты
отчетности,228 хранилище,
абстракция,246 сбор
требований,44
разрешение перенесенного
контента,295-297 адаптивный
дизайн,195
REST (передача репрезентативного
состояния),248 повторное использование,10
обратное управление
контентом,221 богатый текст
определенный,90
интерфейс редактирования для,146
настройка интерфейса редактора,246
встраивание,97-100
РМ (управление
записями),7 грубость,271-
273
С
Системы SaaS CMS (см. программное
обеспечение как услуга).CMS-системы)
масштабирование/масштабирование,140
планирование,155,171
платформа SCM (управление исходным
кодом),268 обзор,309-312
очистка экрана,289
скрипт, миграция (см. скрипт миграции)
как агрегирование кодом,39 окружить,
динамических и внутренний шаблон,194
переменных,125 и шаблонизация,185-190,274
содержание,229-233 контекст,188
критерии в динамических
агрегациях,123 Люсене,233
дополнительные индексы
Т
табличное содержимое,112
для,124 выбор, CMS (см.
приобретение,
CMS)консультант по
подбору,35 Индекс |3 4 9
процесс отбора (см.
приобретение,
CMS)сериальный контент,111
администраторы серверов,58
Серверная часть
включает в
себя,11,185,193 форма
содержания,111-113
срезание слоев,266
одностраничные приложения, 332
планировщики сайтов,56
карта сайта,311
SOAP (простой протокол доступа к
объектам),248 социальная сеть,336
CMS-системы «программное
обеспечение как услуга»
(SaaS)приобретение,45-47
будущее,335
установленное программное обеспечение по
сравнению с,27
платформа управления исходным
кодом (SCM),268 СОУ (описание
работы),315-319
Спольски, Джоэл21,67
стек (стек
технологий),23-25
Переполнение стека
(веб-сайт),234
стекирование (композиция веб-
страницы),103 заинтересованные
стороны, команда управления
контентом и,
59
техническое задание
(SOW),315-319
статическая
агрегация,123-125
администраторы хранилища,58
Строковый шаблон,177
заглушка,294
подписки, программное обеспечение,42
Краткое содержаниеполе,91
дополнительные
индексы,124
поддерживать
интеграторами,325
реализации,280
программного
обеспечения с
открытым исходным
теги
выбор типа
как вторичная география,118
краткое описание функций,170
категории против,119
для нового объекта контента,140-142
таксономии,118
команда
управление контентом (см. команду ты
управления контентом) UGC (пользовательский контент),30-31,55
разработка технического плана,263 однонаправленная публикация,30
технический долг,32 управление URL-адресами,224-
план технической реализации (ТИП),260 226,297 (см. также
разработка технического плана,260-268 резолюцию)
стек технологий,23-25 сопоставление URL-адресов,178
шаблонизация,175-196 URL-адреса, агрегаты и,122
и контролирующие удобство использования,69
структуры,181 и дизайнеры пользовательского опыта (UX),56
реализация,274-276 и пользовательский контент (UGC),30-
прокси-объекты,192 31,55 пользователи
и окружение,185-190 экосистема,233
опасности готовых виджетов разрешения на,166
интерфейса,185 определенный,175 UX (пользовательский опыт) дизайнеры,56
краткое описание функций,201
языковая функциональность,179-185 В
родные языки программирования и Проверка
шаблонный код,183-185 и интерфейс
объектов,276 редактирования,145
объемного,274 атрибутов,91
выходной агностицизм,195 тщеславные URL-адреса,225
философии,177-179 Вин, Джеффри 31
адаптивный дизайн,195 скорость,
простая замена токена,180 окружает содержание,300
отношение к внутреннему шаблону, продавцы
194 и экосистема пользователей/разработчиков,233
абстракция/включение шаблона,193-194 для интеграции (см. интеграторы, внешние)
разработка/управление шаблонами,195 контроля версий,153,171
выбор шаблона,190-192 тип метки версий,151
против шаблона,175 управление версиями,151-153,171
крошечныйMCE,246 визуальныйдизайнеры,57
ТИП (технический план реализации),260
Поле заголовка,90
жетоны,180 Вт
обучение интерфейс веб-сервиса,248
и реализация,280 и Вебноды,112
программное обеспечение виджеты, готовые,185
с открытым исходным WordPress,112,179,244
кодом,38 и повторение,133 рабочий процесс,157-160
интеграторами,324 (см. также инструменты
трансформация (миграция контента),291 редактирования/рабочий
службы перевода,211 процесс) утверждение контента
переводчики,55 и,160 краткое описание
деревья (см. деревья функций,171
контента) тип (см. тип неофициальный,160
контента) письменные соглашения,314-319
WYSIWYG (что видишь, то и
получаешь)редактор,90
350 | Индекс
О тотАвтор
Дин Баркерзанимается управлением веб-контентом с середины 90-х годов —
еще до того, как у этой дисциплины появилось название. Он является
ветераном сотен внедрений, от небольших маркетинговых сайтов до крупных
издательских операций. Дин работал практически над всеми архитектурами
программирования и десятками различных платформ CMS. Он пишет об
управлении контентом уже более десяти лет и часто выступает на
конференциях по управлению контентом.
О технических рецензентах
Сет Готлибпреобразует идеи в технологические платформы и в равной
степени является разработчиком, архитектором и строителем команды. В
качестве вице-президента по разработке продуктов в Lionbridge Technologies
Сет разрабатывает и внедряет технологии для поддержки стратегических
бизнес-инициатив. Сет имеет глубокий опыт разработки и интеграции
программного обеспечения. Более 20 лет он руководил консалтинговыми и
собственными проектными группами и создавал инженерную культуру,
ориентированную на производительность.
Линси Стразерсразработала свои навыки CMS по борьбе с контентом для высшего
образования
— помогла создать первую собственную систему управления контентом в
колледже своего работодателя в начале 2000-х годов. С тех пор она
консультировала большие и малые организации по вопросам внедрения и
поддержания эффективного присутствия в Интернете. Линси в настоящее
время является старшим консультантом по пользовательскому опыту в
компании Evantage Consulting в Миннеаполисе, штат Миннесота.
Арильд Хенрихсенболее десяти лет занимается созданием веб-сайтов,
порталов и интрасетей, специализируясь на системах управления контентом.
Он сертифицированный разработчик, архитектор, технический руководитель,
тренер, спикер и блоггер, а также MVP Episerver.
Колофон
Животное на обложке журнала Web Content Management — карликовая белка-
летяга. Этот самый маленький вид летяги можно встретить в джунглях Борнео
и Малайзии.
Белку-летягу правильнее называть белкой-планером. Большой лоскут кожи,
называемый патагием, простирается от боков животного до запястий и
лодыжек. Он взлетает в воздух с вытянутыми руками и ногами, тяня за
обученный патагий. Подобно пушистому коршуну, карликовая белка-летяга
плывет вверх и вниз, пролетая три фута на каждый фут падения. Он использует
свои длинные усы, чтобы обнаруживать ветки и земли с закрытыми глазами.
Карликовые летяги имеют всеядную диету, состоящую из орехов, семян,
фруктов, ягод, насекомых и птичьих яиц. Он добывает пищу под покровом
ночи, чтобы избежать хищников.
Многие животные на обложках О'Рейли находятся под угрозой исчезновения;
все они важны для мира. Чтобы узнать больше о том, как вы можете помочь,
перейдите по ссылкеживотные.oreilly.com.
Изображение на обложке взято из словаря Битона. Шрифты обложки: URW
Typewriter и Guardian Sans. Шрифт текста — Adobe Minion Pro; шрифт
заголовка — Adobe Myriad Condensed; шрифт кода — Ubuntu Mono от Далтона
Маага.