русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Построение системы управления содержимым

Системы управления содержимым очень эффективны для Web-сайтов, где содержимое поддерживается не только одним автором, либо сопровождение осуществляет не технический персонал, либо содержимое и графическое оформление разрабатывается различными людьми или отделами.

Мы создадим приложение, помогающее уполномоченным пользователям управлять интеллектуальной собствен­ностью организации в электронном виде.

Требования к проекту.Необходимо создать систему, которая:

· Увеличивает продуктивность работы, позволяя авторам сконцентрироваться на статьях, а дизайнерам — на оформлении

· Позволяет редактору просматривать статьи и выбирать их для публикации

· Создает единообразное восприятие сайта с помощью шаблонов страниц

· Предоставляет авторам доступ только к предназначенным для них областям сай­та

· Позволяет легко изменять оформление любого раздела либо всего сайта

· Предотвращает изменение нового содержимого

Редактирование содержимого.Во-первых, необходимо продумать способ ввода содержимого в систему, а также методы его хранения и редактирования. Требуется выбрать метод передачи компонентов статей и оформления. Существует три возможности.

1. FTP. Авторам и дизайнерам можно предоставить FTP-доступ к областям Web-сервера. Это позволит им загружать на сервер файлы со своих локальных компьютеров. Для загружаемых файлов потребуется выработать строгий стандарт именования (для идентификации принадлежности изображений к статьям). Вместо этого можно применить основанную на Web систему, которая будет осуществлять идентификацию независимо от FTP-загрузки. Использование FTP создает проблему допусков. Необходимая для данного примера гибкость не позволяет использовать FTP для предоставления пользователям возможности загружать файлы.

2. Метод загрузки файлов. HTTP-протокол предоставляет метод загрузки файлов при помощи Web-браузера. Язык РНР позволяет решать эту задачу очень просто. Кроме того, метод загрузки файлов дает возможность хранить текст в базе данных вместо файлов. Для этого выполняется чтение во временный файл и сохранение его содержимого в базе данных, а не копирование в другую область файловой системы. Метод загрузки файлов в этом проекте не используется.

3. Интерактивное редактирование. Пользователи могут создавать и редактировать документы без участия FTP либо другого метода загрузки файлов. Вместо этого авторам можно предоставить в окне боль­шое текстовое поле, в котором они смогут редактировать содержимое статей. Этот метод прост, но часто эффективен. Web-браузер не предоставляет каких-либо возможностей редактирования текста, кроме функций копирования и вставки, прису­щих операционной системе. Однако, когда требуется внести лишь небольшое измене­ние, например, исправить орфографическую ошибку, это можно осуществить очень быстро. Как и для метода загрузки файлов, данные формы можно записать в файл либо сохранить в базе данных.

Преимущество баз данных перед файлами для хранения содержимого.На начальном этапе необходимо принять важное решение относительно метода хранения содержимого после его загрузки в систему.

Поскольку совместно с текстом хранятся метаданные, мы решили поместить текстовую часть содержимого в базу данных. Хотя MySQL способен хранить мультимедийные данные, принято решение хранить загружаемые изображения в файловой системе. Использование большого двоичного объекта (BLOB) в базе данных MySQL может снизить быстродействие.

В базе данных будут храниться лишь имена файлов изображений. Дескриптор <IMG SRC> может прямо ссылаться на каталог графических файлов обычным образом.

Когда объем данных велик, важно оптимизировать их хранение. Подобно тому, как эффективность базы данных зависит от правильной индексации, файловая система существенно выигрывает от хорошо продуманной системы каталогов.

Рис. 6.1. Структура каталогов для загрузки файлов

В данном случае файловая система содержит каталоги, представляющие первую букву каждого имени файла. Таким образом, файлы распределены по 26 каталогам. Это существенно ускоряет доступ по сравнению с ситуацией, когда все файлы хранятся в одном каталоге. Важно отметить, что имена файлов должны генерироваться сценарием обработки загрузки таким образом, чтобы гарантировалась их уникальность.

Структура документов.В качестве примеров статей будет использоваться краткий текст новостей, включающий один-два абзаца и единственное изображение. Он предназначен для тех, кто спешит. Подобные документы с заголовком, абзацами и иллюстрацией можно считать структурированными. Чем выше степень структурирования документа, тем проще его разбить на составляющие, хранимые в базе данных. Преимущество такого подхода состоит в возможности единообразного структурированного представления документов.

В качестве примера возьмем статью новостей. Заголовок будет храниться в своем поле отдельно от текста. Изображение по своей природе является отдельным компонентом документа. Поскольку заголовок является отдельным элементом, для его отображения можно задать стандартный шрифт и стиль, а также легко отделить заголовок от остальной части статьи, сформировав главную страницу заголовков.

Для крупных документов можно применить к отдельным абзацам отношение один ко многим. Другими словами, каждый абзац будет храниться в отдельной строке базы данных и иметь связь с идентификатором главного документа. Этот вид динамической структуры документа позволит представлять страницу содержания для каждого документа и отображать каждый раздел независимо либо отображать документ целиком.

Использование метаданных.Уже решено, что запись для каждой статьи содержит заголовок, текст и изображение. Однако ничто не мешает хранить в той же записи другие данные. Система автоматически вставляет значения, описывающие авторство статьи и вре­мя ее последней модификации. Они могут автоматически отображаться в нижней части статьи и служить подписью и меткой времени, избавляя автора от необходимости добавления этой информации. Кроме того, иногда полезно добавлять неотображаемые данные, называемые метаданными. Хорошим примером служит хранение ключевых слов, которые будут использоваться в качестве индексов поискового механизма.

Поисковый механизм будет извлекать ключевое слово для каждой статьи и на его основе определять соответствие критериям поиска. Это устраняет необходимость сканирования всего текста каждой статьи. Администратор сайта сможет управлять соответствием ключевых слов и фраз определенным документам.

В нашем примере допускается связывать со статьей любое количество ключевых слов, а также присваивать каждому ключевому слову "весовое" значение, указывающее степень его значимости в диапазоне от 1 до 10.

Затем можно разработать алгоритм поискового механизма, который располагает со­ответствия статьям согласно человеческой шкале значимости. Это заменит сложный алгоритм, который интерпретирует английский текст и принимает решения в зависимости от своего ограниченного понимания, а также управляется фиксированными правилами.

Метаданные должны храниться в базе данных. Можно использовать HTML-дескриптор <МЕТА> либо даже применять XML для создания документов. Однако лучше при любой возможности воспользоваться преимуществами базы данных для управления документами.

Форматирование вывода.В нашем примере сайта новостей страницы отображаются в простом, но структурированном формате. Каждая страница содержит ряд статей, сформатированных одинаково. Прежде всего, заголовок выводится крупным шрифтом, внизу слева отображает фотография, а справа — текст статьи. Страница целиком содержится в стандартном шаблоне страниц, что создает последовательность в оформлении сайта.

<TABLE> <TR><TD COLSPAN=2>TOP ВАR</ТD></TR>
<TR><TD> Side menu </TD><ТD> MAIN CONTENT CELL </TD></TR> </TAВLЕ>

Рис. 6.2. Логическая структура страницы.

Этот вид компоновки крайне популярен — сколько сайтов вы регулярно посещаете, где панель меню расположена слева, а ссылки быстрого доступа вверху? При этом средства навигации остаются неизменными независимо от просматриваемой страницы.

Реализация структуры шаблонов, подобной той, что используется для оформления страниц, очень проста. В HTML-коде можно найти дескриптор <TD>, начинающий ячейку главного содержимого. В этом месте HTML-код расщепляется на два файла. Первая половина составляет файл заголовка, а вторая — нижний колонтитул. Когда отображается страница, сначала выводится заголовок, затем текст и, наконец, нижний колонтитул.

Реализация сайта с шаблоном заголовка и нижнего колонтитула позволяет модифицировать оформление сайта, изменяя файлы шаблонов.

РНР предоставляет две опции конфигурации, которые удобны в данной ситуации. Можно определить для каждого каталога директивы auto_prepend_file и auto_append_file, которые указывают файлы, подключаемые до или после выполнения любого сценария.

Однако существуют некоторые ограничения. Если существуют сценарии, которые не генерируют вывод и отправляют заголовок переадресации, такой как

<? header("Location: destination.php"); ?>

файлы заголовка и нижнего колонтитула будут отображаться, а переадресация не произойдет, поскольку вывод уже отправлен в Web-браузер. Это также создает проблемы с cookie-наборам и встроенными функциями управления сеансами РНР 4, поскольку cookie не будет правильно функционировать после отправки вывода Web-браузеру.

Управление изображениями.Авторы могут дополнять статьи своими фотографиями. Нам необходимо единообразие оформления, но что произойдет, когда один автор загрузит крупное изображение высокого качества, а другой — свернутую в пиктограмму картинку?

Исходя из предположения, что изображения в основном представляют собой фотографии, можно ограничиться лишь форматом JPEG и воспользоваться РНР-функциями для управления графикой.

Напишем небольшой сценарий resize_image.php, который на лету изменяет размер изображений, в результате чего они могут отображаться с помощью дескриптор <IMG SRC>. Сценарий приводится в листинге 6.21.

Листинг 6.21. Сценарий resize_image.php изменяет размеры JPEG-изображения "на лету"

<?

if (!$max_width) $max_width = 150;

if (!$max_height) $max_height = 100;

$size = GetImageSize($image); $width = $size[0]; $height=$size[l];

$x_ratio = $max_width / $width; $y_ratio = $max_height / $height;

if ( ($width <= $max_width) && ($height <= $max_height) )

{ $tn_width = $width; $tn_height = $height; }

else if (($x_ratio * $height) < $max_height)

{ $tn_height = ceil($x_ratio * $height); $tn_width = $max_width; }

else {$tn_width=ceil($y_ratio * $width); $tn_height=$max_height; }

$src = ImageCreateFromJpeg($image);

$dst = ImageCreate($tn_width,$tn_height);

ImageCopyResized($dst, $src, 0, 0, 0, 0,

$tn_width,$tn_height,$width,$height);

header("Content-type: image/jpeg"); ImageJpeg($dst, null, -1);

ImageDestroy($src); ImageDestroy($dst);

?>

Этот сценарий принимает три параметра — имя файла изображения, максимальную ширину и высоту в точках. Не стоит полагать, что если указан максимальный размер 200 х 200, изображение будет масштабировано в соответствии с этими значениями. Его масштаб будет уменьшен пропорционально таким образом, чтобы указанные максимальные размеры не превышались. Например, изображение размером 400 х 300 будет уменьшено до размера 200x150. Таким образом достигается сохранение пропорций изображения.

Изменение размера изображения на сервере предпочтительнее, чем простое задание атрибутов HEIGHT и WIDTH в дескрипторе <IMG SRC>. Размер большого изображения с высоким разрешением может составлять несколько мегабайт. Если же картинку уменьшить до приемлемых размеров, ее размер может не превышать 100 Кб. Нет надобности загружать файл большого размера, а затем указывать браузеру изменить размер изображения.

Здесь используется функция ImageCopyResized() для масштабирования изображений на лету. Суть операции изменения размера состоит в вычислении новых параметров ширины и высоты. Определяется соотношение между реальными и максимальными размерами. Параметры $max_width и $max_height могут быть переданы в одной строке запроса. Иначе будут использованы стандартные значения, указанные в верхней части листинга.

$x_ratio = $max_width / $width; $y_ratio = $max_height / $height;

Если изображение уже меньше указанных максимальных размеров, его ширина и высота остаются неизменными. В противном случае будет использован коэффициент X или Y для равного масштабирования обоих размеров, чтобы изображение уменьшенного размера не оказалось растянутым либо сплющенным:

if ( ($width <= $max_width) && ($height <= $max_height) )

{ $tn_width = $width; $tn_height = $height; }

else if (($x_ratio * $height) < $max_height)

{$tn_height = ceil($x_ratio * $height); $tn_width = $max_width; }

else {$tn_width=ceil($y_ratio * $width); $tn_height=$max_height; }

Обзор проекта.В табл. 6.9 содержится перечень файлов данного приложения.

Просмотров: 2212


Вернуться в оглавление



Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.