Контактная информация

По всем интересующим вас вопросам связывайтесь при помощи контактной информации приведенной на этой странице!

telegram: @Accusser
skype: metsof
email: accusser@gmail.com

В социальных сетях...

Форма обратной связи

Авторизация

CamperManagement MODX Revolution

Сайдбар

CamperManagement – это дополнение (аддон) для управления парком транспортных средств для MODX Revolution, разработано и протестировано в 2.1.0-rc3 Марком Хамстра (Mark Hamstra). Представляет бекэнд менеджмент-модуль, а также универсальные сниппеты для настраиваемого, интегрированного опыта взаимодействия во фронтэнде сайта, как и следовало ожидать в рамках MODX.

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


Изменение компонентной терминологии и полей

Аддон использует такие термины, как "Campers", "Brands" и т.д. Все они стали переводимыми в процессе разработки, и Вы можете воспользоваться преимуществами Lexicon Management (в главном меню системы), чтобы изменить термины в компоненте. В версии 1.0 изменять можно 82 строки, от "CamperManagement" до " Car " и сообщений об ошибках.

В этом примере мы изменим название компонента ("CamperManagement") и ярлыки нескольких полей, чтобы привести его в соответствие с контекстом Earth Moving Equipment (землеройной техники).


Первый взгляд на использование LexiconManagement

Сначала мы должны перейти к пространству имени (namespace)"campermanagement". Когда Вы зайдете в Lexicon Management, Вы увидите выпадающий список, в котором по умолчанию выбрано "core ". Откройте и выберите campermanagement один.





У каждой строки есть имя (также называемое ключом - key), которое вызывается из кода для отображения определенного текста. Эти имена обычно узнаваемы и содержат смысл. Кнопка "Back to Overview " (на странице кемпер-списка в правом верхнем углу) имеет ключ "campermgmt.button.backtooverview", а "Options" имеет ключ "campermgmt.tab.options". Если Вы не можете найти то, что Вам нужно, просто введите искомый текст в окне поиска, в правой части экрана.


Изменение некоторых строк (Strings)

Мы изменим название аддона на "Used Equipment Management ". Этот тайтл отображается в строке "campermgmt". Просто сделайте два клика под “value” и введите свое значение.

Если Вы захотите обновить грид (кнопка обновления находится внизу), Вы увидите, что теперь текст отображается зеленым цветом, и появилась дата " Last modifed on " (дата последних изменений).



В Lexicon Management хорошо то, что Ваши корректировки сохраняются в базе данных. Это значит, что даже если вы обновите аддон или сам MODX, словарь новых определений должен сохранятся и не утериваться в процессе. Изменение лексических файлов, которые поставляются вместе с компонентом, отбрасываются при обновлении.

Теперь Вы можете обрадоваться и проверить результат, но сначала необходимо очистить кэш. Словари кэшируется по умолчанию, поэтому необходимо обновление кэша, чтобы что-то появилось. Таким образом, выполните действие “Site > Clear Cache”, а затем обновите страницу Вашего компонента. Если вы что-либо изменить в меню (ключ campermgmt или campermgmt.description), Вам также придется произвести обновление и там – похоже, что обычное обновление кэша не обязательно приводит к обновлению ключей. Просто удалите файл в core/cache/menu/mgr/menus/, который будет обновлен при следующем запуске обновления страницы.

Теперь Вы можете пойти дальше и изменить другие строки. Если у Вас нет поля "Plate", но доступно поле "Capacity", Вы можете заменить словарь "Place" на " Capacity", чтобы изменить это в компоненте. Фактическое имя поля для настройки фронт-энда не изменится (останется [[+plate]]), но все равно никто не обращает на это внимания после разработки.

Имена статусов

Вы также можете использовать разные имена для различных статусов через изменение лексикона строк – от campermgmt.status0 до campermgmt.status5.


Настраиваемые кнопки в верхней части грида Campers

Вы можете добавить одну кнопку в верхней части кемперс-грида с помощью системных настроек, а через Lexicon management можно изменить значение кнопки.

Создайте новую настройку с помощью системной настройки ключа campermanagement.overview. Для целей организации, установите его в пространство имен campermanagement. Его значение должно быть валидным ID ресурса (как и фронт-энд ресурса).

Теперь войдите в управление словарем и измените строку campermgmt.overview на то значение, которое Вы бы хотели, чтобы отображалось на кнопке.

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

Пример, который Вы могли бы использовать:

[[!cmCampers? &limit=`0` &sort=`keynr` &dir=`asc` &includeImages=`false` &status=`1,2,3,4` &tplOuter=`cmVoorraadOuter` &tplItem=`cmVoorraadItem` &optionsSeparator=` / `]]



cmVoorradOuter chunk:1

<tr>

<td rowspan="2">

<strong>[[+keynr:notempty=`Nr. [[+keynr]]`]]

[[+plate:notempty=`<br />[[+plate]]`]]</strong>

</td>

<td rowspan="2">

[[+brand]] / [[+type]] / [[+car:notempty=`[[+car]] /`]] [[+engine:notempty=`[[+engine]] /`]] Bouwjaar [[+manufactured:eq=`0`:then=`onbekend`:else=`[[+manufactured]]`]] / Gewicht [[+weight:eq=`0`:then=`onbekend`:else=`[[+weight]]`]] /

[[+beds]] Slaapplaatsen / Kilometerstand [[+mileage:eq=`0`:then=`onbekend`:else=`[[+mileage]]`]] / APK tot [[+periodiccheck:eq=`0`:then=`onbekend`:else=`[[+periodiccheck]]`]] /

[[+options]]

[[+remarks]]

</td rowspan="2">

<td>

[[+status:eq=`2`:then=`

<img src="/assets/templates/lighthouse/cmimg/banner_topper_sm.png" alt="Topper" />`]]

[[+status:eq=`3`:then=`<img src="/assets/templates/lighthouse/cmimg/banner_optie_sm.png" alt="In optie" />

`]]

[[+status:eq=`4`:then=`

<img src="/assets/templates/lighthouse/cmimg/banner_verkocht_sm.png" alt="Verkocht" />

`]]

</td></tr><tr><td>

<strong>€ [[+price]]</strong>

</td>

</tr>

В результате получается (прилагаются css):





Настраиваемые элементы контекстного меню

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

Это работает так же, как настраиваемые кнопки, с использованием системных настроек campermanagement.ctxmenu1 and campermanagement.ctxmenu2 с ID ресурса в качестве значения. В словаре нужно изменить кнопки campermgmt.ctxmenu1 и campermgmt.ctxmenu2. Они будут отправлять пользователя к URL сайта + index.php?id = + id в настройках системы + &cid= + ID транспортного средства. Рекомендуется использование со сниппетом cmCamperDetails, который выискивает параметр cid. Если ваш сайт использует различные настройки шлюза (не index.php, или другой параметр для ID), Вам нужно будет внести изменения в файл assets/components/campermanagement/js/mgr/widgets/grids/grid.campers.js – меню составляет около половины страницы.

Просто вызовите в ресурсе

 [[!cmCamperDetails]] 

и используйте

[[!+cm.<fieldname>]] 

placeholder-ы в контенте. Вы сами задаете границы.

Сниппет CmCamperDetails используется для обеспечения страницы " Vehicle Details " (детальная информация о транспортном средстве). На самом деле, сам по себе сниппет не возвращает никакой информации, но вместо этого он установит пакет placeholder-ов для использования в Вашем темплейте. Для получения информации о плейхолдерах, смотрите страницу [Placeholders.

display/ADDON/CamperManagement.Placeholders+you+can+use]

Сниппет CmCamperDetails требует "cid" url или доступный post параметр, которые используются для идентификации транспортного средства для отображения. Если доступного нет, он может отправить пользователя на определенный ресурс, или же сниппет выведет сообщение об ошибке. Так как Ваш шаблон будет выглядеть пустым без него, я предлагаю создание страницы вроде "Camper does not exist" (кемпер не существует). Также см. свойства cid*Action.

Свойства сниппета

&property

Описание

Значение по умолчанию

cidEmptyAction

0 | валидный ID ресурса. Если не 0, то будет 301 редирект пользователя на ID ресурса, указанного Вами. Срабатывает, когда не был найден "cid" url/post параметр.

1

cidInvalidAction

0 | валидный ID ресурса. Если не 0, то будет 301 редирект пользователя на ID ресурса, указанного Вами. Срабатывает, когда найденный "cid" параметр не является действительным кемпер- объектом (не найдено).

1

hideInactive

0 | 1. Если установлена 1, будет анализироваться cidInactiveAction, и либо отображается сообщение об ошибке, либо пользователь перенаправляется, если транспортное средство имеет статус 0 (не подтверждено) или 5 (неактивно).

0

cidInactiveAction

0 | валидный ID ресурса. Если не 0, то будет 301 редирект пользователя на ID ресурса, указанного Вами. Срабатывает, когда кемпер был найден, а ресурс – нет.

1

includeBrand

1 | 0. Определяет, должен ли связанный бренд-объект быть восстановлен. Когда нет необходимости, можно сэкономить время обработки.

1

includeOwner

1 | 0. Определяет, должен ли связанный владелец объекта быть восстановлен. Когда нет необходимости, можно сэкономить время обработки.

0

includeImages

1 | 0. Определяет, должны ли быть восстановлены связанные изображения. Когда нет необходимости, можно сэкономить время обработки.

1

includeOptions

1 | 0. Определяет, должны ли быть восстановлены связанные параметры. Когда нет необходимости, можно сэкономить время обработки.

1

tplImageOuter

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

cmDefaultTplImageOuter

tplImageItem

Chunkname. Темплейт для одного элемента изображений.

cmDefaultTplImageItem

tplOptionsOuter

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

cmDefaultTplOptionsOuter

tplOptionsItem

Chunkname. Темплейт для одной опции.

cmDefaultTplOptionsItem

tplOwner

Chunkname. Темплейт, используемый для отображения информации о владельце.

cmDefaultTplOwner

locale

Локаль (Locale), используемая для функции money_format, форматирующей цену.

it_IT

Как использовать этот фрагмент

Этот сниппет устанавливает placeholder-ы с префиксом см., и которые устанавливаются в зависимости от Вашей секции include*.

Убедитесь перед использованием, что placeholder-ы сниппета актуальны, так как потом их нельзя установить заново. И сниппет, и placeholder-ы, должны быть некэшированным, так как зависят от запроса.

Вот пример вызова сниппета:

[[!cmCamperDetails? &tplImageItem=`cmDetailImage` &includeImages=`1` &includeOwner=`0`]]



где cmDetailImage имеет следующий контент, который используется для скрипта слайд-шоу и использует phpthumbof сниппет:

<li>

<h3>[[+brand]] [[+type]] </h3>

<span>[[+image:phpthumbof=`w=620&h=360&far=c`]]</span>

<img src="[[+image:phpthumbof=`w=45&h=33&zc=1`]]" alt="thumb" />

</li>



В самом темплейте Вы просто используете placeholder-ы вроде этих:

<ul>

<li><span>Brand</span>[[!+cm.brand:default=` `]]</li>

<li><span>Type</span>[[!+cm.type:default=` `]]</li>

<li><span>Price</span>€ [[!+cm.price:default=` `]]</li>

<li><span>Car</span>[[!+cm.car:default=` `]]</li>

<li><span>Engine</span>[[!+cm.engine:default=` `]]</li>

</ul>

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

cmCampers можно использовать для агрегации данных на различных транспортных средствах в базе данных.

Свойства сниппета

Вы можете использовать следующие свойства в cmCampers для регулирования поведения и настроить так, как нужно Вам. Некоторые из них пересекаются со сниппетом cmCamperDetails.

&property

Описание

Значение по умолчанию

start

Возможность задать offset, чтобы игнорировать первых N автомобилей.

0

limit

Количество результатов, возвращающихся от сниппета. Установите 0 или реальное количество до бесконечности.

4

sort

Поле для сортировки. Принимаются любые поля в объекте cmCamper, но не все из них имеют смысл. Обратите внимание, что при сортировке по связанным единицам (марка, владелец), сортировка проводится по их ID и *not* имени. Когда searchFromRequest установлен на 1, сортировка может определяться url-параметром.

added

dir

asc | desc. Область сортировки. Когда searchFromRequest установлен на 1, сортировка может определяться sortdir url-параметром.

desc

includeBrand

1 | 0. Определяет, должен ли связанный бренд-объект быть восстановлен. Когда нет необходимости, можно сэкономить время обработки.

1

includeOwner

1 | 0. Определяет, должен ли связанный владелец объекта быть восстановлен. Когда нет необходимости, можно сэкономить время обработки.

0

includeImages

1 | 0. Определяет, должны ли быть восстановлены связанные изображения. Когда нет необходимости, можно сэкономить время обработки.

1

includeOptions

1 | 0. Определяет, должны ли быть восстановлены связанные параметры. Когда нет необходимости, можно сэкономить время обработки.

1

status

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

0. Неподтвержденный

1. Активный

2. Избранный

3. Условно продан

4. Продан

5. Неактивный

1,2,3,4

numimages

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

1

target

Целое число ID ресурса на странице детальной информации о кемперах. Будет использоваться с makeUrl для создания ссылки с дружественными url настройками, передающей "cid" в URL с ID кемпера.

2

tplOuter

Chunkname. Внешний темплейт , охватывающий весь свод результатов. Placeholders

cmDefaultTplOuter

tplItem

Chunkname. Темплейт единицы.

[Placeholders|display/ADDON/CamperManagement.Placeholders+you+can+use]

cmDefaultTplItem

tplImageOuter

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

[Placeholders|display/ADDON/CamperManagement.Placeholders+you+can+use]

cmDefaultTplImageO

tplImageItem

Chunkname. Темплейт для одного изображения.

[Placeholders|display/ADDON/CamperManagement.Placeholders+you+can+use]

cmDefaultTplImageItem

tplOptionsOuter

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

[Placeholders|display/ADDON/CamperManagement.Placeholders+you+can+use]

cmDefaultTplOptionsOuter

tplOptionsItem

Chunkname. Темплейт для одной опции.

[Placeholders|display/ADDON/CamperManagement.Placeholders+you+can+use]

cmDefaultTplOptionsItem

tplOwner

Chunkname. Темплейт для отображения информации о владельце.

[Placeholders|display/ADDON/CamperManagement.Placeholders+you+can+use]

cmDefaultTplOwner

searchFromRequest

1 | 0. Если 1, также будут проверяться запросы POST и GET для статуса, по которому совершается фильтрация, поля сортировки и области сортировки. Поля, которые он выбирает и замещает на свойства сниппета: status, sort, dir.Когда он находит фильтр статуса, устанавливает placeholder "statusfilter", который Вы можете использовать в своем темплейте.

0

locale

Локаль, используемый для функции money_format, которая форматирует цену.

it_IT

toPlaceholder

При установке будет установлен placeholder, ключ, который в результате функции передается toPlaceholder.




Пример использования


Пример 1: Простой обзор последних дополнений



Перезапишите чанк элемента и чанк элемента изображения, получив последние 4 добавленных транспортных средства и ссылки на информационную страницу с ID 12.




1



[[!cmCampers? &tplItem=`cmTplItem` &tplImageItem=`cmTplImage` &limit=`4` &target=`12`]]



чанк cmTplItem:



<li onclick="location.href='[[+url]]'">

<div class="status[[+status]]"></div>

[[+images:default=`<img src="/assets/templates/lighthouse/cmimg/ph.png" />`]]

<h4><a href="[[+url]]" title="[[+brand]] [[+type]]">[[+brand]] [[+type]]</a></h4>

<ul>

<li><span>Manufactured:</span> [[+manufactured]]</li>

<li><span>Mileage:</span> [[+mileage]]</li>

<li><span>Engine:</span> [[+engine]]</li>

<li><span>Price:</span> € [[+price]]</li>

</ul>

</li>



С помощью дополнительной CSS-стилизации, вот результат (очевидно, кое-что можно было бы и улучшить):





Пример 2: слайд-шоу транспортных средств, которые помечены как избранные




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



Таким будет наш темплейт (он соответствует скрипту нашего слайд-шоу):



<div id="slideshow">

[[!cmCampers? &status=`2` &tplOuter=`cmHomeOuter` &tplItem=`cmHomeItem` &tplImageItem=`cmHomeImage` &searchFromRequest=`0` &target=`12` ]]

</div>



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



cmHomeOuter, который выводит только внутренний stuff вместо неупорядоченного списка по умолчанию. Мы могли бы также вставить контейнер div из темплейта (упомянутого выше) в наш внешний темплейт.




[[+items]]



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



<div class="slide">

<a href="[[+url]]" title="[[+brand]] [[+type]]" >[[+images]]</a>

<div class="slider-infobox">

<p><a href="[[+url]]" title="[[+brand]] [[+type]]" >[[+brand]] [[+type]] - € [[+price]]</a></p>

</div>

</div>



cmHomeImage, который просто вставляет тег изображения.



<img src="[[+image]]" alt="[[+brand]] [[+type]]" />



Из описанного выше получается, что во front-end одного элемента выводится:



<div class="cycle">

<a href="aanbod/details.html?cid=12" title="TEC Siena Saphir 510 TR" ><img src="/assets/components/campermanagement/uploads/2011/12/cm25917-723.jpg" alt="TEC Siena Saphir 510 TR" /></a>

<div class="slider-infobox">

<p><a href="aanbod/details.html?cid=12" title="TEC Siena Saphir 510 TR" >TEC Siena Saphir 510 TR - € 5.999,00</a></p>

</div>

</div>



Скомбинировав с нашим скриптом слайд-шоу и CSS, мы получаем в результате:






Каждое изображение может состоять из нескольких, но если по умолчанию свойство numimages установлено на 1, сразу Вы этого не увидите. Используя чанки tplImageOuter и tplImageItem, Вы можете настроить мини слайд-шоу из изображений на странице обзора. Я думаю, что это интересная концепция, и если кто-то так сделал, или хотел бы сделать, хотелось бы узнать об этом. Вы можете связаться со мной через hello на markhamstra dot com.

Оба сниппета, cmCampers и cmCamperDetail, работают с теми же данными и позволяют включать/исключать определенные объекты со свойствами. Эта страница будет обзором различных placeholder-ов, которые Вы можете использовать. В некоторых чанках (например, tplImageItem), Вы может использовать также любой из родительских чанков, например, подробности о кемперах.

Употребляя cmCampers, используйте плейсхолдеры в своих чанках в кэшированном виде, чтобы предотвратить непредсказуемое поведение. Пример:

[[+brand]]



Употребляя cmCamperDetails, используйте плейсхолдеры с префиксом cm. (не забудьте точку), и убедитесь, что они вызываются некэшированными. Пример:


[[!+cm.brand]]


Специальный сниппет: cmCamper

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

tplItem Chunk

Плейсхолдер

Описание

url

Ресурс идентифицирует href-часть ссылки по свойству &target. Содержит url-параметр "cid" с ID кемпера в качестве значения.

owner

Зависит от свойства includeOwner. Если 1, он выведет результат свойства чанка tplOwner, если нет, вернет ID владельца.

images

В зависимости от свойства includeImages и numImages (> 0), будет заполнен содержанием свойства чанка tplImageOuter, который взамен заполняется содержанием свойства чанка tplImageItem для каждого элемента-изображения.

options

В зависимости от свойства includeOptions, вернет Ваши опции, как отформатированные tplOptionsOuter, в рамках которых находится чанк tplOptionsItem.


Чанки tpl*Outer (а также плейсхолдеры, установленные cmCamperDetails!)

tpl*Outer

Плейсхолдер

Описание

tplOuter

элементы

Содержимое всех чанков tplItem, с разделителем – косая линия. (\n)

tplImageOuter

изображения

Содержимое всех чанков tplImageItem, с разделителем – косая линия. (\n)

tplOptionsOuter

опции

Содержимое всех чанков tplOptionsItem с разделителем, указанном в свойстве &optionsSeparator сниппета cmCamper.

Кемперы (класс: cmCamper)

Плейсхолдер

Примечания

brand

Если не введен объект бренда (&includeBrand=`0`), будет выводиться только ID связанного объекта бренда. Остальное – это имя бренда.

type


place


car


engine


manufactured

Будет отформатирован d/m/Y с использованием strftime.

beds


weight


mileage


periodiccheck

Будет отформатирован d/m/Y с использованием strftime.

remarks

Хранятся чистыми, без HTML-тегов. Если использованная строка заканчивается в текстовой области замечаний, Вы, возможно, захотите применить модификатор вывода nl2br.

price

Форматируется с использованием money_format (включенных, если нет на Вашем устройстве) с использованием опций %!.2n

status

Статус ID (0-5 включительно):

0. Неподтвержденный

1. Активный

2. Избранный

3. Условно продан

4. Продан

5. Неактивный

statusname

Переведенная строка, связаная с Вашим статусом ID.

keynr


owner

Владелец объектно-реляционного ID, без дополнительной информации.

id

Уникальный ID кемпер-объекта

added

Форматированный d/m/Y timestamp объект был добавлен.

archived

Форматированный d/m/Y timestamp объект был заархивирован.



Опции (класс: cmOption, класс many-to-many: cmCamperOptions)

Плейсхолдер

Примечания

id


name



Бренд (класс: cmBrand)

Обычно нет прямого доступа, но заменяет placeholder бренда кемпера на им я бренда из этого объекта.

Владелец (класс: cmOwner)

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

Плейсхолдер

Примечания

firstname


lastname


email

Советуется не использовать в местах с общим доступом.

bank

Советуется не использовать в местах с общим доступом.

phone1

Советуется не использовать в местах с общим доступом.

phone2

Советуется не использовать в местах с общим доступом.

address

Советуется не использовать в местах с общим доступом.

postal

Советуется не использовать в местах с общим доступом.

city

Советуется не использовать в местах с общим доступом.

country

Советуется не использовать в местах с общим доступом.

Изображения (класс: cmImages)

Плейсхолдер

Примечания

camper

Ссылка на ID кемпера

rank


image

Связанный URL, можно использовать с phpthumbof для изменения размера




Не волнуйтесь, первый выпуск CamperManagement будет доступен на английском и голландском, а далее выйдут и другие языковые версии.