Геокодирование в shop items

#
Геокодирование в shop items
Здравствуйте! Возникла необходимость подключить геокодинг от гугл на сайт
Есть вот такой код ТДС:

$aPropertyValues = Core_Entity::factory('Property_Value_String')->getAllByProperty_id(184);

foreach($aPropertyValues as $oPropertyValue)
{
    if($oPropertyValue->value != ""){
      
$gApiKey = "AIzaSyDcd4oHEy6bhlprBIGoeIke0-aJzmgDbfc";
      
$adValue =   $oPropertyValue->value;   
      
$oAddress = preg_replace("/ /","%20", $adValue);
      
$sUrl = 'https://maps.googleapis.com/maps/api/geocode/json?key=' . $gApiKey . "&address=" . $oAddress;
      
$oAnswer = json_decode(file_get_contents($sUrl),true);

$aLat = $oAnswer['results'][0]['geometry']['location']['lat'];
$aLng   = $oAnswer['results'][0]['geometry']['location']['lng'];   
      
   $Shop_Controller_Show
      ->addEntity(Core::factory('Core_Xml_Entity')
      ->name('items_coords')
         ->addEntity(Core::factory('Core_Xml_Entity')->name('lat')->value($aLat))
         ->addEntity(Core::factory('Core_Xml_Entity')->name('lng')->value($aLng))
      );
    }
}

Шаблон XML

<xsl:template match="shop_item" mode="json">
   <xsl:if test="property_value[tag_name='address']/value !='' or property_value[tag_name='address']/value !=' '">
      <xsl:variable name="group" select="shop_group_id"/>
      <xsl:variable name="lat" select="/informationsystem/items_coords/lat"/>
      <xsl:variable name="lng" select="/informationsystem/items_coords/lng"/>
      {
      title: "<xsl:value-of disable-output-escaping="yes" select="name"/>",
      address: "<xsl:value-of disable-output-escaping="yes" select="property_value[tag_name='address']/value"/>, Зеленоград, Москва, Россия",
      lat: <xsl:value-of select="$lat" />,
      lng: <xsl:value-of select="$lng" />,
      img: "<xsl:value-of disable-output-escaping="yes" select="dir"/>/<xsl:value-of disable-output-escaping="yes" select="image_small"/>",
      category: "<xsl:value-of select="//shop_group[@id=$group]/name"/>",
      icon: "<xsl:value-of select="//shop_group[@id=$group]/property_value[tag_name='icon']/value"/>",
      <!--featText: "Fixed Price $99",-->
      rating: "<xsl:value-of select="comments_average_grade" />",
      link: "<xsl:value-of disable-output-escaping="yes" select="url"/>"
      }
      <xsl:if test="position() != last()">
         <xsl:text>,</xsl:text>
      </xsl:if>
   </xsl:if>
</xsl:template>

и собственно ответ от xml

   <items_coords>
      <lat>56.0018273</lat>
      <lng>37.2107336</lng>
   </items_coords>
   <items_coords>
      <lat>55.9741183</lat>
      <lng>37.1602694</lng>
   </items_coords>

Они появляются, но вопрос в том, где я ошибся почему у меня эти данные не попадают в xsl темплейт в частности в переменные $lat и $lng?
Помогите пожалуйста.

PS В какое место в ТДС надо засунуть этот кусок, что бы он заработал как надо?

Спасибо.

В говно может вступить любой желающий. (с)
Модератор
#
Re: Геокодирование в shop items
Проверьте Xpath пути в XSL. Сейчас видно следующее: говорим о shop_item, добавляем данные в Shop_Controller_Show, и внезапно:

<xsl:variable name="lat" select="/informationsystem/items_coords/lat"/>
<xsl:variable name="lng" select="/informationsystem/items_coords/lng"/>


Откуда тут появился informationsystem - непонятно.
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Геокодирование в shop items
да, действительно ошибся в Xpath пути.
Теперь другое возникло, теперь в любом item не важно есть ли у него адрес или нет, появляется один и тот же адрес.
echo $aLat, $aLng;
выводит разные адреса, а  так получается что у всех объектов тот же самый адрес. Какое условие мне надо использовать?
В говно может вступить любой желающий. (с)
#
Re: Геокодирование в shop items
Rewired писал(а):
<xsl:variable name="lat" select="/informationsystem/items_coords/lat"/>

Почему вы пытаетесь в XSL получить данные из informationsystem ?
Когда вы их кладете в контроллер магазина Shop_Controller_Show в вашем коде:
Rewired писал(а):
$Shop_Controller_Show
      ->addEntity(Core::factory('Core_Xml_Entity')
      ->name('items_coords')
         ->addEntity(Core::factory('Core_Xml_Entity')->name('lat')->value($aLat))
         ->addEntity(Core::factory('Core_Xml_Entity')->name('lng')->value($aLng))
      );
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Геокодирование в shop items
Я исправил уже, теперь данные идут, но для всех элементов они одинаковые, хотя в тдс они разные
В говно может вступить любой желающий. (с)
#
Re: Геокодирование в shop items
вот поправленный темплейт:

<xsl:template match="shop_item" mode="json">
   <xsl:variable name="group" select="shop_group_id"/>
   <xsl:variable name="formated-address" select="/shop/items_coords/formated-address"/>
   <xsl:variable name="lat" select="/shop/items_coords/lat"/>
   <xsl:variable name="lng" select="/shop/items_coords/lng"/>
   {
   title: "<xsl:value-of disable-output-escaping="yes" select="name"/>",
   address: "<xsl:value-of select="$formated-address" /><!--<xsl:value-of disable-output-escaping="yes" select="property_value[tag_name='address']/value"/>, Зеленоград, Москва, Россия-->",
   lat: <xsl:value-of select="$lat" />,
   lng: <xsl:value-of select="$lng" />,
   img: "<xsl:value-of disable-output-escaping="yes" select="dir"/>/<xsl:value-of disable-output-escaping="yes" select="image_small"/>",
   category: "<xsl:value-of select="//shop_group[@id=$group]/name"/>",
   icon: "<xsl:value-of select="//shop_group[@id=$group]/property_value[tag_name='icon']/value"/>",
   <!--featText: "Fixed Price $99",-->
   rating: "<xsl:value-of select="comments_average_grade" />",
   link: "<xsl:value-of disable-output-escaping="yes" select="url"/>"
   }
   <xsl:if test="position() != last()">
      <xsl:text>,</xsl:text>
   </xsl:if>
   
</xsl:template>

вот ответ от этого темплейта
<script>
         var mapMarkers = [
         
{
title: "Ardo A 56V4 ED white",
address: "ул. Юности, 2 строение 1, Зеленоград, Москва, Россия, 124482",
lat: 56.0018273,
lng: 37.2107336,
img: "/upload/shop_3/2/0/7/item_207//small_item_207.jpg",
category: "Кафе",
icon: "icon-teacup",

rating: "0",
link: "/locations/kafe/ardo-companies-are-a-56v4-ed-white/"
}
,
{
title: "Zanussi ZCE 560 MW",
address: "ул. Юности, 2 строение 1, Зеленоград, Москва, Россия, 124482",
lat: 56.0018273,
lng: 37.2107336,
img: "/upload/shop_3/2/1/3/item_213//small_item_213.jpg",
category: "Кафе",
icon: "icon-teacup",

rating: "0",
link: "/locations/kafe/zanussi-zce-560-mw/"
}
,
{
title: "Кафе Андерсон",
address: "ул. Юности, 2 строение 1, Зеленоград, Москва, Россия, 124482",
lat: 56.0018273,
lng: 37.2107336,
img: "/upload/shop_3/2/0/6/item_206//small_item_206.jpg",
category: "Кафе",
icon: "icon-teacup",

rating: "3.5",
link: "/locations/kafe/kafe-anderson/"
}

         ];
      </script>

если делать echo переменных в ТДС то адреса выдаются разные
Где может быть ошибка?
В говно может вступить любой желающий. (с)
Модератор
#
Re: Геокодирование в shop items
Данные вы добавляете один раз контроллеру, почему тогда внутри shop_item считаете, что эти данные должны меняться?
Если добавляете несколько координат, то в своем XSL-коде вы это никак не обрабатываете
#
Re: Геокодирование в shop items
Есть вызов
<script>
         var mapMarkers = [
         <xsl:apply-templates select="shop_item" mode="json"/>
         ];
      </script>

В темплейте shop. echo из ТДС выводит разные адреса
Я не могу понять где я ошибся в обработке переменных в xsl шаблона или в ТДС
В говно может вступить любой желающий. (с)
Модератор
#
Re: Геокодирование в shop items
Rewired писал(а):
В темплейте shop. echo из ТДС выводит разные адреса

откуда echo у вас в template? может быть value-of? или вы в ТДС печатаете?

Rewired писал(а):
Я не могу понять где я ошибся в обработке переменных в xsl шаблона или в ТДС

еще раз: hostcms писал(а):
Данные вы добавляете один раз контроллеру, почему тогда внутри shop_item считаете, что эти данные должны меняться?
Если добавляете несколько координат, то в своем XSL-коде вы это никак не обрабатываете
#
Re: Геокодирование в shop items
Нет echo именно в тдс для проверки корректности обработки запросов, а в xsl - <xsl:value-of select="$lng" /> При объявлении этой переменной xsl:variable name="lng" select="/shop/items_coords/lng"/>
В говно может вступить любой желающий. (с)
Авторизация