Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


patrol

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 не очень))

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

 

Змінено користувачем patrol
Надіслати
Поділитися на інших сайтах


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

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

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

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

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

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

Надіслати
Поділитися на інших сайтах

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

Надіслати
Поділитися на інших сайтах

Конечно не можете, она ведь находится в области видимости метода 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 клиента ;)

Змінено користувачем ZeroHero
Надіслати
Поділитися на інших сайтах


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

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

Надіслати
Поділитися на інших сайтах


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
Змінено користувачем halfhope
Надіслати
Поділитися на інших сайтах

Проще так, без прослойки. Копируешь файл 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]. Ясно?
Надіслати
Поділитися на інших сайтах

  • 4 years later...

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.