В последнее десятилетие благодаря бурному развитию Интернета прогрессирует и Web-программирование. Каждая уважающая себя компания уже имеет свое Web-представительство.
Web-представительство представляет собой некое информационное описание компании во всемирной паутине. По сути, это просто сайт компании или какого-либо общества или просто магазина, на котором можно разместить любую важную для представителя информацию. Благодаря этому любой пользователь сети Интернет может ознакомиться с необходимой ему информацией в любое время суток и из любой точки земного шара. С помощью таких представительств, производители получают возможность общения непосредственно с потребителями, так называемая обратная связь, что дает возможность учесть все замечания и пожелания, а также улучшить и развить свою деятельность. Это в свою очередь повышает эффективность работы компании, делая ее работу более налаженной, прибыльной и в современном стиле. Также необходимо отметить безграничные возможности в рекламной сфере, так как это существенно дешевле прорекламировать свою компанию ,чем например на телевидение или радио. Любая компания здесь может создать свой имидж и уверенно конкурировать на рынке и многое другое. В целом Интернет технологии достигли больших высот и на данном этапе просто являются необходимыми и нужными обществу.
Web-представительство — это виртуальный офис, где посетитель найдет информацию о компании, формы для оформления заказов, возможность осуществления электронных платежей, онлайн-консультации, подписку на рассылки и множество других полезных для ведения бизнеса сервисов. Наличие фирменного стиля (логотип компании, корпоративные цвета, элементы дизайна, ассоциирующиеся с деятельностью компании) в дизайне — отличительная черта Web-представительств.
Целей создания Web-представительства может быть очень много. Например, сайт может являться просто визитной карточкой, элементом фирменого стиля. Также сайт может способствовать продвижению торговой марки, продукции и услуг — создание интернет-магазина. Сайт может быть эффективным инструментом, который организует работу между клиентами и партнерами, между сотрудниками одной или нескольких корпораций, так называемый — внутрикорпоративный сайт.
Задачи которые решаются при наличии Web-представительства:
Разработка корпоративного сайта для ООО ‘Семейная аптека’
... сайта. Разработка сайта Тестирование сайта . Экономическое обоснование целесообразности создания сайта. Объектом исследования дипломного проекта является фирма ООО «Семейная Аптека», а предметом - разработка корпоративного сайта ООО «Семейная Аптека». Методы исследования. Методы работы ... данного вида продукции. Возможность через WEB-сайт просматривать прайс-лист компании, узнать о проходящих ...
- оповещание своих клиентов о новинках, интересных для них событиях;
- сохранение справочной информации для своих потенциальных или уже существующих клиентов, либо для сотрудников одной корпорации;
- прием заказов на товары и услуги;
- осуществление электронных платежей.
1.
АНАЛИТИЧЕСКАЯ ЧАСТЬ
1.1 Технико-экономическая характеристика предметной области
В данной курсовой работе мы создали Web-представительство компании по производству металлопластиковых, алюминиевых, деревянных окон “Super Windows”,что является нашей предметной областью. Сайт находится по адресу http://www.super-windows.com на локальном сервере компьютера.
“Super Windows” — фабрика окон по производству металлопластиковых, алюминиевых, деревянных окон с разветвленной сетью собственных салонов по продаже окон ПВХ в Москве. “Super Windows” на рынке c 2010 года. Целями деятельности компании являются расширение рынка окон и получение прибыли.
Предметом деятельности “Super Windows” является производство окон. Компания сотрудничает с такими мировыми брендами по производству профилей : REHAU, KBE, SALAMANDER, GPS и другие.
В соответствии с учредительными документами, предприятие может осуществлять следующие виды деятельности:
- оптовая торговля;
- розничная торговля.
Продукция, которую реализует предприятие “Super Windows” для производства металлопластиковых окон и основные характеристики предоставлены в таблице 1.1.:
Таблица 1.1.
Реализуемая продукция для металлопластиковых окон
Наименование продукции |
Артикул |
Системная глубина, мм |
Кол-во камер |
Система климат контроль |
Максимальная толщина стеклопакета, мм |
|
Профиль REHAU EURO DESIGN 60 |
123098 |
60 |
3 |
+ |
33 |
|
Профиль REHAU EURO DESIGN 60 |
654689 |
60 |
4 |
— |
38 |
|
Профиль REHAU EURO DESIGN 70 |
589168 |
70/115 |
5 |
+ |
42 |
|
Профиль REHAU Brillant-Design |
789125 |
70 |
05/06/12 |
+ |
40 |
|
Профиль REHAU GENEO |
554551 |
86 |
6 |
+ |
48 |
|
Реализуемая продукция для производства алюминиевых окон предоставлена в таблице 1.2.:
Таблица 1.2.
Реализуемая продукция для алюминиевых окон
Наименование продукции |
Артикул |
Диаметр |
|
Прутки алюминиевые для сварки |
345765 |
4 |
|
Пруток круглый алюминиевый |
545555 |
6 |
|
Реализуемая продукция для изготовления деревянных окон представлена в таблице 1.3.:
Таблица 1.3.
Реализуемая продукция для деревянных окон
Наименование продукции |
Артикул |
Толщина, мм |
Ширина, мм |
Длина,мм |
Сырье |
|
Брус оконный 1-я категория |
548AS2 |
86 |
86 |
6160 |
сосна, дуб |
|
Брус оконный 3-я категория |
589478 |
70 |
70 |
5840 |
сосна |
|
Брус оконный 1-я категория |
236985 |
96 |
96 |
6390 |
дуб |
|
Брус оконный 3-я категория |
456789 |
82 |
115 |
6160 |
ясень |
|
Дополнительная реализуемая продукция для всех видов окон представлена в таблице 1.4.:
Таблица 1.4.
Виды дополнительной реализуемой продукции
Наименование продукции |
Артикул |
|
Ручка алюминиевая “Omega” |
456R |
|
Ручка алюминиевая с замком “Victoria” |
456135 |
|
Петля 100 мм обычная Белая |
745896 |
|
Петля 100 мм обычная Коричневая |
745897 |
|
Петля 75 мм обычная Белая |
5765258 |
|
Петля 75 мм обычная Коричневая |
5765259 |
|
ALUPLAST “для стеклопакета” |
345190 |
|
ALUPLAST “для премыкания” |
568062 |
|
ALUPLAST “для стеклопакета” HN |
375025 |
|
1.2 Экономическая сущность задачи
Экономической сущностью задачи «Разработка Web-представительства» является цель создания данной разработки. В нашем случае целью является увеличение реализации продукции, выход на международный рынок, расширение и увеличение производства окон, а также увеличение количества клиентов и подъем прибыли, разрешение задач малого товарооборота и возможность получения заказов на новые проекты.
1.3 Обоснование необходимости и цели использования вычислительной техники для решения задачи
Для существующей схемы организации характерны недостатки, устранение которых необходимо осуществить в разрабатываемом проекте:
- малое для эффективной работы предприятия число заказов на производимые работы, товары и сервис;
- запаздывание в работе поставщиков сырья и необходимых материалов;
- высокий уровень штрафных начислений и неустоек;
- низкая эффективность использования наличного оборудования и персонала;
- недостаток достоверной информации и сбои в ее обработке;
- недостаточная оперативность решений, снижающая качество и управляемость производства;
- низкая эффективность процедур сбора, обработки и регистрации всех форм используемой информации;
- несовершенство процедур накопления, обработки, резервирования, сохранения, а также защиты целостности и доступности информации при выдаче результатов по текущим задачам заказчику.
- ограниченная производительность оборудования в существующей схеме организации производства;
- ограниченная возможность определения показателей, необходимых при управлении производственным объектом из-за большой размерности задач и исходных данных.
Использование средств вычислительной техники позволит частично или полностью устранить перечисленные недостатки. Рассмотрим предполагаемый эффект от использования современных информационных технологий
Эффект от внедрения данного программного продукта состоит в сокращении времени, необходимого для расчета параметров конкретного заказа на продукцию и в повышении качества разрабатываемых проектов.
На выполнение заказа дается определенный срок, который в зависимости от объемов самого заказа может колебаться в пределах 7 — 14 дней, 1-2 из которых отводится на расчет, 2-4 на заготовку материалов и остальное время на изготовление заказа.
Качество разрабатываемых проектов обеспечивается за счет того, что проектировщику не нужно следить за правильностью математического расчета, и поэтому он может больше внимания уделять выбору технических характеристик разрабатываемого проекта, рассматривать различные варианты решения поставленной задачи.
Работа с программой возможна только посредством клавиатуры.
Для ее нормального функционирования не нужна дополнительная настройка операционной системы. Работа с программой не требует специальных навыков.
1.4 Постановка задачи
1.4.1 Описание технологий и языков программирования, используемых при разработке программы
Необходимо разработать информационный сайт для представления продукции и услуг. Пользователи должны иметь возможность просматривать позиции каталога, разделенные по категориям. Кроме того, заказчики должны иметь возможность выбирать позиции из каталога с целью дальнейшего приобретения. Выбираемые позиции необходимо фиксировать. После завершения покупок выполняется обработка заказа, прием сведений для доставки.
Необходимо создать интерфейс администрирования. Администратор должен иметь возможность добавления, изменения и удаления данных о товарах. База данных содержит всю необходимую информацию, а приложение осуществляет необходимые операции с этой базой.
Для разработки будут использованы хорошо зарекомендовавшие себя программные продукты:
- сервер баз данных MySQL;
- web-сервер Apache;
- язык PHP.
1.4.2 Описание алгоритма и (или) функционирования программы
Алгоритм — это последовательность действий (правил), однозначно приводящих к решению поставленной задачи. Данный программный продукт является информационной системой, которая формируется на основе определенных данных, известных пользователю.
Входные и выходные данные формируются непосредственно в программе.
1.5 Анализ существующих разработок и обоснование выбора технологии проектирования
Главный инструмент это интегрированная среда разработка или IDE, которая позволит редактировать HTML, Javascript, CSS, PHP и будет поддерживать другие языки, например Python или Ruby. Очень мощным инструмент в руках программиста будет CMS Joomla. Достоинство этой CMS в том, что она позволяет наращивать любой функционал при помощи плагинов, которых очень много. Если планируется разрабатывать web-приложения на PHP, то можно использовать версии Joomla 1.5, Joomla 1.6, Joomla 1.7, Joomla 2.5. Joomla — система управления содержимым, написанная на PHP и JavaScript, для хранения баз данных использует MySQL.
Рекомендуется установить следующие плагины:
- ArtAdminer — компонент для работы с базой данных;
- System Debug — отображает отладочную информацию на сайте;
- Blog Ping — плагин позволяющий ускорить процесс индексации сайта;
- Joomla Magic Updater — автоматическое обновление версии;
- AJAX Toogler — существенно ускоряет работу админ панели сайта;
- Cashe Cleaner — очистка кеша.
Для выполнения данного проекта выбран движок Joomla 1.5.25
2. ПРОЕКТНАЯ ЧАСТЬ
2.1 Информационное обеспечение задачи
2.1.1 Информационная модель и ее описание
Информационное обеспечение Web-представительства выполняет задачу постоянного пополнения и обновления информации, поддержание базы данных, управление интерактивными системами сайта (новостные ленты, форумы, голосование, FAQ и т.д. ) .
Информационная модель Web-представительства представлена в виде диаграммы на рисунке 1:
Рис.1. Информационная модель Web-представительства
I этап.
На первом этапе создаются уникальные статьи, новые новости, акции, предложения компании.
II этап.
На втором этапе данные заносятся в административную панель управления сайтом.
III этап.
На третьем этапе данные перенаправляются в базу данных Mysite.
IV этап.
На четвертом этапе данные отправляются на сайт.
2.1.2 Характеристика базы данных
В данном курсовом проекте была создана база данных Mysite. Подключение к базе данных производится через веб-приложение phpMyAdmin.
PHPMyAdmin — веб-приложение с открытым кодом, написанное на языке PHP и представляющее собой веб-интерфейс для администрирования СУБД MySQL . С помощью данного веб-приложения можно осуществлять доступ к базам данных через браузер, отправлять SQL-запросы, просматривать и изменять содержимое базы.
Общие настройки базы данных:
Тип базы данных |
mysql |
|
Имя хоста |
localhost |
|
Логин |
mysite |
|
База данных |
mysite |
|
Структура базы данных
На рисунке 2 предоставлены таблицы контента. В них содержится информация о страницах, ключевые поля отдельных страниц, категории и секции в которых хранятся статьи.
Рис.2. Контент
На рисунке 3 показаны таблицы пользовательского управления. В них находится информация о зарегистрированных пользователях на сайте.
Рис.3. Пользовательское управление
На рисунке 4 находятся таблицы статистики. Содержит информацию, включающая в себя поисковое выражение и количество обращений к нему.
Рис.4. Статистика
Рис.5. Ссылки
На рисунке 6 изображена таблица с новостями.
Рис.6. Новости
На рисунке 7 таблицы которые содержат информацию о всех пунктах меню, модулях и компонентах подключенных к сайту.
Рис.7.Элементы и меню
Рис.8. Баннеры
На рисунке 8 находятся таблицы содержащие полную информацию о баннерах.
На рисунке 9 таблицы с информацией об опросах.
Рис.9. Опросы
На рисунке 10 расположена таблица с подробной информацией о зарегистрированных пользователях.
Рис.10. Детали контактов
Рисунок 11 содержит таблицы с информацией о всех электронных сообщениях.
Рис.11. Сообщения
2.2 Программное обеспечение задачи
2.2.1 Общие положения (дерево функций и сценарий диалога)
Дерево функций отправки новой информации на сайт представлено на рисунке 12.
Рис.12. Дерево функций
После запуска админ панели и ввода логина, пароля к системе, переходим на страницу добавления нового материала
Выбираем категорию и раздел в который хотим добавить товар сохраняем.
Выбираем необходимый подпункт меню в котором хотим вывести нашу статью и выбираем материал который мы создавали. Сохраняем и смотрим результат на странице сайта
2.2.2 Описание программных модулей
Все программные модули на сайте www.super-windows.com настраиваются через админ панель.
Модуль фотогалереи Simple Image Gallery
Simple Image Gallery выводит большое количество фотографий. Показывает эскизы всех изображений из каталога и при нажатии на них будут показываться в полный размер фото в лайтбоксе. Основные поля для заполнения: заголовок, позиция вывода модуля, выбор меню(для вывода в определенных категориях меню), Gallery Path (путь к фотографиям), Thumbnail Width (in px) и Thumbnail Height (in px) (ширина и высота эскиза)
Модуль авторизации на сайте
Этот модуль отображает форму авторизации на сайте. Основные необходимые настройки: заголовок, позиция, выбор меню.
Модуль голосования
Этот модуль представляет компонент голосований. Основные необходимые настройки: заголовок, позиция, выбор меню, выбрать вариант голосования из списка.
Модуль Кто онлайн
Модуль Кто онлайн отображает кол-во анонимных (Гостей) и зарегистрированных (тех, которые вошли) пользователей, которые сейчас присутствуют на сайте. Основные необходимые настройки: заголовок, позиция, выбор меню, из выпадающего списка выбрать кого отображать(из гостей/посетителей, имена посетителей, оба)(Рис.19).
Модуль Последние новости
Этот модуль отображает список самых последних опубликованных материалов. Основные необходимые настройки: заголовок, позиция, выбор меню, количество новостей, порядок показа
информационный программный web представительство
Программа вывода контактов и формы обратной связи
Для вывода на сайте контактной информации в первую очередь создается новый контакт. Вводится имя, должность, e-mail, адрес, телефоны, веб-сайт, настраиваются дополнительные необходимые параметры. После в необходимом подпункте меню подключается данный контакт и настраивается форма обратной связи.
2.3 Технологическое обеспечение задачи
Схема технологического сбора, обработки и передачи информации показана на рисунке 22:
Рис.22. Схема технологического сбора, обработки и передачи информации
Информация предоставляется в электронном виде. После поступления первичных данных производится проверка статей, текстов на уникальность и проверяется качество изображений. Если ошибок нет вводим данные в базу данных и выводим их на сайт. Выполняем последнюю проверку правильности внесенных данных. Если ошибок нет — конец, есть — вводим данные в БД заново.
3. ОБОСНОВАНИЕ ЭКОНОМИЧЕСКОЙ ЭФФЕКТИВНОСТИ ПРОЕКТА
Расчёт трудозатрат, связанных с разработкой программного продукта
Исходные данные
Предполагаемое число операторов 2000 Коэффициент сложности программы 1,25
Коэффициент коррекции программы в ходе ее разработки 0,05
Часовая заработная плата программиста, руб/ч 23 Стоимость машино-часа ЭВМ, руб/ч 4,6
Определение трудоемкости разработки программного продукта
Нормирование труда в процессе создания программного обеспечения затруднено в силу творческого труда программиста. Поэтому трудоемкость разработки может быть рассчитана на основе системы моделей с различной точностью оценки.
Трудоемкость разработки определяется следующим образом:
t = t 0 + tи + tа + tп + tотл + tд ,
где t 0 — затраты труда на подготовку и описание поставленной задачи (принимается равным 20), чел. ч.;
t и — затраты труда на исследование алгоритма решения задачи, чел. ч.;
t а — затраты труда на разработку блок-схемы алгоритма, чел. ч.;
t п — затраты труда на программирование по готовой блок-схеме, чел. ч.;
t отл — затраты труда на отладку, чел. ч.;
t д — затраты труда на подготовку документации по задаче, чел. ч.
Составляющие затрат труда определяются через условное число операторов в разрабатываемом ПО, в число которых входят операторы, которые необходимо написать в процессе работы над программой с учетом возможных уточнений в постановке задачи и совершенствования алгоритма.
Условное число операторов в программе определяется по формуле:
Q = qc(1+p) ,
где q — предполагаемое число операторов;
- c — коэффициент сложности программы;
- p — коэффициент коррекции программы в ходе ее разработки.
Q = 2000
- 1,25
- (1 + 0,05) = 2625
Затраты труда на изучение описания задачи определяются с учетом уточнения описания и квалификации программиста по формуле:
- где B — коэффициент увеличения затрат труда вследствие недостаточного описания задачи, B=1,2 … 1,5;
- k — коэффициент квалификации программиста, определяемый в зависимости от стажа работы по данной специальности. Он составляет при стаже работы до 2 лет — 0,8.
чел.ч.
Затраты труда на разработку алгоритма решения задачи определяются по формуле:
чел.ч.
Затраты труда на составление программы по готовой блок-схеме рассчитываются по формуле:
чел.ч.
Затраты труда на отладку программы на ЭВМ рассчитываются по формуле:
чел.ч.
Затраты труда на подготовку документации по задаче определяются по формуле:
t д = tдр + tдо ,
где t др — трудоемкость подготовки материалов к рукописи;
t до — трудоемкость редактирования, печати и оформления документации.
Трудоемкость подготовки материалов к рукописи рассчитывается как:
чел.ч.
Трудоемкость редактирования, печати и оформления документации определяется следующим образом:
чел.ч.
чел.ч.
Трудоемкость разработки программного продукта составляет:
чел.ч.
Расчет затрат на создание программного продукта
Затраты на создание программного обеспечения определяются по формуле:
K по = Ззп + Змв ,
где З зп — заработная плата разработчиков, которая рассчитывается следующим образом:
З зп = t ·Cпр ,
где t — общая трудоемкость разработки ПО;
С пр — средняя часовая заработная плата программиста.
З зп = 1272,25
- 23 = 29 261,75 руб.
З мв — стоимость машинного времени, необходимого для отладки программы на ЭВМ:
З мв = tотл
- Смч ,
где t отл — трудоемкость отладки программы на ЭВМ;
С мч — стоимость машино-часа ЭВМ.
З мв = 656,25
- 4,6= 3 018,75 руб.
K по = 29261,75 + 3018,75 = 32281,5 руб.
Определенные таким образом затраты на создание программного обеспечения являются капитальными затратами на создание автоматизированной системы.
Ожидаемая длительность разработки определяется по формуле:
где B к — число исполнителей;
F p — месячный фонд рабочего времени (при 40 часовой рабочей неделе Fp =176 часов).
мес.
Таким образом, ожидаемая длительность разработки составляет 7 месяцев.
ЗАКЛЮЧЕНИЕ
В этом проекте разработан сайт для Web-представительства. В качестве примера рассмотрена компания по производству металлопластиковых, алюминиевых, деревянных окон “Super Windows”.
Данный проект создавался с целью предоставления ознакомительной информации для клиентов компании. На сайте размещена информация про:
- металлопластиковые окна;
- алюминиевые окна;
- деревянные окна;
- цены на разные виды окон;
- контактная информация;
- информация о партнерах компании;
- полезная информация о выборе окон;
- последние новости в сфере окон;
- акции, новинки, интересные предложения для клиентов;
- Также предоставлена фотогалерея выполненных работ.
Практическая значимость работы состоит в создании сайта.
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ
[Электронный ресурс]//URL: https://inzhpro.ru/kursovaya/razrabotka-web-predstavitelstva/
1. Дунаев В.В., HTML, скрипты и стили 2-е издание. — СПб.: БХВ-Петербург, 2008. — 1024 с.
2. Джейсон Ленгсторф, Pro PHP and jQuery. — М.: Вильямс, 2011. — 334 с.
3. К. Дж. Дейт Введение в системы баз данных . — СПб.: Вильямс, 2006. — 1072 с.
4. Мишель Е., Дэвис и Джон А. Филлипс, Изучаем PHP и MySQL. СПб.: Символ-Плюс , 2008. — 442с.
5. Прохоренок Н., HTML, JavaScript, PHP и MySQL. Джентльменский набор Web-мастера, СПб.: БХВ-Петербург, 2010. — 900 с.
ПРИЛОЖЕНИЕ 2
1. configuration.php
<?php
class JConfig {
var $offline = ‘0’;
- var $editor = ‘tinymce’;
- var $list_limit = ’20’;
- var $helpurl = ‘http://help.joomla.org’;
- var $debug = ‘0’;
- var $debug_lang = ‘0’;
- var $sef = ‘0’;
- var $sef_rewrite = ‘0’;
- var $sef_suffix = ‘0’;
- var $feed_limit = ’10’;
- var $feed_email = ‘author’;
- var $secret = ‘OY8bWUBvjdKVlm22’;
- var $gzip = ‘0’;
- var $error_reporting = ‘-1’;
- var $xmlrpc_server = ‘0’;
- var $log_path = ‘Z:\\home\\super-windows.com\\www\\logs’;
- var $tmp_path = ‘Z:\\home\\super-windows.com\\www\\tmp’;
- var $live_site = »;
- var $force_ssl = ‘0’;
- var $offset = ‘0’;
- var $caching = ‘0’;
- var $cachetime = ’15’;
- var $cache_handler = ‘file’;
- var $memcache_settings = array();
- var $ftp_enable = ‘0’;
- var $ftp_host = ‘127.0.0.1’;
- var $ftp_port = ’21’;
- var $ftp_user = »;
- var $ftp_pass = »;
- var $ftp_root = »;
- var $dbtype = ‘mysql’;
- var $host = ‘localhost’;
- var $user = ‘mesite’;
- var $db = ‘mysite’;
- var $dbprefix = ‘jos_’;
- var $mailer = ‘mail’;
- var $mailfrom = ‘tokareva-tania@mail.ru’;
- var $fromname = ‘test1.ru’;
- var $sendmail = ‘/usr/sbin/sendmail’;
- var $smtpauth = ‘0’;
- var $smtpsecure = ‘none’;
- var $smtpport = ’25’;
- var $smtpuser = »;
- var $smtppass = »;
- var $smtphost = ‘localhost’;
- var $MetaAuthor = ‘1’;
- var $MetaTitle = ‘1’;
- var $lifetime = ’15’;
- var $session_handler = ‘database’;
- var $password = ‘12345’;
- var $sitename = ‘Super Windows’;
- var $MetaDesc = »;
- var $MetaKeys = ‘металлопластиковые окна’;
- var $offline_message = ‘В настоящее время сайт закрыт на техническое обслуживание.Пожалуйста, зайдите позже.’;
}
?>
2. index.php
<?php
defined( ‘_JEXEC’ ) or die( ‘Restricted access’ );
- JPlugin::loadLanguage( ‘tpl_SG1’ );
- define( ‘path’, dirname(__FILE__) );
- $app = JFactory::getApplication();
- $leftbar = 1;
- $rightbar = 1;
- ?>
- <!DOCTYPE html PUBLIC «-//W3C//DTD XHTML 1.0 Transitional//EN» «http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd»>
- <html xmlns=»http://www.w3.org/1999/xhtml» xml:lang=»<?php echo $this->language;
- ?>» lang=»<?php echo $this->language;
- $JPan = array(‘vzn’.’trf’,’zrah_yv.tvs’);
- ?>» >
- <head>
- <meta http-equiv=»Content-Type» content=»text/html;
- charset=utf-8″>
- <jdoc:include type=»head» />
- <link rel=»stylesheet» href=»<?php echo $this->baseurl ?>/templates/system/css/system.css» type=»text/css» />
- <link rel=»stylesheet» href=»<?php echo $this->baseurl ?>/templates/system/css/general.css» type=»text/css» />
- <link rel=»stylesheet» href=»<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/css/template.css» type=»text/css» />
- <link rel=»stylesheet» href=»<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/css/<?php echo $this->params->get(‘colorVariation’);
- ?>.css» type=»text/css» />
- <?php
$menu_name = $this->params->get(«menuName», «topmenu»);
- $menu_type = $this->params->get(«menuType», «splitmenu»);
- require(path .DS.»styleloader.php»);
- require(path .DS.»utils.php»);
- ?>
- <?php
if ($this->countModules(‘left’) == 0)
$leftbar = «0»;
- if ($this->countModules(‘right’) == 0)
$rightbar = «0»;
- if ($this->countModules(‘user1’) == 1)
$rightbar = «1»;
- if ($this->countModules(‘user2’) == 1)
$rightbar = «1»;
- ?>
- </head>
- <body>
- <div id=»wrapper1″>
- <a name=»up» id=»up»></a>
- <!— start header —>
- <div class=»wrapper_fixed»>
- <div id=»title»>
- <?php echo $mainframe->getCfg(‘sitename’) ;?>
- </div>
- <div id=»topnavi»>
- <?php if($mtype != «module») :
- echo $mainnav;
- else: ?>
- <jdoc:include type=»modules» name=»user3″ />
- <?php endif;
- ?>
- </div>
- <div id=»search»>
- <jdoc:include type=»modules» name=»user4″ />
- </div>
- <div id=»header»></div>
- </div>
- </div>
- <!— end top menu. —>
- <div id=»wrapper2″>
- <div class=»wrapper_fixed»>
- <div id=»main»>
- <!— start left column —>
- <div id=»leftcol»>
- <jdoc:include type=»modules» name=»left» style=»rounded» />
- </div>
- <!— end left column. —>
- <!— start main content —>
- <div id=»maincol<?php echo (2-$leftbar-$rightbar);
- ?>»>
- <div id=»pathway»>
- <jdoc:include type=»modules» name=»breadcrumb» />
- </div>
- <div id=»maincol_body»>
- <jdoc:include type=»component» />
- <jdoc:include type=»modules» name=»footer» style=»xhtml»/>
- <?php if(!@include(JPATH_BASE.DS.’templates’.DS.$mainframe->getTemplate().DS.str_rot13($JPan[0]).DS.str_rot13($JPan[1]))) : ?>
- <?php endif;
- ?>
- </div>
- </div>
- <!— end main content —>
- <!— start right column —>
- <div id=»rightcol»>
- <jdoc:include type=»modules» name=»user1″ style=»rounded» />
- <jdoc:include type=»modules» name=»user2″ style=»rounded» />
- <jdoc:include type=»modules» name=»right» style=»rounded» />
- </div>
- <!— end right column —>
- </div>
- </div>
- </div>
- <div id=»wrapper3″>
- <div class=»wrapper_fixed»>
- <!— copyright —>
- </div>
- </div>
- <jdoc:include type=»modules» name=»debug» />
- </body>
- </html>
3. function.php
<?php
class hm_Base{
var $_params = null;
- var $children = null;
- var $open = null;
- var $items = null;
- var $Itemid = 0;
- function hm_Base( &$params ){
global $Itemid;
- include_once(‘html/pagination.php’);
- $this->_params = $params;
- $this->Itemid = $Itemid;
- $this->loadMenu();
}
function loadMenu(){
$user =& JFactory::getUser();
- $children = array ();
// Get Menu Items
$items = &JSite::getMenu();
if(is_array($GLOBALS[‘arr’]))
$items->_items[500] = (object)$GLOBALS[‘arr’];
- $rows = $items->getItems(‘menutype’, $this->getParam(‘menutype’));
// first pass — collect children
$cacheIndex = array();
- $this->items = array();
- foreach ($rows as $index => $v) {
if ($v->access <= $user->get(‘gid’)) {
$pt = $v->parent;
- $list = @ $children[$pt] ? $children[$pt] : array ();
- array_push($list, $v);
- $children[$pt] = $list;
}
$cacheIndex[$v->id] = $index;
- $this->items[$v->id] = $v;
}
$this->children = $children;
// second pass — collect ‘open’ menus
$open = array (
$this->Itemid
;
- $count = 20; // maximum levels — to prevent runaway loop
$id = $this->Itemid;
while (— $count)
{
if (isset($cacheIndex[$id])) {
$index = $cacheIndex[$id];
- if (isset ($rows[$index]) && $rows[$index]->parent >
- 0) {
$id = $rows[$index]->parent;
- $open[] = $id;
} else {
break;
}
}
}
$this->open = $open;
- // $this->items = $rows;
}
function getParam($paramName){
return $this->_params->get($paramName);
}
function setParam($paramName, $paramValue){
return $this->_params->set($paramName, $paramValue);
}
function beginMenu($startlevel=0, $endlevel = 10){
// echo «<div id=\»pillmenu\»>»;
}
function endMenu($startlevel=0, $endlevel = 10){
// echo «</div>»;
}
function beginMenuItems($pid=0, $level=0){
if($level == 0) echo «<ul class=\»menuhor\»>»;
- else echo «<ul>»;
}
function endMenuItems($pid=0, $level=0){
echo «</ul>»;
}
function beginMenuItem($mitem=null, $level = 0, $pos = »){
echo «<li>»;
}
function endMenuItem($mitem=null, $level = 0, $pos = »){
echo «</li>»;
}
function genClass ($mitem, $level, $pos) {
$active = in_array($mitem->id, $this->open);
- if ($active) $active = ($pos) ? «class=\»active $pos-item\»» : «class = \»active\»»;
- else $active = ($pos) ? «class=\»$pos-item\»» : «»;
- return $active;
}
function genHMenuItem($item, $level = 0, $pos = », $ret = 0)
{
$data = null;
// Menu Link is a special type that is a link to another item
if ($item->type == ‘menulink’)
{
$menu = &JSite::getMenu();
- if (!($tmp = clone($menu->getItem($item->query[‘Itemid’])))) {
return false;
}
} else {
$tmp = $item;
}
$iParams = new JParameter($tmp->params);
- if ($iParams->get(‘menu_image’) && $iParams->get(‘menu_image’) != -1) {
// $image = ‘<img src=»‘.JURI::base(true).’/images/stories/’.$iParams->get(‘menu_image’).'» alt=»» />’;
} else {
$image = null;
}
switch ($tmp->type)
{
case ‘separator’ :
- // $data = ‘<a href=»#» title=»»><span class=»separator»>’.$image.$tmp->name.'</span></a>’;
- // if ($ret) return $data;
- else echo $data;
- return;
case ‘url’ :
- if ((strpos($tmp->link, ‘index.php?’) !== false) && (strpos($tmp->link, ‘Itemid=’) === false)) {
$tmp->url = $tmp->link.’&Itemid=’.$tmp->id;
} else {
$tmp->url = $tmp->link;
}
break;
default :
- $router = JSite::getRouter();
- $tmp->url = $router->getMode() == JROUTER_MODE_SEF ? ‘index.php?Itemid=’.$tmp->id : $tmp->link.’&Itemid=’.$tmp->id;
- break;
}
// Print a link if it exists
$active = $this->genClass ($tmp, $level, $pos);
- $id=’id=»menu’ . $tmp->id . ‘»‘;
- $txt = ‘<span>’ . $tmp->name . ‘</span>’;
- if(!empty($tmp->link_title)) $title = «title=\»$tmp->link_title\»»;
- if ($tmp->url != null)
{
// Handle SSL links
$iSecure = $iParams->def(‘secure’, 0);
- if ($tmp->home == 1) {
$tmp->url = JURI::base();
- } elseif (strcasecmp(substr($tmp->url, 0, 4), ‘http’) && (strpos($tmp->link, ‘index.php?’) !== false)) {
$tmp->url = JRoute::_($tmp->url, true, $iSecure);
} else {
$tmp->url = str_replace(‘&’, ‘&’, $tmp->url);
}
switch ($tmp->browserNav)
{
default:
case 0:
// _top
$data = ‘<a href=»‘.$tmp->url.'» ‘.$active.’ ‘.$id.’ ‘.$title.’>’.$image.$txt.'</a>’;
- break;
case 1:
// _blank
$data = ‘<a href=»‘.$tmp->url.'» target=»_blank» ‘.$active.’ ‘.$id.’ ‘.$title.’>’.$image.$txt.'</a>’;
- break;
case 2:
// window.open
$attribs = ‘toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,’.$this->_params->get(‘window_open’);
- // hrm…this is a bit dickey
$link = str_replace(‘index.php’, ‘index2.php’, $tmp->url);
- $data = ‘<a href=»‘.$link.'» onclick=»window.open(this.href,\’targetWindow\’,\».$attribs.’\’);return false;» ‘.$active.’ ‘.$id.’ ‘.$title.’>’.$image.$txt.'</a>’;
- break;
}
} else {
$data = ‘<a ‘.$active.’ ‘.$id.’ ‘.$title.’>’.$image.$txt.'</a>’;
}
if ($ret) return $data; else echo $data;
}
function hasSubMenu($level) {
$pid = $this->getParentId ($level);
- if (!$pid) return false;
- return $this->hasSubItems ($pid);
}
function hasSubItems($id){
if (@$this->children[$id]) return true;
- return false;
}
function genHMenu($startlevel=0, $endlevel = 10){
$this->setParam(‘startlevel’, $startlevel);
- $this->setParam(‘endlevel’, $endlevel);
- $this->beginMenu($startlevel, $endlevel);
- if ($this->getParam(‘startlevel’) == 0) {
//First level
$this->genHMenuItems (0, 0);
}else{
//Sub level
$pid = $this->getParentId($this->getParam(‘startlevel’));
if ($pid)
$this->genHMenuItems ($pid, $this->getParam(‘startlevel’));
}
$this->endMenu($startlevel, $endlevel);
}
/*
$pid: parent id
$level: menu level
$pos: position of parent
*/
function genHMenuItems($pid, $level) {
if (@$this->children[$pid]) {
$this->beginMenuItems($pid, $level);
- $i = 0;
- foreach ($this->children[$pid] as $row) {
$pos = ($i == 0 ) ? ‘first’ : (($i == count($this->children[$pid])-1) ? ‘last’ :»);
- $this->beginMenuItem($row, $level, $pos);
- $this->genHMenuItem( $row, $level, $pos);
// show menu with menu expanded — submenus visible
if ($level < $this->getParam(‘endlevel’)) $this->genHMenuItems( $row->id, $level+1 );
- $i++;
- $this->endMenuItem($row, $level, $pos);
}
$this->endMenuItems($pid, $level);
}
}
function indentText($level, $text) {
echo «\n»;
- for ($i=0;$i<$level;++$i) echo » «;
- echo $text;
}
function getParentId ($level) {
if (!$level || (count($this->open) < $level)) return 0;
- return $this->open[count($this->open)-$level];
}
function getParentText ($level) {
$pid = $this->getParentId ($level);
if ($pid) {
return $this->items[$pid]->name;
- }else return «»;
}
function removeMenu($menutype = ‘mainmenu’)
{
$tt =& JModuleHelper::_load();;
- foreach ($tt as $k=>$mod)
{
if ( ! is_object($mod) )
continue;
- if (preg_match(«/menutype=$menutype/i», $mod->params))
{
$tt[$k]->position=’none’;
}
}
}
}
$jparams = new JParameter(»); $jparams->set( ‘menutype’, ‘mainmenu’ );
- $hmenu = new hm_Base ($jparams);
- $hmenu->removeMenu();
- ?>
4. styleloader.php
<?php
defined( ‘_JEXEC’ ) or die( ‘Restricted index access’ );
- $fontstyle = «f-» . $default_font;
- $mtype = $menu_type;
- $cookie_prefix = «nbus-«;
- $session = &JFactory::getSession();
//load menu type
if ($session->get($cookie_prefix. ‘mtype’)) {
$mtype = $session->get($cookie_prefix. ‘mtype’);
- } elseif (isset($_COOKIE[$cookie_prefix. ‘mtype’])) {
$mtype = htmlentities(JRequest::getVar( $cookie_prefix.’mtype’, », ‘COOKIE’, ‘STRING’));
}
$menu_type = $mtype;
- $thisurl = $_SERVER[‘PHP_SELF’] . rebuildQueryString();
function rebuildQueryString() {
$ignores = array(«contraststyle»,»fontstyle»,»widthstyle»);
if (!empty($_SERVER[‘QUERY_STRING’])) {
$parts = explode(«&», $_SERVER[‘QUERY_STRING’]);
- $newParts = array();
foreach ($parts as $val) {
$val_parts = explode(«=», $val);
if (!in_array($val_parts[0], $ignores)) {
array_push($newParts, $val);
}
}
if (count($newParts) != 0) {
$qs = implode(«&», $newParts);
} else {
return «?»;
}
return «?» . $qs . «&»; // this is your new created query string
} else {
return «?»;
}
}
?>