Adilan 0 Опубликовано 9 июня, 2015 Жалоба Share Опубликовано 9 июня, 2015 Здравствуйте, как вставить php код в smarty? Почему-то {php}...{/php} выдает ошибку? Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 9 июня, 2015 Жалоба Share Опубликовано 9 июня, 2015 Здравствуйте! Зависит от того, что за код. Если не сложный, то через Админку - Расширения - Тэги пользователя. Там для примера уже создан тэг с php кодом. Ссылка на сообщение Поделиться на другие сайты
Adilan 0 Опубликовано 14 июня, 2015 Автор Жалоба Share Опубликовано 14 июня, 2015 Ок, а в какую папку положить и как правильно указать путь к php файлу? К примеру, если вызываемый файл example.php должен лежать в папке ExampleDirectory (ExampleDirectory/example.php) куда положить папку ExampleDirectory и как правильно указать к ней путь? Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 14 июня, 2015 Жалоба Share Опубликовано 14 июня, 2015 Если в каталоге что-то нужно выводить, делайте через smarty метки, создавайте свою метку по аналогии например с /app/Vendor/smarty/vam_plugins/function.page_name.php В любой шаблон в Админке - Оформление вставляйте свои метки. Ссылка на сообщение Поделиться на другие сайты
Adilan 0 Опубликовано 14 июня, 2015 Автор Жалоба Share Опубликовано 14 июня, 2015 Скорее всего, мне нужно немного другое. Я хочу использовать готовую функцию для определения местоположения посетителя по ip адресу. Для этого имеется файл SxGeo.php В Расширения-Теги пользователя я создал свой тег, в котором мне необходимо описать вызов функции SxGeo.php: include("путь/SxGeo.php"); чтобы в дальнейшем, при вызове тега вывести город посетителя. В какую папку на сервере мне положить файл SxGeo.php и как правильно указать к ней путь? Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 15 июня, 2015 Жалоба Share Опубликовано 15 июня, 2015 В /app/Vendor/SxGeo/ Затем подключать: App::import('Vendor', 'SxGeo', array('file' => 'SxGeo.php')); $geo = new SxGeo(); Как-то так. А затем уже в зависимости от того, что именно нужно, если просто вывести текст, то просто через echo выводите. т.е. создаёте свою смарти-метку и её просто вставляете в любой шаблон. Ссылка на сообщение Поделиться на другие сайты
Adilan 0 Опубликовано 15 июня, 2015 Автор Жалоба Share Опубликовано 15 июня, 2015 Что-то на второй строчке не работает, там в скобочках ничего не нужно указывать? Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 15 июня, 2015 Жалоба Share Опубликовано 15 июня, 2015 Ну я ж для примера привёл. Вы смотрите как у Вас класс называется в SxGeo.php Название своего класса указывайте. Вообще, по идее, если б Вы знали основы php хотя бы, дело намного легче шло бы. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 16 июня, 2015 Жалоба Share Опубликовано 16 июня, 2015 Я ж Вам говорил, что более-менее сложный код лучше делать через смарти-метки. Сделал смарти-метку {geo_city} Которая выводит город посетителя. Вставляйте метку {geo_city} в любой шаблон. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 17 июня, 2015 Жалоба Share Опубликовано 17 июня, 2015 Можно попробовать через сессию выводить, а не меткой, например в /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} Ссылка на сообщение Поделиться на другие сайты
Adilan 0 Опубликовано 17 июня, 2015 Автор Жалоба Share Опубликовано 17 июня, 2015 Сделал так, но что-то все равно иногда не корректно работает. Т.е. если я обновил товар и этот же товар открывает или обновляет другой пользователь из другого города, то иногда почему-то показывается Мой город. Помогает очистка кэша или переход на другие страницы сайта и обратно. Почему так может быть? Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 17 июня, 2015 Жалоба Share Опубликовано 17 июня, 2015 Наверное кэширует всю страницу целиком. Хотя может попробовать перед App::import добавить что-то типа unset($_SESSION['city']); Ссылка на сообщение Поделиться на другие сайты
Adilan 0 Опубликовано 18 июня, 2015 Автор Жалоба Share Опубликовано 18 июня, 2015 unset($_SESSION['city']); не помогает Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 18 июня, 2015 Жалоба Share Опубликовано 18 июня, 2015 Понятно, а дайте пример адреса для Вашего города, просто что б поэкпериментировать с разными городами, посмотреть, что и как выводит. Ссылка на сообщение Поделиться на другие сайты
Adilan 0 Опубликовано 18 июня, 2015 Автор Жалоба Share Опубликовано 18 июня, 2015 Вам ip в смысле? 178.205.108.65 - это Казань, 46.20.67.44 - это Самара. Тут нужно одновременно (примерно одновременно) чтобы одну страницу из разных городов открывали. Тогда видно. Например, я из Казани открыл какой-то товар, и после меня открывает этот товар кто-то из другого города, тогда у него может покаться тоже Казань, или у меня его город. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 18 июня, 2015 Жалоба Share Опубликовано 18 июня, 2015 Да, ip, спасибо. Попробую вечером, может получится что придумать. В принципе понятно конечно, что можно кэш-файлы делать под каждый город, но это не совсем правильно. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 18 июня, 2015 Жалоба Share Опубликовано 18 июня, 2015 Попробовал, нормально у меня работает метка geo_city. debug выключил в /app/Config/core.php Всё нормально. А у Вас метка {geo_city} куда именно вставлена?! Я вставлял в Админке - Оформление - Шаблоны - Основной шаблон. Вот этот файл /app/Vendor/smarty/vam_plugins/function.geo_city.php использовал. function.geo_city.php Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 18 июня, 2015 Жалоба Share Опубликовано 18 июня, 2015 Может в браузере кэшируется что, но на стороне магазина нормально вроде как. А зачем Вам вообще вывод города, Вы где его используете?! У меня разве что только одно предположение - использовать например на странице оформления заказа, автоматически заполнять поля Город, Регион. Ссылка на сообщение Поделиться на другие сайты
Adilan 0 Опубликовано 19 июня, 2015 Автор Жалоба Share Опубликовано 19 июня, 2015 Метка у меня вставляется на странице карточки товара, там используется микрошаблон my-prod-cart-info-ip Нужно это для того, чтобы сразу определить из какого города посетитель и подать ему персонализированные данные. Если посетитель, например, из Казани - ему показывается одна информация о доставке и оплате, если из другого города - другая. Когда посетитель видит на сайте информацию о своем городе, о возможности доставки в него, а еще лучше - сразу о стоимости доставки - он естественно более лояльно относится к сайту. Пробовал вставлять метки и {$smarty.session.city} {geo_city} , проблема одна, описанная выше. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 19 июня, 2015 Жалоба Share Опубликовано 19 июня, 2015 А если в основной шаблон вставить, тоже самое?! Если debug 2 установить в /app/Config/core.php !? Ссылка на сообщение Поделиться на другие сайты
Adilan 0 Опубликовано 19 июня, 2015 Автор Жалоба Share Опубликовано 19 июня, 2015 Т.е. вместо Configure::write('debug', 0); нужно Configure::write('debug', 2); поставить? Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 19 июня, 2015 Жалоба Share Опубликовано 19 июня, 2015 Да. Хотя вот ещё можно вариант. В /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} Ссылка на сообщение Поделиться на другие сайты
Adilan 0 Опубликовано 19 июня, 2015 Автор Жалоба Share Опубликовано 19 июня, 2015 Хорошо, у меня сотрудник с другого города вечером будет, попробуем с ним, отпишусь о результатах. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 19 июня, 2015 Жалоба Share Опубликовано 19 июня, 2015 Вот лучше даже так сделайте, по идее, так точно должно работать, кэшируются переменные под каждый город. Обновил сообщение - Ссылка на сообщение Поделиться на другие сайты
Adilan 0 Опубликовано 19 июня, 2015 Автор Жалоба Share Опубликовано 19 июня, 2015 Точно в /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'], Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения