Recommended Posts

Вопрос чайника: Как создать дополнительный справочник в CMS Sitebill? 

 

Ситуация следующая: В CMS необходимо создать справочник "Районы", подчиненный для справочника "Регионы", соответственно "Города" (населенные пункты) должны быть подчинены "Районам". Районов предполагается не одна сотня, по ним будет работать поиск и простым вариантом Select_box не обойтись.

 

Кроме того, есть интерес к дополнительным (аналогичным) справочникам "Округа" (для Москвы) "Шоссе" и "Станции ж/д", которые должны быть привязаны к "Регионам", для удобства использования и организации поиска. 

 

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

 

Объясните, желательно с видео :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

и простой таблицей по варианту Select_box не обойтись.

 

Имеется в виду именно select_box или все-аки select_by_query? Именно второй подразумевает наличие таблицы в БД, а первый - ручное перечисление вариантов в соответствующем поле.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Имелось ввиду, что по варианту select_box (с ручным перечислением), будет полный пи...ц! Потому и нужен правильный справочник, основанный на таблице базы MySQL. Может выразился неправильно, спать пора!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тут дело не ограничится одной БД и таблицами в ней. Для каждой сущности придется сообразить какой-то конец в админке, что бы управлять (как справочники городов, стран). Либо из excel через csv вгонять всразу в mysql.

Следующая проблема - вывод. Напрмер, есть Регион и дочерние к нему Район (которых "не одна сотня"). Без некотороой доли инетрактивности вывод того же селектбокса Районов будет выглядеть как простыня всех раонов. Но тут, допустим решабельно через автокомплит (не комбобокс!).

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

 

На фоне всего этого само заведение справочника в БД - задача не сложная.

 

CREATE TABLE IF NOT EXISTS `re_имя_сущности` (  `имя_сущности_id` int(11) NOT NULL AUTO_INCREMENT,  `name` varchar(255) NOT NULL DEFAULT '',  `имя_родительской_сущности_id` int(11) UNSIGNED NOT NULL DEFAULT '0',  PRIMARY KEY (`имя_сущности_id`),  INDEX (`имя_родительской_сущности_id`)) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;

где имя_сущности - это route, subregion, station

а имя_родительской_сущности - это то к чему сущность привязана region, city, ...

 

Либо через Редактор Форм использовав привычные поля типа safe_string и select_by_query (тут главное создавать таблицы в порядке наследования от родителя к детям). Но Редактор Форм не генерирует код работы с новосозданной сущностью. Т.е. опять получаем вещь в себе без админки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

abushyk, вы видимо не обратили внимание на первую фразу темы... :) Про сущности, конечно, сказано хорошо, но суть вопроса упрощенно: нужны справочники "районы", "шоссе", "станции" и как сделать чтобы работало и искалось в поиске. Куда все указанные вами строки писать? Я-ж юрист, если не обозвать хуже... :) 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1. Создаем таблицу станции:

CREATE TABLE `re_stations` (  `stations_id` int(11) unsigned NOT NULL AUTO_INCREMENT,  `title` varchar(255) NOT NULL DEFAULT '',  PRIMARY KEY (`stations_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;        

2. Загружаем список станций в эту таблицу с помощью phpmyadmin, где в поле title будет название станции.

3. Идем в редактор форм и там добавляем колонку stations_id.

Тип select_by_query.

Название системное: stations_id

Название для человека: Станции

Название таблицы из которой получаем данные для связки: stations

Название ключа связки с другой таблице: stations_id

Название переменной для select_box: title

Заголовок строчки в select_box по-умолчанию: выбрать станцию

Значение строчки в select_box по-умолчанию: 0

Хранить значение в таблице: ставим галочку

4. Сохраняем.

Теперь в редакторе объявления появиться поле выпадающего списка со значениями из таблицы stations

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Скриншот PHPMyAdmin... так?

Сильно сложный конструктор.

Просто нажимаете вкладку SQL и туда копируете скрипт создания таблицы.

Потом внизу кнопочку GO(выполнить)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

нет. это поле по примеру из поста №7.

насколько я понял, это название станции из вновь созданного справочника

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Так просто нет. Для облегчения работы движка, для сеток не вытягиваются все значения полей из внешних таблиц. Есть вариант достать его с помощью локального grid_manager. Написать алгоритм?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Центральным местом, которое в 90% случаев обрабатывает запросы на извлечение нескольких записей-объявлений (всякого рода сетки, в отм числе и спецпредложения в боковых колонках и забор данных для нанесения на карту), является файл /apps/system/lib/frontend/grid/grid_constructor.php

В нем много разного функционала, но самый часто востребованный лежит в функции transformGridData

Именно она превращает идентификаторы значений из внешних таблиц в их текстовые эквиваленты.

 

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

 

Для этого

1. Делаем копию /apps/system/lib/frontend/grid/grid_constructor.php в /template/frontend/имя_вашего_шаблона/main/grid/local_grid_constructor.php

2. Удаляем из него все изнутри class Grid_Constructor extends SiteBill_Krascap {}, кроме transformGridData(){ее содержимое}

3. Сигнатуру class Grid_Constructor extends SiteBill_Krascap меняем на class Local_Grid_Constructor extends Grid_Constructor

4. В районе таких строк

if ( $item_array['region_id'] > 0 ) {
	$ra[$item_id]['region'] = $data_model->get_string_value_by_id('region', 'region_id', 'name', $item_array['region_id'], true);
}

добавляем еще одну

if ( $item_array['station_id'] > 0 ) {
	$ra[$item_id]['station'] = $data_model->get_string_value_by_id('stations', 'station_id', 'title', $item_array['station_id'], true);
}

5. В файле /template/frontend/имя_вашего_шаблона/main/main.php смотрим, есть ли функция __construct(). Если нет, то создаем ее внутри class frontend_main extends SiteBill_Krascap {} в виде 

public function __construct(){
	parent::__construct();
	require SITEBILL_DOCUMENT_ROOT.'/template/frontend/'.$this->getConfigValue('theme').'/main/grid/local_grid_constructor.php';    	$this->_setGridConstructor(new Local_Grid_Constructor());
}

NB. Если исходно файл local_grid_constructor.php уже есть в шаблоне, тогда из всего списка выполняем только пункт 4.

 

После этого, среди данных объявлений ваших сеток, будет доступно значение {$grid_data.station}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

После этого, среди данных объявлений ваших сеток, будет доступно значение {$grid_data.station}

Может быть всё-таки {$grid_items.station} ...

 

И кроме того после выполнения 5-го пункта - пустая страница.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Может быть всё-таки {$grid_items.station} ...

 

И кроме того после выполнения 5-го пункта - пустая страница.

 

верно. это я не подумав написал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Похожие публикации

    • Автор: metrpro
      Добрый день. Стоит задача - массово ГРАМОТНо удалить все изображений объявлений формата PNG (было настроено малое сжатие, занимают много места). Если физически с сервера удалить их не проблема, то как сделать, чтобы упоминание о них в самой базе re_data пропало?..
    • Автор: banzai72
      Не спеша начинаем добавлять города нашей области
      Но только в одном городе есть районы
      Сделали в справочниках привязку районов к этому городу, но почему то при добавлении объявления в других городах, всё равно к выбору встают районы.
      Хоть они и не привязаны к этому городу.....
      Кто знает в чём дело. Подскажите пожалуйста как исправить
       
    • Автор: Chernetskiy
      Есть проблема:  Например, есть желание разместить на сайте адреса и телефоны нотариусов или застройщиков, да много подобных вариантов... Однако некоторые справочники могут иметь 500-3000 строк однотипных данных. Можно было-бы всю эту информацию вывалить текстом на страницу сайта, но пользователь замучается читать эту портянку и ценности от такого сервиса будет не много.
      Логично эти данные засунуть в справочник, отсюда вопрос по выборке данных из кастомных справочников. 
      Создаю таблицу spravochnik, в ней строки id, fio, city, street, phone
      Создаю страницу сайта, где надо помимо какого-то описания надо будет подключить некий шаблон, например - spravochnik.tpl, в котором разместить форму поиска и вывод информации из справочника по запросу - фамилия, адрес, телефон, чтобы в итоге получилось, ищем нотариуса Иванова - получаем список всех нотариусов Ивановых с адресами и телефонами, или ищем нотариуса по адресу Москва, проспект Мира, и получаем ФИО, контакты и адреса всех, кто там находится. 
      Подскажите, как организовать такую задумку, чтобы не накосячить с кодом  . Думаю интересно будет многим...
       
    • Автор: Chernetskiy
      В архиве комплект справочников с моего сайта - realty-centrum.com, состав можно посмотреть на моем сайте - зарубежье, Москва и восточное направление Подмосковья, немного Калужской области и Краснодарский край. В других папках базы Краснодара, Крыма, Ленинградской области, Москвы и области, Нижнего Новгорода и Сургута.
    • Автор: pisarev70
      Прошу помочь, у меня возникла вот такая проблема. Я хотел к региону привязать город, к городу район, к району метро и улицы. В общем редактировал таблицы и до того наредактировался, что похоже нарушил связь между таблицами, так что сейчас вообще не чего не выходит. Вообщем вот сайт мой crureal.com База данных справочников в системе присутствует, но не чего не выводиться. Подскажите в чем тут дело?