Отображение объявлений из дочерних категорий в доске объявлений

+27
2.17K
По мотивам: instantcms.ru/forum/thread14229-1.html
//тут должна быть картинко, но она не загружается в опере из-за косяка в ajaxfileupload.js
При добавлении и редактировании категории у вас появляется опция для возможности показа объявлений из дочерних, по отношению к текущей, категорий.

Установка

1. Выполняем запрос к БД через phpMyAdmin, либо другим удобным для вас способом (да, неудобным способом я запрещаю вам пользоваться)):
  1. ALTER TABLE `cms_board_cats` ADD `showchild` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `orderto`
Это делается один раз!

2. Открываем значит .patch файл и смотрим по порядку:
Строка:
  1. diff --git a/admin/components/board/backend.php b/admin/components/board/backend.php
Значит, что нам нужно открыть файл /admin/components/board/backend.php.
Далее видим:
  1. @@ -546,6 +546,7 @@
  2. $maxcols = $inCore->request('maxcols', 'int');
  3. $orderform = $inCore->request('orderform', 'int');
  4. $form_id = $inCore->request('form_id', 'int');
  5. + $showchild = $inCore->request('showchild', 'int', 0);
  6.  
  7. $obtypes = $inCore->request('obtypes', 'str', '');
Это значит:
После:
  1. 546 $maxcols = $inCore->request('maxcols', 'int');
  2. $orderform = $inCore->request('orderform', 'int');
  3. $form_id = $inCore->request('form_id', 'int');
Вставить:
  1. $showchild = $inCore->request('showchild', 'int', 0);
Также по аналогии можно разобрать весь файл, когда перед строкой стоит минус — значит её нужно удалить.

Продолжим.
После:
  1. 564 pubdate=NOW(),
  2. orderby='$orderby',
  3. orderto='$orderto',
Вставить:
  1. showchild='$showchild',
После:
  1. 636 $maxcols = $inCore->request('maxcols', 'int');
  2. $orderform = $inCore->request('orderform', 'int');
  3. $form_id = $inCore->request('form_id', 'int');
Вставить:
  1. $showchild = $inCore->request('showchild', 'int', 0);
После:
  1. 627 public='$public',
  2. orderby='$orderby',
  3. orderto='$orderto',
Вставить:
  1. showchild='$showchild',
После:
  1. 846 <input name="showdate" type="radio" value="0" <?php if (@!$mod['showdate']) { echo 'checked="checked"'; } ?> />
  2. Нет</label></td>
  3. </tr>
Вставить:
  1. <tr>
  2. <td><strong>Показывать объявления из дочерних рубрик? </strong></td>
  3. <td><input name="showchild" type="radio" value="1" checked="checked" <?php if (@$mod['showchild']) { echo 'checked="checked"'; } ?> />
  4. Да
  5. <label>
  6. <input name="showchild" type="radio" value="0" <?php if (@!$mod['showchild']) { echo 'checked="checked"'; } ?> />
  7. Нет</label></td>
  8. </tr>
3. Открываем файл /components/board/frontend.php.
После:
  1. 69 // Формируем список объявлений
  2. // Устанавливаем категорию
  3. if ($category['id'] != $model->root_cat['id']) {
Найти:
  1. $model->whereCatIs($category['id']);
Заменить:
  1. if($category['showchild']){
  2. $model->whereThisAndNestedCats($category['NSLeft'], $category['NSRight']);
  3. }else{
  4. $model->whereCatIs($category['id']);
  5. }
Найти:
  1. 100 $total = $model->getAdvertsCount($is_moder);
Заменить:
  1. $total = $model->getAdvertsCount($is_moder, false, false, $category['showchild']);
Найти:
  1. 112 $items = $model->getAdverts($is_moder, true);
Заменить:
  1. $items = $model->getAdverts($is_moder, true, false, $category['showchild']);
4. Открываем файл /components/board/model.php.
Находим:
  1. public function getAdvertsCount($show_all = false){
  2.  
  3. //подготовим условия
  4. $pub_where = ($show_all ? '1=1' : 'i.published = 1');
  5.  
  6. $sql = "SELECT 1
  7.  
  8. FROM cms_board_items i
  9.  
  10. WHERE {$pub_where}
  11. {$this->inDB->where}
Меняем на:
  1. public function getAdvertsCount($show_all = false, $is_users = false, $is_coments = false, $is_cats = false){
  2.  
  3. //подготовим условия
  4. $pub_where = ($show_all ? '1=1' : 'i.published = 1');
  5. $r_join = $is_users ? " LEFT JOIN cms_users u ON u.id = i.user_id \n" : '';
  6. $r_join .= $is_cats ? " INNER JOIN cms_board_cats cat ON cat.id = i.category_id" : '';
  7.  
  8. $sql = "SELECT 1
  9.  
  10. FROM cms_board_items i
  11. {$r_join}
  12. WHERE {$pub_where}
  13. {$this->inDB->where}
5. Проверяем.

Возможно это появится в релизе, потому что зачатки уже есть, например в шаблоне есть вывод категории объявления — очень удобно.
Демо такой категории.

На пиво keфир то есть: R267380710141, Z218725974703 или E127835577190, автомат сдачи не выдаёт, зато может принять на все три сразу одновременно))
0
Anonim Anonim 11 лет назад #
Отлично! Но как быть с дублями содержания?
+1
lokanaft lokanaft 11 лет назад #
Ммм, давайте, рассказывайте, где образуются дубли содержания.
0
Anonim Anonim 11 лет назад #
Сам текст объявлений повторяется и на странице предпросмотра и на странице объявления. Я не знаю, на сколько это правильно и безопасно
+3
Антон Антон 11 лет назад #
Я вообще убрал текст объявления со страниц категорий оставив только заголовки, это и убирает проблему повторяющегося текста и дает больше переходов на сами объявления. Судя по тому что так же сделано на мастодонтах типо авито, где то я прав.
+2
lokanaft lokanaft 11 лет назад #
Вот, Минона, хороший совет вам дал человек. А вообще ваша страница строится из разных объявлений в каждой рубрике, то есть в категориях уже нет повтора. А на странице с объявлением у вас другая разметка, титл, да и вообще куча других разных модулей, разбавляющих содержание страницы.
0
Anonim Anonim 11 лет назад #
Да, скорее всего
+2
Роман Роман 11 лет назад #
Еще раз спасибо! В релиз однозначно!!! Думаю многие с этим согласятся
0
Anonim Anonim 11 лет назад #
Видимо минусующие за БЕСПЛАТНО выложенный интересный хак, с этим не согласны
0
Man Man 11 лет назад #
На 1.9 подойдет или нет?
0
Майкл Майкл 11 лет назад #
Для доски объявлений Максисофта, этот хак актуален?
http://myinstantcms.ru/shop/modifikaci/uluchshenie-doska-objavlenii.html
0
lokanaft lokanaft 11 лет назад #
Понятия не имею, откройте код, сравните. Man, к вам это тоже относится.
0
Man Man 11 лет назад #
На 1.9 нет model.php и frontend.php для доски объявлений.
+2
lokanaft lokanaft 11 лет назад #
А если протереть монитор?)
+3
Man Man 11 лет назад #
Протер! Реально помогло!
0
Роман Роман 11 лет назад #
Нормально все работает
0
Роман Роман 11 лет назад #
Для доски объявлений Максисофта, этот хак актуален?
Все работает, я правда еще там немного под себя подгонял.
0
Man Man 11 лет назад #
На 1.9 работает даже без внесения изменений в файл model.php.
В файле model.php последняя строчка (указанная ТС) не такая {$this->inDB->where} , а вот такая {$this->where}
На что вообще влияет изменение этого файла? Я изменений не заметил.

И еще! При просмотре рубрик на Главной в Доске объявлений, указано что в рубрике «0» объявлений. Так и должно быть?
В рубрике есть подрубрики, куда и публикуются объявления. В подрубриках число указано, а в рубрике нет.
0
lokanaft lokanaft 11 лет назад #
Вы включите режим отладки и увидите, что в model.php всё же надо вносить изменения.
И еще! При просмотре рубрик на Главной в Доске объявлений, указано что в рубрике «0» объявлений. Так и должно быть?
И ещё, никогда не пишите о проблемах, когда сделали не так, как в инструкции. Для этого и вносятся изменения в model.php.

Если там строка не такая, значит используйте такую, как у вас, это сути не меняет.
0
Man Man 11 лет назад #
О проблемах не писал, а просто спросил, т.к. последняя строка на 1.9 отличается от 1.10.
Я сделал все как в инструкции.
0
lokanaft lokanaft 11 лет назад #
Это:
Я сделал все как в инструкции
Не есть равно этому:
На 1.9 работает даже без внесения изменений в файл model.php
Олег Васильевич я Олег Васильевич я 11 лет назад #
Комментарий удален
0
lokanaft lokanaft 11 лет назад #
При добавлении и редактировании категории у вас появляется опция для возможности показа объявлений из дочерних, по отношению к текущей, категорий
Олег Васильевич я Олег Васильевич я 11 лет назад #
Комментарий удален

Еще от автора

Ajax подгрузка контента для двойки
Ну что, товарищи, сегодня вы своими руками сможете сделать ajax подгрузку записей контента.
AJAX подгрузка комментов для двойки
Как следует из названия, дополнение ограничивает полный вывод всех комментов записи и позволяет пользователю при необходимости посмотреть следующие.
ContentWatch - проверка уникальности добавляемого контента для icms2
Компонент позволяет проверять уникальность текста с помощью сервиса Content-Watch.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.