Jump to content
patrol

[Решено] Не могу получить переменную из header.tpl

Recommended Posts

Проблема такая в header.tpl есть код такой код

<body>
   <?php	
  include("SxGeo.php");
  $SxGeo = new SxGeo('SxGeoCity.dat');
  $ip = $_SERVER['REMOTE_ADDR'];
  $city = $SxGeo->get($ip);	
  $town=$city['city']['name_en'];
?>

но в  category.tpl, product.tpl я не могу вызвать переменную $town  ("Undefined variable: town"). Знания php не очень))

Подскажите как реализовать. Спасибо за помощь))

 

Edited by patrol

Share this post


Link to post
Share on other sites

Для начала...

За такое $_SERVER['REMOTE_ADDR']

Садись кол и проблемы в безопасности будут гарантированы

Это грубейшая ошибка культуры написания кода в opencart

Opencart используйте как FW

Используются $this->request->server и т.п.

Share this post


Link to post
Share on other sites

Так и не получится) Решением может стать написание своего класса в котором инициализируется и определяется город. В OpenCart этот класс можно внедрить как библиотеку (system/library) или хелпер (system/library/helper). в index.php его можно подключить и инциализировать, затем нужно добавить его в реестр, чтобы можно было пользоваться в контексте OpenCart. Если он (класс для определения геолокации) используется только в модулях, то можно инициализировать его только в модулях используя встроенный механизм для загрузки библиотек или хелперов.

Share this post


Link to post
Share on other sites

Конечно не можете, она ведь находится в области видимости метода render того объекта контроллера, в контексте которого используется (куда включается шаблон header.tpl). Используйте реестр, если вам нужно использовать её в другом контроллере. Например:

<body>
    <?php

        include("SxGeo.php");
        $SxGeo = new SxGeo('SxGeoCity.dat');
        $ip    = $_SERVER['REMOTE_ADDR'];
        $city  = $SxGeo->get($ip);    
        $this->registry->set('town', $city['city']['name_en']);

        // Обращаться к ней можно так
        var_dump($this->town);

        // Или так
        var_dump($this->registry->get('town'));

    ?>

Кстати, в $_SERVER['REMOTE_ADDR'] не всегда содержится реальный IP клиента ;)

Edited by ZeroHero

Share this post


Link to post
Share on other sites

Так и не получится) Решением может стать написание своего класса в котором инициализируется и определяется город. В OpenCart этот класс можно внедрить как библиотеку (system/library) или хелпер (system/library/helper). в index.php его можно подключить и инциализировать, затем нужно добавить его в реестр, чтобы можно было пользоваться в контексте OpenCart. Если он (класс для определения геолокации) используется только в модулях, то можно инициализировать его только в модулях используя встроенный механизм для загрузки библиотек или хелперов.

 Спасибо за совет)Могли привести краткий пример, как это сделать? Спасибо))

Share this post


Link to post
Share on other sites

Library system/library/SxGeo.php в нем одноименный класс геолокации. 

В index.php:

require_once(DIR_SYSTEM . 'library/SxGeo.php');

$SxGeo= new SxGeo('SxGeoCity.dat');
$registry->set('SxGeo', $SxGeo);

А в самом классе проще сделать конструктор, который будет обрабатывать IP и класс должен хранить город. Затем эти данные можно буде полуить в любом месте во так:

$this->SxGeo->town
Edited by halfhope

Share this post


Link to post
Share on other sites

Спасибо огромное) А можно можете расписать подробнее, извините за наглеж)))))))

Share this post


Link to post
Share on other sites

Проще так, без прослойки. Копируешь файл sxgeo.php в system/library/ потом в index.php после:

$request = new Request();
$registry->set('request', $request); //После занесения класса request в ресстр
Пишешь:

require_once(DIR_SYSTEM . 'library/sxgeo.php');

$SxGeo = new SxGeo('SxGeoCity.dat');
$registry->set('SxGeo', $SxGeo); 
Теперь берешь и вызываешь в любом месте движка:

$this->SxGeo->get($ip);
Вместо $_SERVER['REMOTE_ADDR] рекомендую использовать $this->request->server['REMOTE_ADDR]. Ясно?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.