This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
rukovodstvo:rukovodstvo_razrabotchika [07.05.15 в 16:22] maslov |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Руководство разработчика команды «KAD :: Systems» ====== | ||
- | Добро пожаловать в нашу команду! | ||
- | Мы занимаемся разработкой сайтов на системе управления HostCMS 6.x, а также их доработкой и технической поддержкой. Все взаимодействия мы производим внутри нашей системы для работы с клиентами, которая показала себя очень эффективно. Данная система носит название «KAD :: Outsource». Она является основным инструментом для связи всех участников процесса разработки. Регулярно мы обновляем её и дорабатываем новый функционал. | ||
- | Данное руководство состоит из двух разделов. Первый из них – это правила и стандарты, принятые в нашей команде. Второй – практические советы и рекомендации. | ||
- | ===== Правила и стандарты ===== | ||
- | ==== Правила оформления кода ==== | ||
- | Независимо от уровня профессионализма или отличительных особенностей синтаксиса, очень просто написать неряшливый или малопонятный код. Трудный для чтения код сложен в обслуживании и отладке. Скверный стиль кодирования ассоциируется с недостатком профессионализма.\\ | ||
- | В нашей команде мы используем единый стиль программирования. Помимо удобочитаемости такого кода, красивый код говорит о нашем профессионализме. Если вы ставите над кодом копирайты, то есть подписываетесь именем нашей команды, то ваш код должен быть на уровне. Иначе вы ставите под угрозу репутацию самой команды и каждого из её участников. | ||
- | Основные правила оформления кода:\\ | ||
- | - Правильное именование переменных и функций. | ||
- | - Имена глобальных переменных и констант должны вводиться в верхнем регистре | ||
- | - Префикс переменной определяет её тип. Для переменной типа string следует использовать префикс «s», например <php>$sInput</php>. Для bool – «b». Для объектов – это «o», например, <php>$oBook</php>, для массива - «a». При этом, если у нас есть массив с данными одного типа, то помимо префикса массива, нужно указывать еще и тип элементов массива, например, <php>$aoBooks</php>. Кстати, предусмотрен префикс и для смешанных типов mixed – «m». | ||
- | - Переменные, определенные в классе, как private всегда носят префикс «_», например, <php>$_oController</php> | ||
- | - Временные переменные и итераторы следует называть коротко. Например, i, j, k, l, m, n. Для строковых и числовых временных переменных рационально использование названий без префикса, например <php>$name, $pass, $counter</php>. | ||
- | - Переменные, использующие несколько слов в названии, пишутся слитно, без знака «_». Например, <php>$oBookComment</php>. Но если речь идет о константе или глобальной переменной, то здесь целесообразно использование знака «_». Например, <php>$CACHE_DIR</php>. | ||
- | - Для имен методов и функций следует применять те же правила, что и для переменных. Начинаться имена методов и функций должны с символов в нижнем регистре. | ||
- | - При создании модели объекта с неопределенной выборкой, например, <php>$oShopItems = Core_Entity::factory(‘shop_item’)</php> имя переменной должно быть во множественном числе с содержанием префикса o - object. При уточнении выборки и получении массива объектов <php>$aoShopItems = $oShopItems->findAll()</php> префикс должен быть ao - array of objects. При создании модели конкретного объекта имя переменной должно быть в единственном числе, например, <php>$oShopItem = Core_Entity::factory(‘shop_item’, 25)</php>. | ||
- | - Использование пустого пространства и фигурных скобок. | ||
- | - Чтобы усилить логическую структуру кода, следует использовать переносы строк – пустое пространство. Не бойтесь ставить переносы строк, давайте коду как можно больше свободы. | ||
- | - Cледует разбивать блоки инициализации ряда переменных по логическому смыслу, например<code php> | ||
- | $name = "testname"; | ||
- | $login = "testlogin"; | ||
- | $pass = "testpass"; | ||
- | $oSite = Core_Entity::factory('site', $site_id); | ||
- | $oUser = Core_Entity::factory('user', $user_id); | ||
- | $oController = new Core_Controller($oUser); | ||
- | </code>Первый блок с переменными содержит какие-то предустановленные значения. Второй – создание объектов. Третий – контроллера. Следует записать так:<code php> | ||
- | $name = "testname"; | ||
- | $login = "testlogin"; | ||
- | $pass = "testpass"; | ||
- | $oSite = Core_Entity::factory('site', $site_id); | ||
- | $oUser = Core_Entity::factory('user', $user_id); | ||
- | |||
- | $oController = new Core_Controller($oUser); | ||
- | </code> | ||
- | - Управляющие конструкции – условия и циклы следует отделять переносами. Например, <code php> | ||
- | $bonus = 0; | ||
- | |||
- | /* Вычисляем сумму бонусов товаров */ | ||
- | foreach ($aoShopOrderItems as $oShopOrderItem) | ||
- | { | ||
- | $bonus += $this->getBonus($oShopOrderItem->shop_item_id); | ||
- | } | ||
- | |||
- | return $bonus; | ||
- | </code> | ||
- | - Фигурные скобки всегда следует отделять переносом строки. | ||
- | - Отступы | ||
- | - Отступы внутри управляющих конструкций должны присутствовать обязательно. | ||
- | - Также отступы и переносы строк следует использовать в сложных условиях и в сложных конструкциях, подразумевающих создание вложенных объектов.<code php> | ||
- | if (isset(Core_Page::instance()->object) | ||
- | && strpos( | ||
- | get_class(Core_Page::instance()->object), | ||
- | 'Informationsystem_Controller_Show' | ||
- | ) !== false | ||
- | ) | ||
- | { | ||
- | $Informationsystem_Controller_Show->addEntity( | ||
- | Core::factory('Core_Xml_Entity') | ||
- | ->name('current_group_id') | ||
- | ->value(intval(Core_Page::instance()->object->group)) | ||
- | )->addEntity( | ||
- | Core::factory('Core_Xml_Entity') | ||
- | ->name('current_item_id') | ||
- | ->value(intval(Core_Page::instance()->object->item) | ||
- | ) | ||
- | ); | ||
- | }</code> | ||
- | - Не используйте оператор echo для вывода html кода. Следует использовать закрывающие и открывающие php теги: <html><?php ?></html> | ||
- | ==== Правила интеграции верстки ==== | ||
- | Вынесены в документ “[[standarty:standarty_integracii|Стандарты интеграции]]” | ||
- | |||
- | ====Порядок и правила обращения к техподдержке==== | ||
- | |||
- | - Поприветствовать. Вежливость не будет лишней. | ||
- | - Подробно разъяснить суть вопроса, приложить ссылки, скриншоты. | ||
- | - Приложить необходимые доступы. Обычно хватает доступов к админке сайта. Перед выдачей доступов создаем пользователя с данными support support, установив флажок «Привилегированный». | ||
- | - Выдачу данных доступа по FTP нужно согласовать с менеджером проектов или тимлидом. | ||
- | - После решения проблемы поблагодарить техподдержку. Удалить созданного пользователя из системы управления. | ||
- | ===== Практические советы и рекомендации ===== | ||
- | |||
- | ==== Создание нового сайта ==== | ||
- | |||
- | Первым делом нужно сконфигурировать систему управления. Для этого: | ||
- | - Добавляем новый сайт | ||
- | - Переносим группу с пользователем в новый сайт запросом update user_groups set site_id = 2 where id = 3 | ||
- | - Переносим статичные документы с ошибками запросами: | ||
- | - update documents set site_id=2 where id IN (2,4,5,6) | ||
- | - update document_dirs set site_id=2 where id=1 | ||
- | - Создаем группу констант с названием "Конфигурация" | ||
- | - Перемещаем все константы в эту группу запросом update constants set constant_dir_id=1 | ||
- | - Изменяем качество jpeg на максимум(100), константа JPG_QUALITY | ||
- | - Переходим на созданный сайт и удаляем демо сайт | ||
- | - Отключаем модули "Типограф" и "Услуги раскрутки сайта" | ||
- | - Запрещаем индексацию сайта. Для этого в настройках сайта переходим к вкладке robots.txt и удаляем «admin», должно остатьтся только «disallow: /» | ||
- | - Перейти к модулю «Сайты» и добавить домен для текущего сайта. | ||
- | - Переходим к модулю "XSL - шаблоны" и создаем группу с названием домена сайта. Устанавливаем её порядок сортировки "100", чтобы она попала в самый верх. | ||
- | - Добавляем макет: “Основной макет сайта”, в нем еще 2 макета: “Основной” и “Для главной”. | ||
- | - Создаем меню сайта. Меню создается в модуле “Структура”. Добавляем меню с названием “Основное” и “Нет” – для разделов, которые не должны попасть в меню, но должны попасть в карту сайта. | ||
- | - В структуру добавляем: | ||
- | - Главную страницу, документ “Главная страница”. | ||
- | - Поиск, если модуль поддерживается редакцией, ТДС, макет “Основной” | ||
- | - Google sitemap с путем "sitemap", ТДС, макет “Основной”. | ||
- | - Карту сайта с путем "map", ТДС, макет “Основной”. | ||
- | - Страницу ошибки 404, документ “Ошибка 404”. Прописать страницу ошибки можно в настройках сайта(модуль "Сайты"). | ||
- | - Страницу “Сайт отключен”, документ “Сайт отключен”. Прописываем её также в настройках сайта. | ||
- | - Очистить корзину. | ||
- | |||
- | Затем нужно создать элементы структуры. Их берем из меню сайта, которое можно увидеть в верстке. | ||
- | - Элементы структуры, которые еще не задействованы необходимо именовать с префиксом "~" | ||
- | - Раздел интернет-магазина всегда должен иметь путь "shop" а корзина "shop/cart" | ||
- | Все XSL шаблоны будут именоваться с префиксом, состоящик из 2 ключевых символов домена или названия сайта. Например, для tritan.ru это "tt"; для hasttings.ru это "ht". | ||
- | |||
- | ==== Интеграция верстки ==== | ||
- | |||
- | Интеграция – процесс внедрения верстки в движок сайта. После интеграции элементы сайта станут динамическими и будут управляться из админки. Важно правильно разметить верстку для интеграции – не все элементы сайта должны управляться. Например, копирайты никто и никогда не редактирует – они останутся в коде макета. | ||
- | Первым делом необходимо создать макеты сайта. Макеты в HostCMS могут быть бесконечно вложенными. Для любого сайта будет существовать 2 макета – «Основной макет» и «Главная». Перед переходом к дальнейшим действиям необходимо скопировать все папки верстки с картинками, стилями и скриптами в папку сайта, а также файлы “kad.php” и “template.php” из библиотеки Kad в папку modules/kad. Далее: | ||
- | - Переходим к модулю «Макеты сайта» | ||
- | - Создаем макет с названием «Основной макет» | ||
- | - Помещаем в код макета код главной страницы верстки сайта. Предварительно во вставляемом коде нужно скорректировать пути к скриптам, стилям и картинкам. | ||
- | - Шапку приводим к такому виду, как в руководстве по интеграции HostCMS, но скрипты и стили макета должны остаться подключены. Строку с вызовом метода showCss необходимо подключить после всех стилей верстки. Они должны быть перекрывающими. В дальнейшем при недочетах стилей верстки мы будем вносить перекрывающие стили в поле во вкладке «CSS» при редактировании макета. | ||
- | - Следующим шагом будет вывод меню сайта в шапке и футере. Это делается с помощью функции <php>Kad::showMenu([XSL-шаблон], [id_меню])</php>. | ||
- | - Далее необходимо найти в верстке статичные элементы макета, которые редко, но могут изменяться пользователем. Это могут быть телефоны в шапке и футере или же рекламные баннеры, соц. иконки и т.д. Многострочные блоки и баннеры необходимо вынести в статичные документы(Модуль «Страницы и документы»). Для этого создаем документ, в который помещаем код блока. Сохраняем, запоминаем id. В макете в том месте, где мы этот блок кода вырезали, помещаем код <php>Kad::showDocument([id_документа])</php>. | ||
- | - Статичные блоки, указанные в п.6, но представленные в макете всего одной строкой без тегов, выносятся в константы. Это может быть адрес или телефоны. Если телефон имеет сложное оформление, необходимо использовать функции <php>Kad::getPhoneBody</php> и <php>Kad::getPhoneCode</php>. | ||
- | - Слайдеры, новости, статьи или другие информационные системы в макете выводятся с помощью функции Kad::showInfosystem | ||
- | - Группы каталога товаров или товары выводятся с помощью функции <php>Kad::showCatalog</php> | ||
- | - Если требуется вывод новинок или распродаж, то следует использовать <php>Kad::showFilteredCatalog</php> | ||
- | - После этого на основе других страниц сайта нам необходимо выделить внутреннюю часть контента. В «Основном макете» должен остаться только тот код, который един для всех страниц сайта. | ||
- | - Создаем вложенный в «Основной макет» макет и называем «Главная» | ||
- | - Вложенную часть из «Основного макета» вырезаем и помещаем в только что созданный макет. | ||
- | - В «Основной макет» на месте вырезанного кода вставляем <php><?php Kad::execute(); ?></php> - это функция, которая подключит вложенный макет. | ||
- | ==== Разработка и внедрение наблюдателей ==== | ||
- | |||
- | Наблюдатели(они же хуки) позволяют вносить дополнительную логику при срабатывании стандартных функций и методов ядра HostCMS при этом не изменяя исходные файлы. (…) | ||
- | |||
- | ==== Создание многоязычных сайтов ==== | ||
- | |||
- | Структура. | ||
- | В структуре создаем разделы с названиями языков, например, ru, en, az. Внутри каждого раздела создаем элементы структуры в соответствии с пунктами меню. | ||
- | Информационные системы и товары. | ||
- | В каждой информационной системе создаем разделы с названиями языков, как в структуре. В каждом разделе будут созданы элементы для своего языка. ТДС для инфосистем и товаров необходимо скорректировать так, чтобы она определяла язык который необходимо вывести. | ||
- | Страницы и документы. | ||
- | Страницы и документы создаются в разделах с названием языков. В качестве идентификатора для выбора конкретного документа используем поле “Комментарий”. | ||
- | Макеты. | ||
- | В макетах для меню и страниц создаются специальные условия для определения языка и переключения нужного документа в зависимости от языка. |