Наверх

Блог RSS

Сортировка: По дате ↓ По просмотрам

Оптимизация сайта на MODX Revolution — уменьшение времени загрузки страницы

10 апреля 2013, 15:17

Советы по оптимизации сайта штатными средствами MODX

Всегда вызывайте сниппеты кешируемыми


Многие разработчики привыкли писать так:
[[!getResource?
  &parents=`5`
  &tpl=`tpl.news`
]]
Это в корне неверно. Убирайте восклицательные знаки везде. Исключение составляют те сниппеты, которые обрабатывают какую-то информацию, которая поступает от пользователя, т. е.:
  • FormIt (пользователь заполняет форму и сниппет должен данные обработать);
  • Login, Register (точно так же — обработка пользовательских данных, например, логин и пароль);
  • getPages (ссылки на разные страницы формируются с GET-параметрами, типа /?page=3, соответственно сниппет должен обработать этот GET-параметр);
  • Ну и другие сниппеты, например, на моем сайте — это сниппеты Loginza для авторизации и TicketsComments, с помощью которого можно оставлять комментарии к статье.
Остальные сниппеты (такие как Wayfinder, getResources, Breadcrumb и пр.) должны вызываться без восклицательного знака.
Читать дальше

Новый дизайн, новый движок — Перенесли narkohelp.ru на MODX REVO

10 апреля 2013, 12:35

Перенесли один из старейших сайтов по тематике лечения разных видов зависимости (http://narkohelp.ru/) на MODX Revolution.

Скриншот сайта narkohelp.ru
Скриншот сайта narkohelp.ruСкриншот сайта narkohelp.ru

.

.

.

.

.

.


Читать дальше

ООП офигенная штука!

09 апреля 2013, 17:17

Наконец-то я решил попробовать ООП. Ну что ж, друзья… Я подсел и конкретно. Теперь многое хочется переписать на ООП. Каким же я был слепым!

А всего-то — маленькая доза. Решил сделать проверку на то, имеет ли пользователь возможность просматривать свойства объекта или нет. И если нет — выводить ошибку. Так как это пригодится еще много где, решил вставить этот функционал (правильнее, наверное, «метод») прямо в класс самого объекта.

После генерации схемы и модели для работы со своими таблицами в базе, я получил файл, в котором мой новый объект описывался так:
class Calls extends xPDOSimpleObject {}
И я мог делать со своим объектом все, что хотел — то есть, getObject, getCollection, newObject, get, set

А тут взбрело в голову дописать функционал прямо в класс
Читать дальше

Плагин для редиректа если страница перенесена или изменен URL страницы

09 апреля 2013, 17:14

Надоело мне проставлять вручную редиректы, когда SEO-шники меняют URL (для лучшего соответствия страницы запросам) и просят сделать так, чтобы страница из индекса не вылетела.

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

Теперь решил поднатужится и сделать максимально автоматизированную систему, которая позволит не только переносить ресурсы, но и менять им псевдонимы, не беспокоясь о редиректах.
Читать дальше

Небольшой плагин для редиректа если страница перенесена

09 апреля 2013, 17:04

Переношу один сайт на MODX. Решили несколько изменить структуру сайта и некоторые страницы были перенесены на верхний уровень (а некоторые — наоборот внутрь общего контейнера).

Чтобы не составлять вручную списки для редиректов написал небольшой плагинчик, который вычленяет из адреса alias, ищет по нему документ и редиректит на правильный адрес:
Читать дальше

Обработка большого количества документов на слабом хостинге

09 апреля 2013, 17:00

Иногда возникает необходимость обработать сразу большое количество ресурсов, например вдруг решили, что у всех отзывов должен быть URL /review-25.html (у каждого свой id), а сейчас на сайте около 200 отзывов и у них URL формировались обычным translit'ом (ну или не совсем обычным))). Все бы ничего, да вот хостинг слабенький и на нем жестко прописано ограничение на время выполнения скрипта. И максимальное количество документов, которые успевают обработаться — 10-15.

Можно, конечно как-то оптимизировать скрипт, например, не использовать процессоры, можно вносить изменения прямо в базу через phpMyAdmin, можно запускать скрипт 20 раз вручную, пока не обработаются все ресурсы… Каждый выбирает сам.

Для себя я сделал сниппет для пошаговой работы php-скрипта, который вполне может обрабатывать и ресурсы MODX.
Читать дальше

Пара советов о том, как писать свои сниппеты

09 апреля 2013, 16:56

MODX не предъявляет высоких требований к разработчику. Если ты немного знаешь HTML, то можешь сделать свой сайт без труда:

Менюшки — Wayfinder
Вывод новостей — getResources

Просто правильно пропиши параметры вызовов и вставь в шаблон HTML — вот и готов сайт.

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

Снова о кешировании. Генерируем меню только один раз

09 апреля 2013, 16:43

Иногда бывает необходимость сделать меню большим. Ну, реально большим и разветвленным. Например, как на сайтах fsknmsk.ru, medicinskiy-center.ru, www.withoutdrugs.ru, narcononekb.ru

Если Wayfinder вызывается кешируемым, т. е. [[Wayfinder &startId=`0`]] (без восклицательного знака), и изменения на сайте вносятся нечасто, то проблем особых нет — после первого посещения каждой страницы, вывод сниппета кешируется и для этой страницы код меню уже не генерируется.

Если изменения вносятся часто, но на меню они особо не влияют (например, просто выкладываются новости или статьи, которые в меню не появляются), то используем getCache (статья)

Но что делать, если само меню постоянно меняется и новые пункты нужно обязательно отражать на всех страницах? Сниппет getCache хранит сгенерированный код, пока вы его не удалите вручную (или по таймеру). Обновление кеша после сохранения страниц на него не влияет.

Поделюсь своим решением, использующим самый простой вариант пользовательского кеширования в MODX
Читать дальше

Обрабатываем поля форм, добавляемые динамически

06 апреля 2013, 02:54


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

<div class="control-group">
  <label class="control-label" for="contractor_phone">Телефон</label>
  <div class="controls">
    <div class="input-append">
      <input type="text" id="contractor_phone" name="contractor_phone[]">
      <span class="btn" id="add_phone"><i class="icon icon-plus"></i></span>
      <div id="addPhones"></div>
    </div>
  </div>
</div>

<script type="text/javascript">
$("#add_phone").click(function() {
    $("#addPhones").append('<input type="text" name="contractor_phone[]">');
});
</script>
В итоге в $_POST['contractor_phone'] приходит массив телефонов.

Читать дальше

Авторизация

через сервис Loginza:


Шаблоны MODX

1 2 Дальше »

Объектная
модель
MODX