Основной рецепт — научиться систематизировать и находить нужные знания. И это касается не только MaxSite CMS, но и любой другой системы. Существуют некие базовые основы, без которых, действительно, будет тяжело разобраться. Нельзя заниматься программированием, не зная синтаксиса PHP. Нельзя верстать сайты, «плавая» в основах CSS. Точно также будет сложно создавать новый шаблон, не разобравшись в настройках админ-панели. Таких «основ» много, перед тем, как приступить к чему-то сложному, нужно их изучить.
После того, как этап новичка пройден, уже можно заняться изучением возможностей выбранной CMS. В первую очередь следует обратить внимание на PHP-функции системы. Многие ошибочно полагают, что для их изучения требуется искать мануалы и хелпы. На самом же деле с PHP всё гораздо проще: поскольку php-файл — это и исходный и выполняемый код. Поэтому всё, что следует сделать, так это открыть php-файл.
Когда я впервые столкнулся с WordPress (в 2005 году), то не было никакой помощи, а все объяснялки сводились к каким-то примитивным вещам. Тогда я понял, что единственный путь — это изучать исходный код WordPress. Со временем этот подход для меня стал основополагающим и я его применяю до сих пор к любой системе, у которой есть исходные файлы. Как правило исходный код говорит гораздо красноречивей и лучше любого хелпа и описания.
Файлы. Каталоги
У любой системы есть некая начальная точка запуска. Например файл index.php. Когда нужно понять как и что работает, следует разобраться и найти этот начальный файл. В некоторых случаях имя файла может быть другим и это уже зависит от многих факторов.
Вообще существует три основных подхода задания структуры: на основе имен файлов, на основе каталогов и их смесь. Например компоненты находятся в подкаталогах — очевидно, что все лежащие в них файлы относятся к компоненту. А вот custom-файлы являются одиночными с предопределенными именами. Следовательно из имени файла можно определить для чего он используется.
Такой подход распространён в самых разных системах. Например тот же WordPress в основном использует только файлы, а каталоги — в редких случаях. Нельзя сказать, что какой-то подход лучше или хуже, и какой из них использовать зависит от задачи. Когда-то в шаблоне MaxSite CMS type-файлы располагались в основном каталоге шаблона:
А вот современный D2:
Для сравнения посмотрим файлы шаблона WordPress:
По именам этих файлов WordPress мы можем определить, что header.php скорее всего будет отвечать за вывод шапки сайта, а footer.php — за подвал. Файлы contentX.php скорее всего отвечают за различный вывод контента.
Как правило, разработчики стремятся использовать для именования близкие по смыслу значения. Но не всегда это удаётся (по разным причинам). Например, не зная особенностей WordPress, определить для чего используется single.php и чем он отличается от page.php будет довольно сложно.
Читать исходный код
PHP-файлы условно делят на те, где объявляются функции и те, где эти функции вызываются. Например файл common.php только содержит основные функции MaxSite CMS. А файл index.php шаблона использует эти функции в своей работе.
Когда встречается неизвестная функция, то следует её найти и если нужно, разобраться в её работе. Часто функции или отдельные участки кода сопровождаются поясняющими комментариями, что несколько упрощает дело. Обычно, если нет какой-то острой необходимости, можно ограничиться комментариями и внимательно посмотреть на аргументы функции — обычно этого уже достаточно, чтобы понять для чего она нужна.
Иногда встречаются «мега»-функции, которые принимают в качестве аргумента большой массив параметров. На основе этих параметров выполняется определенная задача. Примером такой функции можно считать mso_get_pages(), которая возвращает записи из БД.
Понятно, что изучить каждую строчку будет сложно, однако, даже простое ознакомление, позволяет после без труда найти нужный участок кода или параметр.
Иногда возникает проблема найти файл с нужной функцией. Например в шаблонах используется функция mso_fe(). Многие ли знают, что она делает? Проверим!
Для начала нужно найти файл, где эта функция определена.
Для этого нам понадобится выполнить поиск по содержимому. Для поиска я использую Total Commander: жмём Alt+F7 и в поле для текста указываем имя функции. Если результатов много, то поисковую фразу можно задать как «function ФУНКЦИЯ»:
Результат принёс несколько совпадений; выносим их на панель — кнопка «Файлы на панель». Дальше просто: на каждый файл жмём F3 (это встроенный просмотрщик) и в нём еще F3, пока не встретим в тексте объявление нужной нам функции.
В нашем случае это файл common.php:
# Функция возвращает полный путь к файлу # если файла нет, то возвращается false # если второй параметр == false, используется каталог текущего шаблона # if ($fn = mso_fe('stock/page_out/page-out.php')) require($fn); function mso_fe($file, $dir = false) { if ($dir === false) $dir = getinfo('template_dir'); $file = $dir . $file; if (file_exists($file)) return $file; else return false; }
Таким образом mso_fe() позволяет сократить исходный код при подключении файлов шаблона. Она сама проверяет их реальное наличие и формирует полный путь на сервере. В шаблоне у нас меньше кода и он становится более понятным.
Изучение «ядра» системы
Я рекомендую начать с common.php, поскольку там не очень много функций, но все они доступны в любой части системы. Этот файл сформировался таким образом, чтобы упростить написание кода в шаблонах, плагинах или админ-панели.
Именно здесь можно найти ответ на большинство вопросов, которые задают новички-вебмастера. Или узнать некоторые интересные возможности, о которых многие даже не догадываются.
Список функций
В своей работе я использую Notepad++, где включил плагин Function List. В итоге справа у меня всегда отображается список функций php-файла.
Сам плагин устанавливается стандартно через Plugin Manager
Я уже рассказывал о Notepad++ в качестве IDE для PHP.
Связи и зависимости
В этом легко запутаться: в файле подключаются другие файлы, в них — другие файлы и т.д. Функция вызывает другую функцию, та — третью и так до «бесконечности». Иногда, для «прочищения мозгов», бывает полезным пройтись по всей такой цепочке и выяснить работу каждого звена.
Уметь быстро находить нужную информацию
Запомнить всё нереально. Поэтому нужно лишь держать в голове способ нахождения нужной информации. Я, например, не помню всех параметров функции mso_get_pages(), поэтому я просто открываю этот файл и смотрю код.
Это же самое касается новых и «больших» библиотек, вроде шаблонизатора Page_out. Какие-то методы выводят результат по echo, а какие-то по return. Открываем в Notepad++, находим нужный код, читаем как книгу.
Справочники
PHP — язык программирования, который сформировался «стихийно». Это отлично видно по строковым функциям, в которых нет однотипного вызова или указания аргументов. В одних случаях первый параметром идет подстрока, вторым — строка. В других — всё наоборот. Или именование функций — там вообще полный «зоопарк». Чтобы во всём этом не путаться, следует под рукой держать справочник по PHP. В гугле без труда находятся и электронные версии в нужном формате (в .chm удобней).
Иногда бывает полезным и посещение официального сайта PHP. В комментариях часто встречается интересный и полезный код.
Практика. Практика. Практика
Начать с простого. Не нужно браться за что-то «супер-пупер» и упереться в то, что не знаешь как сделать. При (само)обучении вначале изучают теорию, после эту теорию применяют на практике. Не знаете с чего начать? Ок. Вот список заданий:
- Написать свой компонент на основе существующего.
- Написать свой компоненты с нуля. С опциями. С css-стилями.
- Сделать свой css-профиль под D2. Красный, зеленый, синий. Еще один.
- Написать свой main-шаблон для D2. С css-стилями.
- Придумать свой type_foreach-файл/info-top/файл.
- Научиться использовать custom-файлы. Зафиксировать компоненты. Отключить их выбор в админ-панели.
- Сделать свой вывод главной.
Думаю, что эти простые задачи самостоятельно выполненные, принесут в сто раз больше пользы, чем комфортное и ни к чему не обязывающее прочтение мануалов.
Комментариев: 9 RSS
1Андрей01-03-2013 12:31
> Написать свой компонент на основе существующего.
Имеется ввиду компонент == плагин?
2Николай Громов (nicothin)01-03-2013 13:44
Страница после попытки авторизоваться в комментах через фейсбук (php error-ы исключительно)
Для Notepad++ версий 5 и 6 в сети немало инструкций как поставить плагин Function list, ибо в менеджере плагинов его нет. (у меня версия 6.1 — нету)
3Аноним01-03-2013 14:11
Наверно совпало со сбросом кеша. Точнее не скажу.
4Ольга02-03-2013 16:31
Добрый день, уважаемый Макс!
Пользуюсь Вашим сайтом, очень довольна. Но есть одно "но". На моем сайте много картинок - он больше визуальный, крайне важно рассматривать детали. А по ширине позволено добавлять картинки только до 600 пикселей.
Скажите, пожалуйста, есть ли функция, позволяющая при желании увеличивать картинку?
Или можно расширить "поля" - сайдбар ведь только с одной стороны, а другая сторона пустует!
Идеальной ширина картинок будет 800-900 пикселей.
Очень жду ответ! Мучаюсь который месяц...
5Аноним02-03-2013 19:02
Ольга, вы можете при загрузке изображения указать максимальный размер в соответствующем поле. Или вовсе снять опцию и отключить изменение размера. Тогда сохранятся исходные.
6Аноним02-03-2013 20:08
Благодарю за то, что ответили, уважаемый Макс!
Но при ширине > 600 пикс. исходная картинка вылезает за пределы белого, основного поля, и заходит на сайдбар - получается неэстетично!
Для меня это выросло в целую проблему - нужно, чтобы картинка или при клике увеличивалась в новом окне, или чтобы само поле было шире - без "съедающих" пространство полей (здесь они серые.
Помогите мне, пожалуйста, это очень важно - чтобы на сайте были большие картинки, а не крошечные)
Спасибо!
7kirovmeb03-03-2013 06:43
Плагин lightbox вам в помощь
8Аноним03-03-2013 07:06
Вы можете размещать небольшие картинки (миниатюры) в тексте с помощью готового кода image в Загрузках. По клику на картинку автоматом откроется большая. Для красивого эффекта автивируйте плагин lightbox или colorbox. Когда много картинок, такой способ более приемлем для посетителей.
Второй вариант — изменить ширину контента и/или всего сайта в стилиях шаблона.
9Ольга03-03-2013 11:37
Добрый день, уважаемый Макс!
Благодарю Вас! Я открыла для себя галерею! Как красиво теперь стало!! :)
Маленький вопрос – когда я делаю подпись под фото, ее будет так же индексировать поисковик, как текст в поле блога? Или лучше писать текстом в поле, или и там и там?
Это очень важно.
И важный вопрос по поводу увеличения ширины контента и всего сайта – я сколько ни билась (еще со времен освоения сайта), не нашла места, где его исправляют! Не могу найти путь в «стили шаблона» - прошу, подскажите! Везде была по много раз –ничего похожего на изменение ширины сайта нет ((
Буду очень ждать ответ! Спасибо Вам!!