Виталий Рыбачук

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

Recommended Posts

Добрый день!

Ситуация такая я добавил на сайт справочник поселков, на сайте все работает отлично.

Но я хочу записать их в XML  Яндекс выгрузки.

Вопрос следующий я добавляю в файл ( .. / apps / yandexrealty / site / site.php  )

в 1480 строке есть операторы добавляющие xml-тег <locality-name>,

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


            $rs .= '<locality-name>'.self::symbolsClear( $data_item['settlement_id'] ).'</locality-name>'."\n";


то в xml файл прописывается id-шник нужного поселка.

Вопрос : как сюда прописать именно название поселка?

 

Заранее благодарю!

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


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

Нужно создать локальный Грид, в нем прописать переменную и таблицу, после подключить

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


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

вот в этом файле я делал переменную чтобы выводить название поселка в заголовке объекта   

  ../ template / frontend / realia / main / grid / local_grid_constructor.php

вот так прописано в этом файле


 if ( $item_array['settlement_id'] > 0 ) {

      $ra[$item_id]['settlement']  =  $data_model->get_string_value_by_id('settlement',  'settlement_id', 'name', $item_array['settlement_id'], true);
}
               

куда именно этот файл нужно добавить?

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


Ссылка на сообщение
Поделиться на других сайтах
Только что, Виталий Рыбачук сказал:

чето Total Commander не находит такой файл.

или его нужно создать?

Файл лежит в корне сайта.

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


Ссылка на сообщение
Поделиться на других сайтах
В 16.04.2016 в 11:22, Виталий Рыбачук сказал:

Нашел.  

И что в нем нужно прописать?

 

 

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


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

все мимо)

локальный грид конечно хорошо, но к выгрузкам он имеет никакое отношение. Если ковыряем   .. / apps / yandexrealty / site / site.php

тогда ищем в нем protected function collectData() которая собирает данные для выгрузки. в ней есть набор блоков вида

if(isset($form_data_shared['country_id'])){
	$select[]='cr.name AS country';
	$leftjoin[]='LEFT JOIN '.DB_PREFIX.'_country cr USING(country_id)';
}

нужно тудаже добавить аналогичный

if(isset($form_data_shared['settlement_id'])){
	$select[]='setl.name AS settlement';
	$leftjoin[]='LEFT JOIN '.DB_PREFIX.'_settlement setl USING(settlement_id)';
}

что означает, что выбирая "обычные" данные нужно еще дополнительно взять значение поля name из таблицы settlement которая связана ключем  settlemen_id с нашими объявлениями.

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

И дальше в выводе вы уже можете делать

$rs .= '<locality-name>'.self::symbolsClear( $data_item['settlement'] ).'</locality-name>'."\n";

либо в настройках приложения для параметра apps.yandexrealty.city_from указать значение settlement а выгрузчик сам подставит нужное значение из указанного поля.

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


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

добавил я эти строки

if(isset($form_data_shared['settlement_id'])){
	$select[]='setl.name AS settlement';
	$leftjoin[]='LEFT JOIN '.DB_PREFIX.'_settlement setl USING(settlement_id)';
}

 

теперь вообще ничего не выгружает в файл

только это генериться

<generation-date>2016-04-20T16:26:17+03:00</generation-date>
</realty-feed>

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


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

имена primary_key в таблице re_settlement и имя элемента-поля выбора поселения в модели data совпадают?

название поселения в таблице re_settlement лежит в колонке с именем name ?

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


Ссылка на сообщение
Поделиться на других сайтах
54 минуты назад, abushyk сказал:

имена primary_key в таблице re_settlement и имя элемента-поля выбора поселения в модели data совпадают?

название поселения в таблице re_settlement лежит в колонке с именем name ?

Вроде все совпадает. Вот скрины из админки

01 edit_form.jpg

02 tables_value.jpg

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


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

По параметрам выглядит нормально.

В том жде site.php в той же функции найдите return $data; и перед ней поставьте echo $DBC->getLastError();

Потом запустите вызов выгрузки. Оно должно вывалить ошибку, если она есть. Только увидеть ее можно будет через "Исходный код страницы". Просто в окно скорее всего вывалится сообщение о невалидном хмл.

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


Ссылка на сообщение
Поделиться на других сайтах
9 минут назад, abushyk сказал:

По параметрам выглядит нормально.

В том жде site.php в той же функции найдите return $data; и перед ней поставьте echo $DBC->getLastError();

Потом запустите вызов выгрузки. Оно должно вывалить ошибку, если она есть. Только увидеть ее можно будет через "Исходный код страницы". Просто в окно скорее всего вывалится сообщение о невалидном хмл.

 

Вот че теперь выводит

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'settlement_id' in from clause is ambiguous

<?xml version="1.0" encoding="utf-8" ?><realty-feed xmlns="http://webmaster.yandex.ru/schemas/feed/realty/2010-06"><generation-date>2016-04-20T18:35:30+03:00</generation-date></realty-feed>

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


Ссылка на сообщение
Поделиться на других сайтах
if(isset($form_data_shared['settlement_id'])){
	$select[]='setl.name AS settlement';
	$leftjoin[]='LEFT JOIN '.DB_PREFIX.'_settlement setl USING(settlement_id)';
}

меняем на

if(isset($form_data_shared['settlement_id'])){
	$select[]='setl.name AS settlement';
	$leftjoin[]='LEFT JOIN '.DB_PREFIX.'_settlement setl ON dt.settlement_id=setl.settlement_id';
}

 

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


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

Видимо где-то еще в каких-то таблицах, кроме data и settlement  у вас фигурирует поле с именем settlemet_id. Поэтому при первой попытке словли ошибку.

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


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

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

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

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

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

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

Войти

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

Войти сейчас