Пакет скриптов для управления контентом сайта. Версия 3 (JIV-CMS-G3)
– памятка администратору сайта.
Последнее обновление 18.11.2013 1:24:00
Оглавление (названия пунтктов - гиперссылки! – для перехода – кликни на названии при нажатой клавише Ctrl)
1. Термины и обозначения, используемых в данном документе. 1
2. Структура данных и программных модулей на сервере. 2
3. Настройки планировки страниц. 3
4. Настройки планировки блоков. 5
5. Варианты компоновок страниц, поддерживаемые CMS-ZIV-3. 6
5.1. «Обычные страницы». 6
5.2. «Лента новостей». 7
5.3. «Фотогалерея». 8
5.4. «Голосования или опросы». 9
5.5. «Карта сайта». 9
5.6. «Гостевая книга». 10
5.7. «Почтовая форма». 10
6.Компоненты страниц («кирпичи» для создания нестандартных страниц) 11
Назначение
Предназначен для генерации html-страниц «на лету» (в момент их запроса посетителем сайта) а также для редактирования контента страниц пользователями, не имеющими навыков программирования.
CMS позволяет обновлять и добавлять информацию на страницах пользователям, имеющим только начальные навыки владения компьютером.
Общее описание
JIV-CMS – набор скриптов на языке PHP, располагаемых на сервере в директории-корне сайта.
Основная концепция CMS – контент, стили и планировка страниц – это три независимые составляющие сайта. Они хранятся раздельно и могут редактироваться независимо друг от друга.
· Контент – полезная информация сайта – набор текстовой информации и графических файлов.
· Стиль отображения (шрифт, его размер, цвет…) полностью определяется таблицей стилей (CSS).
· Планировка
o Общая планировка сайта задаётся адресацией страниц в CMS
o Планировка страниц сайта задаётся шаблоном (шаблонами) страниц,
o планировка отображения контента на странице задаётся настройками страницы (набором инструкций CMS).
- При обычном просмотре страниц осуществляют их генерацию.
- При просмотре в режиме редактирования осуществляют отображение форм для редактирования содержания страниц и обработку информации, поступающей с этих форм.
Третье (нынешнее) поколение CMS (JIV-CMS-G3) использует MySQL в качестве места хранения текстового контента и всех настроек
Переход в режим редактирования осуществляется путём запроса страницы с расширением. x (например: http://www. *****/contact. x):
Важное примечание 1: переход в режим редактирования главной страницы осуществляется так:
http://<domain>/.x
Важное примечание 2: вместо x (икс) можно вводить любой символ на этой клавише (x / X / ч / Ч)
при первом запросе страницы с таким окончанием адреса будет запрошена пара логин-пароль.
Если введённые данные будут положительно приняты, то страница откроется в режиме редактирования, иначе – откроется страница в обычном режиме отображения с окончанием адреса – htm.
1. Термины и обозначения, используемых в данном документе
Термины:
Редактор страницы – любое лицо получившее право редактирования контента - содержимого страницы с помощью данной CMS. Может иметь только начальные навыки владения компьютером. Администратор (сайта) – лицо, имеющее право редактировать общую структуру сайта (планировку сайта), стили и выдавать права (пароли и пр.) редакторам страниц. Администратор должен иметь представление о HTML и FTP, не обязательно программист. <файл> - произвольный файл. | = / = “или”. Цветом выделены устаревшие конструкции, которые планируется в будущем исключить из поддержки2. Структура данных и программных модулей на сервере
ДАННЫЕ
(1) – корень сайта – папка ‘www’
В корне сайта располагаются комплект скриптов и служебные файлы и папки:
.htaccess – файл содержит настройки веб-сервера Apache и описания прав доступа к редактированию сайта. Этот файл не отображается сервером ни при каких условиях.
css. css – таблица стилей, применяемая к каждой странице
(2) – страницы сайта
- текстовый контент хранится в базе данных,
- фотографии, картинки, прицепленные файлы хранятся в директории g3_fotos парами:
xxxxxxxxs.<тип1> и xxxxxxxxb.<тип2> – где
x-цифры (0-9),
файлы с окончанием имени s – отображаемые в теле страницы картинки,
файлы с окончанием имени b – открываются по клику на изображении
тип1 – jpg, gif или png
тип2 – любой тип файла. Если это тоже jpg, gif или png – откроется новое окно с изображением, если это другой тип файла – будет предложено скачать файл.
ПРОГРАММЫ И ПОДГРУЖАЕМЫЕ МОДУЛИ
(1) в корне сайта (в папке ‘www’) размещаются файлы:
- g3.php – основной (управляющий) скрипт CMS
- g3_install – инсталлер (после установки скрипт удаляется автоматически, копия хранится в директории g3, этот скрипт может быть запущен только из корня сайта)
- css. css – таблица стилей
Все остальные папки располагаются внутри папки www
(2) в папке g3 – находятся подгружаемые модули. Именно они отображают страницы различных типов и в режиме отображения и в режиме редактирования.
e_java. js – в этом файле хранятся все скрипты, написанные на Java Script
e_javaed. js – в этом файле хранятся скрипты, используемые только при редактировании страницы
(3) в папке ’g3_common’ - располагаются файлы, специфичные для конкретного сайта и используемые на всех страницах сайта
- *.tpl – темплейты (шаблоны) страниц – это html-файлы в которых определённым образом размечены места для подстановки контента или элементов навигации по сайту
- top. e – «шапка» всех страниц сайта (это может быть программа, написанная на php или просто html –файл)*.
- bottom. e – «подвал» страниц сайта (также html или php)*.
Примечание: при разработке сайта используется либо шаблон, либо пара файлов top.e & bottom.e (одновременно - нельзя)
- foto_beg. e & foto_end. e – файлы, выводимые в поток до и после каждой фотографии контента (необязательны)
- spisok_xxx. gif или. jpg – (где xxx - номер ) - пиктограмма элементов списка (списка подстраниц, лент новостей или списка фотогаллерей)*
- border_xxx_nn. gif или. jpg – файлы графической рамки, где xxx-произвольный текст– название, nn - порядковый номер файла (1-8),
- menu_xxx. e – файлы настраиваемого меню
В этой же папке должны располагаться «пользовательские» скрипты, т. е. те скрипты, которые не входят в стандартный набор CMS, а разрабатываются индивидуально для конкретного сайта.
(4) в папке ‘g3_help’ – располагаются файлы справочника CMS.
(5) в папке ‘g3_pics’ – находится набор картинок (пиктограмм, смайликов и пр.), которые редактор может вставлять в текст контента страницы без дополнительной загрузки их на сайт (посмотреть содержание этого набора можно с помощью справочника редактора), а также другие графические файлы, используемые Jiv-CMS (всего более 200 графических файлов)
В частности, в этой памке находятся
bg. gif – фоновая картинка страниц сайта (если её нет – цвет фона задаётся инструкцией #bgcolor=…)
by. gif – чёрно-жёлтый маркер, используемый в режиме редактирования для выделения начала блока
space. gif – прозрачный пиксель.
3. Настройки планировки страниц
<название параметра> => <значение по умолчанию>
каздый параметр задаётся строкой в поле adds записи в таблице pages базы данных
параметры, выделенные красным имеют самостоятельные поля в этой таблице, инструкции остальных параметров располагаются в поле adds – каждая инструкция начинается с символа # и располагается на отдельной строке.
Названия помеченные * имеют поле настройки в редакторском режиме, остальные редактируются только администратором сайта в поле adds (оно видно только администратору) или из админки
настройки могут быть заданы для отдельной страницы (для ленты – задаются целиком для ленты – для всех страниц ленты разом – в головной странице ленты) или для всего сайта сразу (в разделе «глобальные настройки сайта»). Настройки, заданные на странице имеют приоритет над одноимёнными настройками сайта.
*pagetit => ‘Новая страница’ – название страницы
*comment = ‘’ - короткий текст (подзаголовок страницы), который отображается и на странице
и на карте сайта.
script => ’’ – название скрипта для формирования страницы. Если название начинается с g3_ или e_ то скрипт ищется в директории g3, иначе – в директории g3_common
*redir =>'', - URL страницы, куда производится редирект (адрес страницы, открываемой вместо данной)
*redirtim =>0 – время в сек, после которого производится редирект,
*fl_totop => 1 <0 | 1> – включает ссылку на страницу выше ( размещается над названием страницы)
fl_access=>0 <0|1> - если параметр >0 – то для просмотра страницы требуется ввод логина и пароля
adds=>’’ – поле для записи остальных параметров – параметры вписываются в виде:
#<имя>=<значение> ; <комментарий>
WINDOW_<*****> - имя скрипта, формирующего контент окна <*****> шаблона (NULL – окно не выводится)
description =>’’ – содержание тега «description» для случаев, когда движок не может самостоятельно сформировать его содержание из контента страницы (это бывает всегда со страницами, формируемыми специальными скриптами)
pagetyp =>’htm’ – окончание адреса страницы, на которое отзывается движок сайта
fl_showautor =>1 <0|1> - показ автора внизу страницы (показ логина пользователя, создавшего страницу),
top=>'top.e', - имя файла в директории g3_common. который выводится до контента страницы.
bottom =>'bottom.e' - имя файла в директории g3_common. который выводится после контента страницы.
tpl => ‘’ – имя файла шаблона страницы (в директории g3_templates). Если установлена эта переменная, то переменные top и bottom игнорируются.
*menu_l =>'' – название файла скрипта для отображения меню слева,
menu_l_h =>999 – высота колонки меню слева (в блоках, считаются только блоки, имеющие признак «с новой строки»),,
menu_l_w =>200px – ширина колонки меню слева (в пикселях),
*menu_r =>'',
menu_r_h =>999,
menu_r_w=>200px – ширина колонки меню справа (в пикселях),
*menu_t =>'',
*menu_b =>'',
bgcolor=>'#ffffff', - цвет фона страницы (если есть файл bg. gif, то параметр игнорируется)
editcolor =>'#ffffff', - цвет фона страницы при редактировании
contentbg =>'',
*submenu => 0 <0|1|2|3> – включает меню (список с возможностью перехода) вложенных подстраниц сверху или снизу контента страницы (0-нет,1-снизу, 2-сверху, 3-в обоих местах)
*line => 0 <0/1>- - включает/выключает отображение горизонтальной линии между блоками
*oglav => 0 <0/1>- включает/выключает отображение списка названий блоков страницы (оглавления)
с гиперссылками для перехода между блоками.
timeout =>1800, - время блокировки редактируемой страницы (сек)
cash => 0 <0/1> - включает кеширование страницы на хосте – при выдаче страница каждый раз не переформируется, а берётся их Кеша. Кеш очищается при редактировании любой страницы.
forprint => 1 <0/1> - включает отображение ссылки «страница для печати» в конце каждой текстовой страницы
antibrut_t => 600 – время в течении которого фиксируются все обращения авторизации для предотвращения брутфорса,
antibrut_c => 5 – количество допустимых попыток авторизации в течении времени antibrut_t
Настройка обработки фотографий
*res1 =>'300x300' – размер для ресайза - размер в который преобразуется для отображения большая фотография при загрузке – для первой фотографии на странице,
*res2 =>'200x200' – тоже, но для всеx остальных фото страницы,
autoresize = 1 <0/1> - автоматический ресайз малых картинок при загрузке, если их размер не вписывается в параметры res1 или res2
*fcomment =0 <1/0> - включает/выключает отображение подписей под фотографиями при раскрытии их
в отдельном окне
*fcomment2 =0 <1/0> - разрешает/запрещает любым посетителям сайта добавление подписей
под фотографиями (в отдельном окне).
addlogo = 1 <0/1/2> – автоматическое наложение логотипа на фотографии
0- выключено
1- по запросу
2- всегда (без запроса)
(файл логотипа должен иметь имя logo. png и находится в папке g3_common, если его нет, - считается что addlogo=0 )
addscript_foto =’’ – дополнительный скрипт, вызываемый в процедуру обработки при редактировании страницы, при условии, что была загружена фотография
foto_beg =>’ foto_beg. e’ и foto_end =>’ foto_end. e’ – имена файлов в папке g3_common, выводимых до и перед каждой фотографией контента, по-умолчанию – подгружаются файлы foto_beg.e и foto_end.e (если они присутствуют), на лентах или списках подстраниц этот параметр не используется.
foto_space =>4, - ширина пустого пространства справа/слева фото (учитывается только если foto_beg и foto_end не используются)
Настройки ленты (ленты новостей или фотогаллереи)
(для внутренних страниц ленты действуют также все вышеперечисленные настройки)
* spisok => '•'
*dates => 1 <0/1/2/3>
*fotokol => 9999
*fotosize => 100 – размер фото на ленте (в пикселях)
*fotoalign => 0 <0/1/2> - расположение фото на ленте – справа(=0), - над(=1), или справа(=2) от заголовка новости
*group => 10 – количество новостей на одной странице ленты
* frag => 100 – длина фрагмента текста, отображаемого на ленте
foto_beg_l =>’’ и foto_end_l =>’‘ – имена файлов в папке g3_common, выводимых до и перед каждой фотографией на ленте, по-умолчанию – отсутствует
selector=>’selector. e’ – имя файла, содержащего код разделителя новостей (вставляется между новостями). Если файла нет – параметр игнорируется
deffoto =>’’ – картинка, отображаемая на ленте, если на странице нет фотографий
more => ‘ещё новости >>>’
morefrag => ‘читать далее >>>’
Настройки только для фотогаллереи:
*kolvstr => 5 - количество фотографий на строке фотогаллереи
*kolnstr =>4 - количество строк фотографий на странице фотогаллереи
при авторесайзе используется параметр res2
Настройки только для почтовой страницы:
*mail => ‘’ – список адресов для отправки
*pole => ‘80x6’ – размер поля для текстового сообщения
Настройка представления текста контента (заголовков страниц, заголовков блоков и текста блоков) осуществляется путём редактирования таблицы стилей, что также относится к полномочиям администратора.
При создании подстраниц, для них автоматически создаются («наследуются») инструкции «материнской страницы».
4. Настройки планировки блоков
Как уже говорилось, весь контент делится на логические блоки.
Любой блок может содержать в себе:
- заголовок блока, фотографию блока, объект, вызываемый по клику на фотографии (при отображении страницы не виден), текст блока.
Любой из этих элементов (или все вместе) может отсутствовать
5. Варианты компоновок страниц, поддерживаемые CMS-ZIV-3.
Тип 1. «Обычные страницы»
Тип 2. «Лента новостей»
Тип 3. «Фотогалерея»
Тип 4. «Голосования или опросы»
Тип 5. «Карта сайта»
Тип 6. «Гостевая книга»
Тип 7. «Почтовая форма»
Стили страниц описываются в файле с названием css. css – в нём обязательно должны быть объявлены стили
- ‘content’ – стиль основного содержания страницы, стиль тегов table и td по-умолчанию
- ‘title’ - стиль заголовков страниц (названий страниц).
- ‘title2’ – стиль заголовков блоков (абзацев, разделов страницы)
- price1
- price2
Эти стили используются «по-умолчанию». Кроме этих разработчик может использовать на странице любые другие стили, но их требуется объявлять явно при написании контента.
5.1. «Обычные страницы»
1.1. Описание
Страница состоит из отдельных логических блоков. Каждый блок состоит из следующих объектов:
- заголовка (стиль заголовка – title),
- комментария к заголовку страницы (только для самого верхнего блока, стиль – контент)
- текста (стиль – content),
- фотографии в тексте,
- фотографии, или другого объекта, раскрывающегося в новом окне при клике на фотографии в тексте (это может быть документ Word, Excel, архив, видеоролик или пр.).
Любой один или несколько этих объектов (или все сразу) могут отсутствовать.
Количество блоков на странице – до 999.
1.2. Создание страницы данного типа
Данный тип страницы является типом «по умолчанию» и применяется если в записи страницы (таблица базы “pages”) в поле “script” не указано имя скрипта.
1.2.1.Корневые страницы сайта (уровень=1) – создаются только администратором сайта через админку сайта.
1.2.2.Все остальные страницы (уровень >1) – могут быть созданы в процессе редактирования страницы более высокого уровня – для этого необходимо заполнить поле «создать подстраницу» (задать имя подстраницы) и сохраниться. При этом будет создана сама подстраница и к концу текущего блока текста будет добавлена текстовая ссылка для перехода на неё. Если эта ссылка не нужна – например включен показ списка подстраниц – то её следует просто удалить.
1.3 Настройки страницы редактором, редактирование/добавление информации на странице
В процессе редактирования страницы возможны следующие настройки:
- добавить новый блок перед любым блоком или в конец страницы,
- удалить любой блок.
- блок оформить как отдельный или нет – отдельный блок начинается и заканчивается новой строкой, иначе - текст блока начинается в той же строке, где закончился предыдущий блок.
- выравнивание текста блока - по правому краю, по левому краю или по ширине,
- выравнивание фотографии в тексте - по правому краю, по левому краю или по центру (если фотография выравнивается по центру, то она располагается на отдельной строке)
- к каждой фотографии можно подгрузить объект, который будет раскрываться в отдельном окне при клике на фотографию (это может быть увеличенная фотография, документ Word. Exсel или любой другой произвольный файл).
- к каждой увеличенной фотографии можно сделать подписи, причём можно разрешить/запретить просмотр или добавление своих подписей посетителями сайта;
- включить/выключить горизонтальную линию между блоками.
- включить/выключить отображение списка блоков на странице (с гиперссылками для перехода внутри страницы)
- включить/выключить переадресацию на другую страницу
- создать «подстраницу» и ссылку на неё – папка новой страницы будет создана в папке текущей страницы, ссылка на новую страницу будет добавлена в конец текущего блока, новая страница будет наследовать все настройки родительской.
- отредактировать порядок выдачи подстраниц в списке подстраниц или «выключить» отдельные подстраницы
5.2. «Лента новостей»
5.2.1. Описание
«Лента новостей» состоит из списка заголовков (названий) новостей, упорядоченного по датам и отдельных страниц собственно новостей.
Страница каждой новости - «обычная» страница, на ней действуют все возможности и настройки «обычных» страниц.
Страница списка новостей формируется автоматически.
Количество новостей на ленте новостей и количество новостей за один день – ничем не ограничено (точнее максимальное количество новостей = 1 000 000, т. к. используется шестизначная нумерация).
На сайте может быть несколько лент новостей на разных страницах.
5.2.2. Создание страницы данного типа
Корневая страница ленты новостей создаётся администратором сайта.
#script=g3_news. php
5.2.3 Редактирование/добавление информации на странице
На странице списка новостей в режиме редактирования можно добавить новую новость (создать страницу для новости) или удалить существующую. При удалении новости реально не удаляются а только помечаются как удалённые и не отображаются
При входе на любую новостную страницу в режиме редактирования исправления осуществляются также, как и на обычных страницах.
5.2.4. Настройки страницы
Настройки списка новостей:
- добавить/удалить новость
На страницах новостей действуют все настройки обычных страниц (см п.1.3), кроме создания подстраниц.
5.3. «Фотогалерея»
5.3.1. Описание
«Фотогалерея» состоит из списка заголовков (названий) фотоальбомов, упорядоченного по датам и отдельных страниц с фотографиями - «фотоальбомов».
Каждый альбом - это один блок из «обычной» страницы и до 999 фотографий – альбом может состоять из одной или нескольких страниц (определяется настройками галереи и количеством фотографий в альбоме).
Страница списка альбомов формируется автоматически.
Максимальное количество альбомов в галерее и максимальное количество альбомов за один день = 1 000 000 (т. к. используется шестизначная нумерация фотоальбомов).
Максимальное количество фотографий в каждом альбоме – 999.
На сайте может быть несколько фотогаллерей на разных страницах (например на сайте ***** их две – страница «фотогалерея» и страница «площадки»).
5.3.2. Создание страницы данного типа:
#script=e_foto.php
5.3.3 Редактирование/добавление информации на странице
На странице списка альбомов в режиме редактирования можно добавить новый альбом или удалить существующий, задать настройки фотоальбомов (единые для всех альбомов). При удалении альбомы реально не удаляются а только помечаются как удалённые и не отображаются.
Добавление фотографий осуществляется с помощью специальной страницы в справочной системе сайта. При этом требуется самостоятельно подготовить пары фотографий (маленькая-большая) и указать их в поля формы, либо указать только большие фотографии (маленькие фотографии-превью будут созданы автоматически).
5.3.4. Настройки страницы
В режиме редактирования можно задать следующие настройки:
единые значения для всех альбомов:
- количество фотографий в строке фотогаллереи,
- количество строк фотографий на странице
- размер маленькой фотографии для автоматической закачки на сайт,
- размер увеличенной фотографии для автоматической закачки на сайт,,
независимые настройки для каждого фотоальбома:
- задать текст, отображаемый на каждой странице фотоальбома,
- задать выравнивание текста на странице
- разрешить/запретить добавление подписей к фотографиям посетителями сайта
- разрешить/запретить просмотр подписей к фотографиям посетителями сайта
5.4. «Голосования или опросы»
5.4.1 Описание
5.4.2 Создание/удаление страницы данного типа
#script=g3_vote. php
5.4.3 Редактирование/добавление информации на странице
В режиме редактирования разрешается:
- создавать новые опросы (при этом старые опросы можно будет только просматривать, редактирование и голосование по ним блокируется)
- добавлять/удалять/редактировать вопросы
В обычном режиме: можно просматривать архив голосований (опросов)
4.4 Настройки страницы
- список вопросов последнего (активного опроса)
5.5. «Карта сайта»
5.5.1. Описание
Автоматически создаёт и отображает перечень страниц сайта (за исключением страниц, находящихся под управлением скриптов «Новости» и «Фотогалерея» (на этих страницах есть свои каталоги).
Для каждой страницы отображается её название и комментарии к названию.
5.5.2. Создание/удаление страницы данного типа
#script=g3_mapsite. php
Кроме этого, карта сайта автоматически выдаётся (даже если администратор и не создавал такую страницу) в том случае, если посетителем сайта была запрошена страница, отсутствующая на сайте.
5.5.3 Редактирование/добавление информации на странице
Содержимое страницы не редактируется.
5.5.4. Настройки страницы
Настроек нет.
5.6. «Гостевая книга»
5.6.1 Описание
5.6.2. Создание/удаление страницы данного типа
Администратором сайта создаётся папка с произвольным названием (начинающимся с цифр), в файле 000.e в этой папке записывается строчка:
#script=e_guest. php
5.6.3 Редактирование/добавление информации на странице
5.6.4 Настройки страницы
- название страницы
- комментарии к названию страницы
- разрешение/запрет добавления сообщения посетителями сайта
- количество гостевых записей на странице
- включить/выключить разделитель гостевых записей
- показывать/не показывать время добавления записей
- ширина поля для даты (настраивается в зависимости от фонта)
5.7. «Почтовая форма»
5.7.1 Описание
5.7.2. Создание/удаление страницы данного типа
Администратором сайта создаётся папка с произвольным названием (начинающимся с цифр), в файле 000.e в этой папке записывается строчка:
#script=e_mail. php
5.7.3 Редактирование/добавление информации на странице
5.7.4 Настройки страницы
- название страницы
- комментарии к названию страницы
- адрес (e-mail) или список адресов, на которые будет отправлено письмо
- размер поля (окошка) для написания сообщения (ширина-символов х высота-строк)
- максимальное количество символов в письме
6.Компоненты страниц («кирпичи» для создания нестандартных страниц)
Компоненты страниц – подпрограммы-функции, которые программист - разработчик сайта может встраивать в свои программы отображения страниц.
e_spisok – отображение и редактирование списка подчинённых страниц в фотогаллереях и лентах новостей($struct,$http,$u,$flaged=0,$kolnews=
$style='title2',$style2='content',$dates=2,$arh=1,$title2='',
$fotokol=0,$fotosize=100,$fotoalign='left’)
e_subdirs – отображение списка подчинённых страниц и навигация по ним.($struct,$http,$style='',$style2='',$border='',$title='')
$struct – массив структуры страниц сайта
$http – адрес страницы, для которой выдаётся список
$style.$style2 – классы стилей соответственно строки заголовка и строк контента – по умолчанию = ‘title’ и ‘content’
$border – название группы файлов рамки вокруг меню
$title – название отображаемого списка подстраниц, если оно должно отличаться от заголовка материнской страницы
Если $title=’-‘ – строка заголовка материнской страницы не отображается
e_subdirs2 – отображение двухуровнего списка подчинённых страниц
3. e_vote – отображение формы для голосования (вопроса и вариантов ответов) – врезается как правило на главную страницу сайта.
e_fastmap – отображение окошка для быстрого перехода по сайту e_randfoto – отображение случайного фото сайта e_plaintext – переформатирование текста – вырезание спец. символов, тегов, обрезка до заданной длины e_load – загрузка текста на страницу с отработкой служебных вставок picture – отображение картинки, раскрывающейся в увеличенную в новом окнеОПИСАНИЕ ЕЩЁ НЕ ЗАКОНЧЕНО!!!


