От теории до собственной CMS интернет-магазина. Создание CMS этап проектирования Сохранение резервных копий БД

Хотя знать HTML/CSS и уметь на них самостоятельно что-нибудь сверстать должен любой веб-мастер, создавать сайты «с нуля», пользуясь только этими средствами, совсем не обязательно.

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

Что такое CMS

CMS представляет собой так называемый «движок» или «скелет» сайта - базовый функционал с уже готовыми темами оформления. Веб-мастеру остаётся только загрузить файлы CMS на сервер, настроить её под свои нужды, выбрать и при необходимости подкорректировать тему оформления, а также наполнить сайт содержимым - текстом, фотографиями, видеороликами и т. п.

CMS пишутся на разных языках программирования (в основном это PHP), но обязательно используют CSS- и HTML-код, так что знание этих инструментов разработки всегда пригодится.

CMS можно сравнить с программой или даже операционной системой - вы устанавливаете её, настраиваете и пользуетесь. Навыков программирования для этого иметь не нужно - управлять сайтом можно через удобную панель администрирования, а расширять функционал ресурса можно, устанавливая заранее написанные расширения - плагины.

Преимущества CMS

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

Чтобы поменять текст или добавить страницу на созданный вручную с помощью HTML и CSS сайт, нужно править код. В системе управления сайтом всё делается через админ-панель с удобным пользовательским интерфейсом.

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

Классификация CMS

Все системы управления контентом условно можно разделить на бесплатные, платные и самописные.

Отдельной строкой выступают «мобильные CMS», на которых работают сайты, оптимизированные под портативные устройства. Среди них тоже есть и платные, и бесплатные, и самописные.

Платные CMS

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

Обычно на сайте платного движка предлагается несколько редакций, из которых пользователь выбирает оптимальную, в зависимости от своих потребностей. Отличаются версии функционалом и, как следствие, ценой: меньше возможностей - дешевле. В вопросе выбора CMS «Дороже» ни в коем случае не значит «Лучше». Выбор редакции должен основываться исключительно на том, какой должен получиться сайт, и какие функции ему действительно необходимы.

Среди прочих можно выделить три очень популярных платных системы управления контентом.

  • 1С-Битрикс. Продукт, который лучше использовать для действительно крупных бизнес-проектов и сложных интернет-магазинов, интегрированных с 1С. По системе есть огромное количество справочной информации на русском языке. Благодаря её популярности не составит труда найти администратора сайта, специализирующегося на «1С-Битрикс».
  • NetCat . Быстрая и нетребовательная к ресурсам система с интуитивно понятным интерфейсом, удобной админ-панелью и хорошей техподдержкой. На ней можно сделать любой сайт: от визитки до портала, но для создания интернет-магазина NetCat подходит не очень хорошо.
  • UMI . CMS . Система обладает продуманной документацией и удобной панелью управления. У UMI.CMS даже есть своё мобильное приложение. Однако сейчас компания Umisoft отошла в сторону развития своего конструктора сайтов umi.ru .

Бесплатные CMS

Ими люди занимаются не ради получения прибыли, а «из любви к искусству». Сотни и тысячи разработчиков из разных стран поддерживают свободные CMS с открытым исходным кодом. Для них постоянно создаются новые плагины, темы оформления, выходят обновления и патчи.

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

Рассмотрим тройку распространённых CMS, распространяющихся безвозмездно.

  • WordPress . На этой системе сделано огромное количество сайтов, на сегодняшний день она является самым популярным движком. Море тем оформления, тысячи расширений, широкая поддержка, простота использования - только часть её положительных качеств. Но обратная сторона популярности - большое количество уязвимостей и повышенный интерес хакеров. За безопасность сайта, работающего на WordPress, нужно побороться. Считается, что ресурсы на этой CMS не жалуют поисковики. Это можно объяснить, опять же, популярностью. Слишком много однотипных сайтов с шаблонной структурой и темами оформления. Не секрет, что для лучшей оптимизации дизайн сайта тоже надо оптимизировать. Смотрите также обучающие уроки по созданию сайта на WordPress .
  • Joomla !. Вторая по популярности CMS. В изучении сложнее WordPress, но зато гибче в настройках. Смотрите также обучающие уроки по созданию сайта на Joomla .
  • Drupal . В освоении система ещё сложнее предыдущих, но зато её отличает невероятная гибкость - при желании на Drupal можно создать сайт, подходящий практически под любые нужды.

Самописные CMS

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

Что выбрать?

Однозначного ответа нет. Всё зависит от бюджета, цели и личных предпочтений. Конечно, крупному порталу или интернет-магазину без CMS не обойтись, на онлайн-конструкторе можно делать исключительно сайты «для себя», а HTML/CSS больше подходит для статичных и небольших сайтов-визиток. В остальном - выбор за вами, мои предпочтения будут следующими:

  • Для сайтов визиток и блогов - Вордпресс , т.к. данная CMS наиболее простая и по трудозатратам сделать на нем проект проще всего;
  • Для сайтов с каталогами и фильтрами - Друпал , очень гибкая CMS, которая позволяет сделать оптимальную структуру под задачи SEO, также с минимальными трудозатратами можно сделать проект с элементами соц сетей и небольшие порталы. Многие делают тоже самое на Joomla, но мне лично этот движок не нравится, хотя первые сайты я учился делать на нем и он более популярен;
  • Для клиентских сайтов часто использую Неткат , т.к. он имеет удобную админку, которая интуитивно понятна для пользователей даже с минимальным опытом работы на компьютере. Также по трудозатратам на нем разворачиваются проекты довольно быстро, что в коммерческих целях мне очень удобно;
  • Для интернет-магазинов, где есть интеграция с 1С использую Битрикс , особенно в тех случаях, когда нужно применить технологию мультисклад (если в 1С есть несколько складов с разными ценами и остатками), также иногда применяю узкопрофильные движки под интернет-торговлю Шоп Скрипт (платный) и Opencart (бесплатный).

(наведите курсор мыши на урок, чтобы смотреть детально)

Часть 1

{ Написание собственного фреймворка }

Длительность: более 4 часов
Список уроков первой части:

1. Вступление
В первом уроке курса разбираются организационные моменты, рассматривается структура курса, разбирается необходимый минимум знаний, который требуется для успешного изучения курса. Также дается перечень необходимого программного обеспечения (сервер, редактор, версия PHP и т.д.).

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

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

4. Класс Реестр
В этом уроке пишется полезный класс, который предоставит глобальный объект. Используя данный объект, можно будет записать в него любые данные, которые будут доступны из любой точки нашего приложения.

5. Класс обработки ошибок
Еще один полезный класс, который необходим в любом веб-приложении, это класс для работы с ошибками. Этот класс позволит логгировать возникающие ошибки, а также не показывать их на экране в режиме production.

6-7. Класс Маршрутизатор
Следующая пара уроков будет отведена под написание ключевого класса практически любого веб-приложения, реализующего паттерн MVC.

Речь идет о классе Маршрутизаторе (Router). С помощью данного класса будем понимать, какую именно страницу запросил пользователь и перенаправим запрос на соответствующие контроллер и экшен.

8. Базовый контроллер
В этом уроке создается еще один ключевой класс ядра фреймворка – класс Контроллер.

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

9-10. Класс View
Еще одним компонентом архитектуры MVC является вид (представление). Этот урок посвящен написанию базового класса View, задача которого – отрисовать для пользователя запрошенную страничку. В уроке рассматрвиается, как отделить вид от шаблона, а также в чем разница между ними.

11. Класс Модель
Последним ключевым компонентом архитектурного паттерна MVC – является Модель (Model). Задача модели – непосредственная работа с данными, в частности, предоставлением нужного набора данных по запросу контроллера.

12. ORM RedBeanPHP
Работа модели часто предполагает работу с БД. Соответственно, приходится писать SQL-запросы или же нужно позаботиться о наличии соответствующего класса-билдера, который будет писать такие запросы за нас. В уроке рассматривается второй вариант и подключается замечательная библиотека RedBeanPHP, с помощью которой значительно упрощается дальнейшая работа.

Цели и задачи данного раздела

Первая часть курса посвящена написанию фреймворка с нуля.

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

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

Часть 2

{ Написание пользовательской части CMS интернет-магазина }

Длительность: более 13 часов
Список уроков второй части:

1. Перенос шаблона в структуру CMS
Чтобы создаваемый интернет-магазин имел приличный вид, был подобран бесплатный шаблон, который интегрируется в структуру фреймворка и создаваемого в курсе движка. Причем, сделать это будет достаточно просто.

2. Структура БД
Второй урок текущей части курса целиком и полностью посвящен разбору архитектуры БД. Здесь создаются основные необходимые таблицы в БД, а также рассматривается их структура для того, чтобы четко представлять, для чего нужна та или иная таблица.

3. Вывод брендов
С этого урока непосредственно начинается работа с кодом CMS и реализуется одна из простейших задач – вывод брендов.

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

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

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

8-10. Виджет категорий
Следующие три урока выделины для написания еще одного виджета – виджета категорий. Данный виджет реализуется достаточно универсальным, с тем, чтобы использовать его не только в пользовательской части сайта, но и в будущей админке. Созданный виджет будет строить и выводить меню категорий по заданному шаблону. При этом данное меню будет поддерживать неограниченный уровень вложенности категорий.

11-17. Карточка товара
Одна из наиболее важных и объемных частей курса – карточка товара.

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

Функционала достаточно много и его реализация показывается сразу в семи уроках.

18-22. Корзина
Неотъемлемым атрибутом любого интернет-магазина является корзина. Собственно, без корзины сайт просто перестает быть интернет-магазином и превратиться в обычный каталог товаров.

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

23-24. Поиск
В уроках 23 и 24 показана реализация поиска по товарам. Это также важный функционал для любого сайта, особенно интернет-магазина.

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

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

26. Класс Pagination
В одной категории в магазине могут находиться сотни и тысячи товаров. Конечно же, выбирать их все для показа на одной странице – не очень хорошая идея. В этом случае принято выводить товары порционно, разбивая их по страницам. Для этого в данном уроке будет написан класс постраничной навигации.

27-31. Регистрация
Еще один достаточно объемный функционал, который реализуется, - регистрация пользователей.

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

32-35. Оформление заказа
Еще четыре урока посвящены вопросам оформления заказа. Здесь не только будет реализован функционал сохранения заказа и его данных в БД, но и будет реализован функционал отправки уведомления о новом заказе менеджеру сайта, а также будет отправляться письмо с деталями заказа самому покупателю. Для этого будет использоваться уже готовый популярный класс Swift Mailer.

36-40. Фильтры
Последняя объемная и достаточно интересная тема – фильтры. Этому вопросу отведено сразу пять относительно больших урока. Фильтры – очень удобны для пользователя и помогают покупателю в поиске нужных товаров на сайте.

Это будут последние уроки пользовательской части сайта.

Цели и задачи данного раздела

Итак, в первой части показано написание собственного фреймворка – это ядро, на базе которого будет создаваться система управления контентом (CMS) для нашего интернет-магазина.

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

Часть 3

{ Написание администраторской части CMS интернет-магазина }

Длительность: более 11 часов
Список уроков третьей части:

1. Шаблон AdminLTE
Первый урок третьей части посвящен основам работы с популярным шаблоном для бэкенда – AdminLTE. В данном уроке скачивается и установливается этот шаблон, а также создается необходимая структура для работы администраторской части CMS.

2. Авторизация администратора
В этом уроке дорабатывается механизм авторизации, который уже имеется, он был написан в уроках пользовательской части сайта.

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

3. Виджеты главной страницы
Шаблон AdminLTE из коробки предлагает много замечательных компонентов, расширяющих возможности CSS фреймворка Bootstrap. Одним из таких компонентов являются небольшие симпатичные блоки-виджеты, которые идеально вписываются в главную страницу админки.

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

4. Список заказов
В этом уроке реализуется функционал просмотра списка заказов с возможностью детального просмотра выбранного заказа или его удаления при необходимости.

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

7-11. Управление категориями
Пять уроков, с седьмого по одиннадцатый, отведено под реализацию функционала управления категориями. Реализуется функционал, предоставляющий менеджеру возможность создания новых категорий, редактирования существующих, а также их удаления. Кроме этого, добавляется обязательная проверка наличия в категории товаров или вложенных категорий, с тем чтобы избежать случайного удаления не пустой категории.

12. Управление кэшем
Создаваемая в курсе CMS поддерживает механизм кэширования данных. Например, можно кэшировать категории и фильтры. Однако, вместе с тем, периодически могут изменяться, к примеру, существующие категории. Соответственно, необходимо дать администратору сайта возможность перестраивать кэш категорий, удаляя текущий. Эта возможность и будет реализована в текущем уроке.

13-16. Управление пользователями
Четыре урока работы с админской частью сайта отведено под работу с пользователями. Показана реализация стандартного функционала управления пользователями: редактирование профиля и создание новых пользователей. При этом менеджер может создавать как обычного пользователя, так и нового администратора.

17-27. Управление товарами
Основной и наиболее объемный функционал администраторской части – это, конечно же, управление товарами. Именно поэтому на реализацию этого функционала отведено больше всего уроков – одиннадцать уроков.

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

28-30. Управление фильтрами
В следующих трех уроках показана реализация функционала управления фильтрами. Добавляется возможность управления группами фильтров и непосредственно самими атрибутами, которые в последующем можно будет присваивать товарам.

31-32. Управление валютами
В последних двух уроках реализуется механизм управления валютами. Администратор сможет создавать новые валюты и редактировать существующие. Также администратор сможет назначать базовую валюту магазина.

Цели и задачи данного раздела

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

Именно разработка администраторской часть CMS и показана в финальной части данного курса.

Здравствуй мой юный кодер, сегодня МЫ с тобой начнем писать свою простенькую CMS.
Итак, с чего начнем…естественно с проектирования. Что должна уметь/иметь не крутая, простенькая CMS? Этот вопрос достаточно сложный, т.к. любая CMS, даже самая простая, пишется под конкретные нужды: электронный магазин, программерский сайт, новостной сайт, галерея(хотя, в принципе, галерея- это не совсем CMS) и т.д. В этой статье мы рассмотрим второй вариант. Что же должна уметь такая CMS? Думаю все со мной согласятся, что:

1) Админку:)
2) Возможность управления новостями, статьями, загрузками, ссылками
3) Функцию регистрации пользователей
Это тот минимум с которым должна уметь оперировать наша CMS. К дополнительным фичам я отнесу:
1) Динамически создаваемые страницы, т.е. в админке можно запросто ввести содержимое новой страницы. Например: сделать магазин uin’ов на сайте или страницу повествующую о истории вашего проекта и т.п.
2) Комментарии к новостям. Это отдельный пункт, т.к. это довольно таки опасная вещь из-за того, что нужно применять специальные фильтры и спам- детекторы, иначе если вас кто-то очень сильно не любит и у него есть мозг/деньги(или что хуже всего, когда у него есть и то и другое:)) то он, в лучшем случае, может просто забить вашу БД мусором, в худшем он получит полный контроль над сайтом…Мы еще вернемся к этому вопросу;)
3) Возможность создания динамически создаваемых менюшек, их перестановка в различные области сайта.
4) Форма обратной связи с админами(Опасность та же, что и для пункта №2).
Ну вот и все, что я планирую(пока что) тебе объяснить.

Сначала организуем структуру директорий будущего сайта:
/DocumentRoot
/AdminPanel # Корневая директория админки
/Sources # Скрипты админки
/HTML # Собственно сам хтмл админских страниц управления
/Sources # Скрипты CMS
/HTML # Хтмл
/Images # Картинки
/Downloads # Директория хранящая в себе файлы доступные для скачивания
/Config # Файлы конфигурации CMS, например содержащие логин и пароль доступа к MySQL

Теперь что касается навигации по сайту. Навигация будет производится с помощью ссылок(ога, самому смешно:)) типа you_site.com/index.php?act=art&mod=idx. Параметр art характеризует какой раздел сайта мы хотим просмотреть, а параметр mod отвечает за подраздел который мы хотим просмотреть. Вот таблица соответсвия этих параметров:
act=art&mod=idx # Просмотр категорий статей
art=art&mod=cat # Просмотр конкретной категории. Как CMS будет узнавать какую категорию мы хотим просмотреть я объясню чуть позже:)
art=art&mod=art # Просмотр конкретной статьи

Act=dwn&mod=idx # Просмотр категорий статей
art=dwn&mod=cat # Просмотр конкретной категории. Как CMS будет узнавать какую категорию мы хотим просмотреть я объясню чуть позже:)
art=dwn&mod=dwn # Просмотр конкретной статьи

Act=users # Просмотр зарегистрировавшихся пользователей
act=users&mod=profile # Просмотр профайла юзера
art=art&mod=reg # Регистрация юзера

Это пока далеко не все варианты, в дальнейшем мы научим “понимать” CMS и другие параметры. Ну а теперь перейдем непосредственно к программированию. Создадим в корневой папке файл index.php именно через этот скрипт пользователь будет путешествовать по сайту, все остальное кроме картинок должно быть запрещено для просмотра(и не только скрипты но и файлы конфигурации, ХТМЛ)

Код файла index.php:

Require_once(‘config/database.php’); // Загружаем скрипт соединяющийся с БД
require_once(‘sources/session.php’); // Скрипт управления сеансами пользователей
require_once(‘config/config.php’); // Файл конфигурации
require_once(‘sources/check.php’); // Проверяет получаемые из URL’a параметры
require_once(‘sources/links’); // Отвечает за ссылки для навигации по сайту

$act=check_act(&$debug); // Функция проверки переменной $act, находится в файле check.php
$mod=@$_GET[‘mod’]; // Получаем переменную $mod
$site_links=get_links($mysql_tables); // Получаем массив ссылок
switch ($act)
{
case ‘idx’: //если посетитель просматривает главную страницу сайта
require_once(‘sources/news.php’); // Загружаем скрипт новостей
$site_news=get_news($mysql_tables); // Получаем массив новостей
require_once(‘HTML/index.htm’);// Загружаем ХТМЛ страницы
break;
}
?>

Код файла database.php:

$mysql_login=’root’; //Логин для доступа к серверу БД
$mysql_pass=’’; // Пароль
$mysql_host=’localhost’; // Хост на котором висит MySQL
$mysql_database=’MyCMS’; // Имя БД

$mysql_tables[‘news’]=’news’; // Таблица новостей
$mysql_tables[‘articles’]=’articles’; // Таблица статей
$mysql_tables[‘art_categ’]=’art_categ’; // Таблица категорий статей
$mysql_tables[‘downloads’]=’downloads’; // Таблица загрузок
$mysql_tables[‘dwn_categ’]=’dwn_categ’; // Таблица категорий загрузок
$mysql_tables[‘links’]=’links’; // таблица ссылок
$mysql_tables[‘users’]=’users’; // Таблица пользователей
?>

Код файла session.php:

@session_start();

If(!@$_SESSION["group_id"])//Если пользователь только что зашел
{
$_SESSION["user"]="Гость";
$_SESSION["id"]=0;
$_SESSION["group_id"]=-1;
$_SESSION["last_click"]=$time;
}

If(@$_SESSION["group_id"]<>"")//если посетитель не гость
{
$_SESSION["last_click"]=$time;//в дальнейшем нам это понадобиться для учета онлайн- пользователей на сайте
}

Код файла check.php:

Function check_act(&$debug)//Функция проверки переменной act
{
$act=@$_GET["act"];
if($act<>"idx")
{
$act=$debug["indx_act"];//Задаем дефолтное значение
}
return $act;
}

Код файла config.php:

//Установки управления исправлением ошибок:
$debug["indx_act"]="idx";// Если главный скрипт получит не правильное значение переменнной act то он задаст ей это значение

Код файла links.php:

Function get_links(&$table)
{
$query="SELECT position FROM $table";
$result=mysql_query($query);
$rows=mysql_num_rows($result);
for ($i=0; $i<$rows; $i++)
{
$sort_array[$i]=mysql_result($result, $i);
}
sort($sort_array);
for ($j=0; $j<$rows; $j++)
{
$pos=$sort_array[$j];
$query="SELECT * FROM $table WHERE position="$pos"";
$result=mysql_query($query);
$tmp_arr=mysql_fetch_array($result);
$links[$j]["name"]=$tmp_arr["name"];
$links[$j]["link"]=$tmp_arr["link"];
}
$links["rows"]=$rows-1;
return $links;
}

Вот в принципе уже и мини двиган получился:) Теперь давайте разберем код некоторых файлов, чтобы я вам пояснил механизм работы. Итак для чего я проверяю переменную $act спросите вы? А представьте себе что кто-то захочет в url’e ее поменять? После этого скрипт может работать не стабильно и вполне реальна порча данных и т.п. Конечно в данном примере это играет, мягко говоря, второстепенную роль, но запомните, что нужно проверять абсолютно все что может изменить пользователь(лучше даже проверять то что он в принципе и не может изменять). Если же у переменной какое-то левое значение то мы ей присваиваем дефолтное значение и тем самым обламываем вредных киддисов:)

Теперь разберем самый сложный из этих простых скриптиков- links.php. Я думаю, что читатель этой статьи уже сталкивался с управлением каким- либо движком сайта и наверняка догадался почему этот скрипт настолько сложен(для начинающих конечно). Управление ссылками на навигационной панели сайта заключается не только в том, чтобы их добавлять и удалять, а еще, как минимум, в том чтобы изменять их позицию, т.е. вы сначала добавили ссылки на раздел статей, а потом вспомнили, что забыли добавить раздел “Главная”- ссылку на главную страницу, но ведь эта ссылка должна по традиции идти первой…вот тут- то и пригодится управление позициями. Вы просто добавляете ссылку на главную страницу, а потом нажимаете на что-то похожее на “Вверх” или “Поднять” и т.п. Но мы пока не будем в этой части касаться админки, а пока рассмотрим скрипт- клиент. Сначала мы просто выбираем все записи из таблицы и заносим значения поля ‘position’ каждой записи в массив. Затем мы сортируем их по возрастающей, то есть: 0, 1, 2 и т.д. Это позволяет нам потом выполнять в цикле SQL запросы типа: $query="SELECT * FROM $table WHERE position="$pos""; Таким образом мы выбираем из таблицы записи у которых поле ’position’ равно значению переменной $pos, что и дает нам возможность управления позициями ссылок. Здесь мы в цикле, начиная с ключа со значением 0 присваивать имя ссылки и, собственно, саму ссылку. Все что нам потом понадобится чтобы вывести ссылки на свет юзеровский- это написать в хтмл файле index.htm такой скрипт:

For(i=0;$i<$site_links[‘size’];$i++)
{
echo "{$site_links[$i]["name"]}";
}

Вот собственно и все. Кстати, некоторые люди которые читают сейчас эту статью, наверное, возмутяться: “А почему в запросе не использовать конструкцию ORDER BY и не использовать связанные таблицы? Ведь это упростит задачу!”. Дело в том, что стиль написания моих скриптов заключается в том чтобы максимально увеличить их переносимость, т.е. я никогда не использую сложные запросы, связанные таблицы и т.д. Конечно, все это плохо сказывается на скорости работы скриптов и их сопровождении(слишком не понятный код), и если нужно добиться максимальной производительности в ущерб переносимости, то я использую все эти средства, но зато еще ни один мой скрипт при переезде не просто с одной версии MySQL на другую, а с одной платформы и/или типа веб серверов и серверов БД не выдал ни одной ошибки или предупреждения:) Каждый волен делать так как он хочет, ведь на то оно и программирование: возможных решений задачи, столько же сколько и людей пытающихся ее решить;)

P.S. Если что-то не понятно или ты нашел(а) неточности/ошибки в статье- меня всегда можно найти на нашем

Если возникла необходимость создать сайт, ну или сама собой пришла в голову мысль сделать что-то хорошее и доброе для интернета, носитель сей мысли обычно задумывается – кто будет делать сайт, на чем, и в какие сроки. Обычно ответом на вопрос «Кто» является сам человек. Гораздо интереснее ведь сделать свой собственный, родной сайт. Второму вопросу – «На чем» - как раз и посвящена данная статья.

Науке известно множество готовых решений, основанных на CMS, таких как Drupal или Joomla. Казалось бы, чего проще? Установил пакет из инсталлятора, заполнил парочку страниц, выбрал незаезженный симпатичный шаблончик – и радуешься жизни. При этом никакого программирования, дешево и сердито. Плюсы при использовании CMS:

1) Простота и быстрота развертывания. Можно сделать сайт за 5 минут.

2) Наличие множества модулей, которые позволят расширить функции сайта в будущем.

3) Простота поддержки, так как есть готовая админка, работать с которой можно обучить любого за 5 минут.

Но это на первый взгляд все так хорошо. Как известно, бесплатный сыр бывает только в мышеловке. В чем же подвох? А вот в чем:
1) Любая CMS – универсальна. Она запросто может не учитывать вашу узкую направленность. Например, вам надо сделать сайт кафедры – ни одна CMS не содержит в себе модулей для работы в такой специфичной сфере (студенты, преподаватели, оценки, посещаемость). В общем, рано или поздно придется дописывать, если у вас не сайт-визитка.

2) Так как CMS пытается охватить весь спектр задач, то в ней наверняка будут те функции, которые вам не нужны. И вы вынуждены будете с ними мириться, что само собой будет тормозить загрузку страницы и нагружать сервер. Попробуйте прикинуть, сколько ненужных SQL запросов идет к базе в стандартной CMS? А ведь большинство людей даже не задумывается о том, что происходит там внутри, а там зачастую все не очень хорошо оптимизировано.

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

4) Вопрос качества должен стоять на первом месте. Кто пишет эти самые бесконечные бесплатные модули? При всем уважении, их пишут энтузиасты, уровень знаний которых запросто может оказаться весьма низким. Вы готовы доверить свой проект безграмотно написанному коду?

5) Стандартные средства имеют стандартные дыры. Если хакер увидел, что вы используете определенный компонент, он со 100% вероятностью его взломает – либо найдет готовый эксплоит, либо вычислит дырку сам (зная исходный код – это не проблема).

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

Разумеется, если вы взялись программировать свой сайт самостоятельно, у вас возникнет своя собственная CMS, которую вы будете шлифовать и наращивать, используя в следующих проектах. Можно, конечно, допилить напильником стандартную CMS – но трудозатраты при этом будут вполне сопоставимы, ведь ее еще и изучить надо, разобраться как она работает.

Как краткий итог – везде важен баланс сил. Если вы чувствуете в себе силы поддерживать и латать чужую стандартную CMS – можете это делать. Но всегда перед началом работы над сайтом необходимо все тщательно продумать и спроектировать, и вполне возможно, что окажется так, что дешевле написать сайт самостоятельно. Лучше один раз сделать инвестиции с умом, чем потом жалеть и выбрасывать на помойку хорошие идеи и испорченные сайты.

Вообще мысля проста создать так сказать модуль для своей CMS который выводил бы предпросмотр новостей... По моему мнению, движок это простое отделение кода PHP от кода HTML Я возможно не правильно его называю, это не движок, если верить терминам то, то, что мы будем писать - это шаблонизатор. Вообщем то это совсем не важно, конечный продукт будет уметь выводить мини новости, и при этом мы сможем менять шаблон не трогая код. Мы не будем вытаскивать информацию из базы данных, просто напрямую впишем ее в переменную. Приступим...Создадим файл index.php в нем напишем такой код

include("module/news.php");
$news = index_page();

include("templates/index.html");
?>

из него видно что мы подключаем два файла. Один из папки "module" т.е. модули, другой из папки "templates" т.е. шаблоны... Как вы поняли нам нужно написать сам модуль и шаблон... Но шаблонов мы будем писать два, один будет содержать разметку главной страницы, а другой будет содержать разметку самой мини новости. Начнем с мини новости, назовем файл news.html






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




Первый движок




Обычная страница html только в ней присутствует php код Тут будут выведены наши новости... Приступим к самому модулю, называем его news.php

function index_page()
{
//Заполняем переменные с информацией
//В наших мининовостях будет виден текст, заголовок, дата и автор
$txt="Печально когда при создание чего то ты забываешь про какие то мелочи...и для того что бы не переписывать все ты пытаешься измудриться так, чтобы вмешательство в код было минимальное..";
$txt="Когда то такие попытки увенчаются успехом, а иногда бывает и так, собственными же руками уродуешь код =(";
$title="Титл новости 1";
$title="Титл новости 2";
$author="Первый автор";
$author="Второй автор";
$date_b="12/10/11";
$date_b="13/10/11";

$sm_read = file("templates/news.html");//Открываем шаблон
$sm_read = implode("",$sm_read);//Так как функция file() в результате дает нам массив, то склеиваем его
for($i=0;isset($txt[$i]);$i++)//Выводим цикл где меняем индексы на информацию из переменных
{
$edd_tamp = $sm_read;
$edd_tamp = str_replace("",$txt[$i],$edd_tamp);
$edd_tamp = str_replace("",$title[$i],$edd_tamp);
$edd_tamp = str_replace("",$author[$i],$edd_tamp);
$edd_tamp = str_replace("",$date_b[$i],$edd_tamp);

$news .= $edd_tamp;//Склеиваем все в одну переменную
}
return $news;//Выводим результат функции
}
?>

Собственно небольшой движок написан...Поместим файлы news.html и index.html в папку templates. Файл news.php в папку module, а файл index.php в корень сайта...

Это лишь простой пример реализации скрипта который может генерировать страничку "на лету". Более подробнее оп простом движке на php может почитать