Easy Board — доска объявлений для ModX Evo

Easy Board — это простейшая доска объявлений для CMS MODx Evolution. Хочется сразу отметить, что делалось под свой проект, поэтому сделано именно так, как сделано. Я конечно старался делать максимально универсально, но получилось уж как получилось. Функционал не велик, но вполне достаточен, чтобы сделать доску бесплатных объявлений на городской портал и т.п. ресурсы с минимальными усилиями.

  • Все объявления хранятся в отдельной таблице БД.
  • Рубриками являются документы ModX.
  • Присутствует возможность фильтровать объявления по городам.
  • Импорт объявлений из CSV

Easy Board 1.0

Доска объявлений состоит из:

  • модуля управления доской объявлений в админке сайта.
  • сниппета для вывода доски объявлений на сайте.

Скачать доску объявлений с github.com

Установка довольно стандартная:

  1. Скопировать папку assets в корень вашего сайта.
  2. Создать модуль Easy Board с кодом из файла module.easy_board.php
  3. Создать сниппет easy_board с кодом из файла snippet.easy_board.php
  4. Если необходимо сменить название таблицы БД или папки, куда будут грузиться фотографии, то это можно сделать отредактировав файл assets/module/easy_board/easy_board.config.php
  5. Запустить модуль Easy Board.

После этого следует прикинуть структуру документов (рубрик) в дереве MODx и начать размещать вызовы сниппета easy_board. Этот снииппет отвечает за вывод доски объявлений на сайте, добавление новых и редактирования старых объявлений. Для всего этого у сниппета есть много разных параметров.

Параметры сниппета easy_board:

action — viewboard (генерация доски объявлений), viewsingle (просмотр объявления), add (добавление нового объявления), edit (редактирование объявления), count (подсчет количества объявлений), searchform (вывод формы поиска)

context — с каким контекстом работает сниппет. По умолчанию «main». Это необходимо для организации нескольких каталогов на одном сайте (объявления, справочник, товары и т.п.)

limit — лимит количества объявлений на странице

paginate — 1 — выводить пагинацию, 0 — не выводить.

parent — id рубрики (можно несколько через запятую)

recursion — учитывать подрубрики или нет в значении параметра parent (1 — учитывать, 0 — не учитывать). По умолчанию — 0

parentIds — id родителя рубрик

city —  id города

cityIds — id города

user — id пользователя

idviewurl — id страницы для полного просмотра

idediturl — id страницы для редактирования объявления

idafterediturl — id страницы куда будет перенаправлен пользователь после редактирования объявления

txtedit — текст ссылки для редактирования объявления. По умолчанию «[редактировать]»

txtdelete — текст ссылки для удаления объявления. По умолчанию «[удалить]»;

published — статус публикации: 1 — опубликовано, 0 — неопубликовано, «» — пустое значение, все

annotationlen — длина аннотации (по умолчанию 150)

noresult — выводится, в случае, когда нет результатов. Например можно использовать в выводе результатов поиска.

jquery — 1 — подключить Jquery, 0 — отключить  (по умолчанию 1)

css — CSS- файл

tplview — чанк для шаблона генерации доски объявлений

tpledit — чанк для шаблона редактирования объявления

tpladd — чанк для шаблона добавления нового объявления

tplviewsingle — чанк для шаблона вывода объявления;

phpthumboption — опция для phpthumb при генерации превью «w=150,h=120,far=R,zc=1,bg=FFFFFF»

phpthumboptionSingle — опция для phpthumb при просмотре объявления «w=380,h=250,far=R,zc=1,bg=FFFFFF»

imagesize — ограничение на размер загружаемого изображения (1048576)

nophotoизображение для объявлений без фотографии

lang — языковой пакет

required — обязательные поля при добавлении или редактирования объявления. По умолчанию: «pagetitle,contact»

filter — дополнительная фильтрация по БД (синтаксис MySQL WHERE)
Например: &filter=`sc2.pagetitle LIKE ‘Я%’`

Псевдонимы для таблиц в БД:

  • eb — таблица объявлений
  • sc1 — таблица site_content (документы соответствующие рубрикам)
  • sc2 — таблица site_content (документы соответствующие городам)
  • wb — таблица web_users

sort — сортировка объявлений (синтаксис MySQL ORDER BY). По умолчанию «eb.createdon DESC». Псевдонимы для таблиц те же, что и в filter.

idsearchpage — для указания id страницы вывода результатов поиска по объявлениям

tplsearchform — для указания чанка с шаблоном формы поиска

 

[+eb.pagination+] — глобальный плейсхолдер (использовать в шаблоне сайта) для вывода пагинации доски объявлений

[+eb.pagetitle+] — глобальный плейсхолдер (использовать в шаблоне сайта) для вывода заголовка объявления на странице его просмотра

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

Вывод всех опубликованных объявлений из рубрики 1439

Просмотр объявления

Вывод всех объявлений пользователя в личном кабинете

При этом [!userId!] — сниппет с кодом

Редактирование объявления

Новое объявление

Форма поиска

Вывод результатов поиска

 

Нюансы:

  1. При удалении пользователем объявления — оно не удаляется, а переводится в статус неопубликованных. При этом в модуле удаляется полноценно, вместе с загруженной фотографией.
  2. При удалении модуля, на всякий случай фотографии оставляются.
  3. Авторизованный в админке менеджер имеет возможность управлять всеми объявлениями и на сайте (конечно в пределах стандартных политик доступа).

Импорт из CSV

Файл csv в первой строке должен содержать названия полей таблицы с объявлениями. Например:
«pagetitle»;»content»;»city»;»price»;»parent»;»createdon»;»contact»;»published»

следующие строки  — это уже сами объявления.

При этом сейчас сделано так, что рубрику и город скрипт распознает сам и присваивает номер документа, им соответствующего. Мне надо было так для своих нужд. Если у вас уже в файле csv в поле рубрик и города стоят соответствующие номера и распознавать их не надо, то удалите в файле easy_board.import.php строки:

 

6 комментариев

  1. Доброго времени суток).
    Я решил потестить Вашу доску). Столкнулся с проблемой: при попытке отредактировать объявление из Личного кабинета пользователя.
    Если попробовать редактировать объявление — выводится форма edit.tpl все нормально, но после сохранения данные в объявлении остаются неизменны (например название или текст или еще что либо). Но заметил если объявление снять с публикации-тогда оно нормально редактируется. А еще не удаляется картинка.
    Хотя из админки (из модуля) все проходит на ура.

  2. А еще у Вас в форме комментариев видимо что-то не так настроено. Если не ввести данные в website то коммент не оставляется).

  3. Простите, так сложно понять в чем дело. Проверьте параметры вызова сниппета для редактирования, правильно ли они указаны, не включен ли визуальный редактор (он ожет вставить свои символы). Я сейчас у себя проверил, названный Вами функционал у меня работает.
    Либо, если есть возможность, то дайте доступ к вашему тестовому сайту, я завтра попробую посмотреть в чем дело. Можете мне на почту отписаться dgparovoz@ya.ru

  4. Сайт пока находится на локальном Open Server’е =).
    Что я делал:
    1. Установил modx 1.0.15
    2. Прикрутил WebLoginPE
    3. Создал структуру ресурсов похожую на структуру, которая представлена на Вашем скрине (в начале топика).
    4. Назначил шаблон для ресурсов ModxHOST
    5. Прикрутил Easy Board.
    6. Зарегил 10 юзверей через WinLoginPE (через фронт)
    7. Одному юзверю создал около 10 объявлений (через фронт)
    В итоге:
    Объявления прекрасно отображаются в нужных рубриках и в «Личном кабинете».
    При редактировании объявления все поля редактируются и читаются из таблицы правильно. НО когда я нажимаю кнопку «Сохранить» объявление не сохраняется. При отсылке формы из edit.tpl (нажатие «Сохранить») просто происходит переход по адресу вида blabla.bla/index.php?id=10&eb=6 (отображается в браузере). На самом же деле после субмита кнопкой «Сохранить» происходит переход на ресурс modx с id равным id объявления. Например id главной страницы у нас «1», тогда если открыть для редактирования объявление с id=1 (в соответствии с таблицей easy_board) сделать нужные изменения полей и отослать форму («Сохранить»), то откроется Главная страница, при этом объявление останется неизменным.

    Заметил вот что: все нормально работает и редактируется только у одного объявления. Это объявление имеет ID такойже, как и ID ресурса ModX на котором происходит вызов action=’edit’. Тоесть у меня ID ресурса «Редактирование объявления» =10. Соответственно сохраняется после редактирования только объявление с id=10. Если поменять любому объявлению его id на 10, то оно тоже станет нормально сохраняться после редактирования.

    Другими словами такое ощущение что:
    if ( id_Easy_BoardObiavlenie == id_ModxResourceEdit){
    механизм редактирования и сохранения объявления
    }
    else просто переадресация на адрес ресурса с id = id_Easy_BoardObiavlenie;
    както так))

  5. Хм. Кажется понял в чем дело. Хотя по идее проблемы и при добавлении должны быть. Попробуйте включить ЧПУ, должно решить проблему. Я все забываю, что кто-то может сайт делать без включенного ЧПУ.
    А в следующем апдейте я исправлю. Если это в этом дело конечно.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *