Перейти к содержанию
Форум поддержки пользователей VamShop

Как вставить php код


Рекомендуемые сообщения

Здравствуйте!

 

Зависит от того, что за код.

 

Если не сложный, то через Админку - Расширения - Тэги пользователя.

 

Там для примера уже создан тэг с php кодом.

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

Ок, а в какую папку положить и как правильно указать путь к php файлу?

 

К примеру, если вызываемый файл example.php должен лежать в папке ExampleDirectory (ExampleDirectory/example.php)

 

куда положить папку ExampleDirectory и как правильно указать к ней путь?

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

Если в каталоге что-то нужно выводить, делайте через smarty метки, создавайте свою метку по аналогии например с /app/Vendor/smarty/vam_plugins/function.page_name.php

 

В любой шаблон в Админке - Оформление вставляйте свои метки.

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

Скорее всего, мне нужно немного другое.

 

Я хочу использовать готовую функцию для определения местоположения посетителя по ip адресу. Для этого имеется файл SxGeo.php

 

В Расширения-Теги пользователя я создал свой тег, в котором мне необходимо описать вызов функции SxGeo.php: include("путь/SxGeo.php");

 

чтобы в дальнейшем, при вызове тега вывести город посетителя.

 

В какую папку на сервере мне положить файл SxGeo.php и как правильно указать к ней путь?

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

В /app/Vendor/SxGeo/

 

Затем подключать:

App::import('Vendor', 'SxGeo', array('file' => 'SxGeo.php'));
$geo = new SxGeo();

 

Как-то так.

 

А затем уже в зависимости от того, что именно нужно, если просто вывести текст, то просто через echo выводите.

 

т.е. создаёте свою смарти-метку и её просто вставляете в любой шаблон.

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

Ну я ж для примера привёл.

 

Вы смотрите как у Вас класс называется в SxGeo.php

 

Название своего класса указывайте.

 

Вообще, по идее, если б Вы знали  основы php хотя бы, дело намного легче шло бы.

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

Я ж Вам говорил, что более-менее сложный код лучше делать через смарти-метки.

Сделал смарти-метку {geo_city}

Которая выводит город посетителя.

 

Вставляйте метку {geo_city} в любой шаблон.

Ссылка на сообщение
Поделиться на другие сайты
Можно попробовать через сессию выводить, а не меткой, например в /app/Controller/PagesController.php после:
 
// Get the configuration information
global $config;
$config = $this->ConfigurationBase->load_configuration(); 
 
 
 
добавить:
 
  App::import('Vendor', 'GeoCity', array('file' => 'GeoCity'.DS.'SxGeo.php'));
  $SxGeo= new SxGeo(APP.'Vendor/GeoCity/SxGeo.dat');
  $city = $SxGeo->get($_SERVER['REMOTE_ADDR']);
 
  $_SESSION['city'] = $city['city']['name_ru'];
 
 
 
и в любом шаблоне в админке попробовать вставить {$smarty.session.city}
Ссылка на сообщение
Поделиться на другие сайты

Сделал так, но что-то все равно иногда не корректно работает.

 

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

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

Наверное кэширует всю страницу целиком.

 

Хотя может попробовать перед App::import добавить что-то типа unset($_SESSION['city']);

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

Понятно, а дайте пример адреса для Вашего города, просто что б поэкпериментировать с разными городами, посмотреть, что и как выводит.

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

Вам ip в смысле? 178.205.108.65 - это Казань, 46.20.67.44 - это Самара. Тут нужно одновременно (примерно одновременно) чтобы одну страницу из разных городов открывали. Тогда видно.

 

Например, я из Казани открыл какой-то товар, и после меня открывает этот товар кто-то из другого города, тогда у него может покаться тоже Казань, или у меня его город.

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

Да, ip, спасибо.

 

Попробую вечером, может получится что придумать.

 

В принципе понятно конечно, что можно кэш-файлы делать под каждый город, но это не совсем правильно.

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

Попробовал, нормально у меня работает метка geo_city.

 

debug выключил в /app/Config/core.php

 

Всё нормально.

 

А у Вас метка {geo_city} куда именно вставлена?!

 

Я вставлял в Админке - Оформление - Шаблоны - Основной шаблон.

 

Вот этот файл /app/Vendor/smarty/vam_plugins/function.geo_city.php использовал.

function.geo_city.php

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

Может в браузере кэшируется что, но на стороне магазина нормально вроде как.

 

А зачем Вам вообще вывод города, Вы где его используете?!

 

У меня разве что только одно предположение - использовать например на странице оформления заказа, автоматически заполнять поля Город, Регион.

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

Метка у меня вставляется на странице карточки товара, там используется микрошаблон my-prod-cart-info-ip

 

Нужно это для того, чтобы сразу определить из какого города посетитель и подать ему персонализированные данные. Если посетитель, например, из Казани - ему показывается одна информация о доставке и оплате, если из другого города - другая.

 

Когда посетитель видит на сайте информацию о своем городе, о возможности доставки в него, а еще лучше - сразу о стоимости доставки - он естественно более лояльно относится к сайту.

 

Пробовал вставлять метки и {$smarty.session.city} {geo_city} , проблема одна, описанная выше.

Ссылка на сообщение
Поделиться на другие сайты
Да.
 
Хотя вот ещё можно вариант.
 
В /app/Controller/PagesController.php заменить:
 
// Save cache based on content_id for template_vars.
$cache_name = 'vam_template_vars_' . $content['Content']['id'].(isset($this->params['page'])?'_'.$this->params['page']:'').(isset($sort_by)?'_'.$sort_by:'').$is_compared;
$template_vars = Cache::read($cache_name, 'catalog');
              
if ($template_vars === false) {
$template_vars = array(
'content_id' => $content['Content']['id'],
 
 
на:
 
  App::import('Vendor', 'GeoCity', array('file' => 'GeoCity'.DS.'SxGeo.php'));
  $SxGeo= new SxGeo(APP.'Vendor/GeoCity/SxGeo.dat');
  $city = $SxGeo->get($_SERVER['REMOTE_ADDR']);
 
  $city_id = $city['city']['id'];
  $city = $city['city']['name_ru'];
 
 
// Save cache based on content_id for template_vars.
$cache_name = 'vam_template_vars_' . $content['Content']['id'].(isset($this->params['page'])?'_'.$this->params['page']:'').(isset($sort_by)?'_'.$sort_by:'').$is_compared.'_'.$city_id;
$template_vars = Cache::read($cache_name, 'catalog');
              
if ($template_vars === false) {
$template_vars = array(
'content_id' => $content['Content']['id'],
'city' => $city,
 
 
 
и в любом шаблон используйте метку {$city}
Ссылка на сообщение
Поделиться на другие сайты

Вот лучше даже так сделайте, по идее, так точно должно работать, кэшируются переменные под каждый город.

 

Обновил сообщение - 

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

Точно в /app/Controller/AppController.php заменить?

 

Что-то я там на найду кода:

// Save cache based on content_id for template_vars.

$cache_name = 'vam_template_vars_' . $content['Content']['id'].(isset($this->params['page'])?'_'.$this->params['page']:'').(isset($sort_by)?'_'.$sort_by:'').$is_compared;
$template_vars = Cache::read($cache_name, 'catalog');
              
if ($template_vars === false) {
$template_vars = array(
'content_id' => $content['Content']['id'],

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