Перейти к содержимому
Русский язык для Invision Community 5

Подключение php файла в шаблон из папки с изображениями

Приветствую!

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

 

Не вариант если подключать через:

 

{parse include="file.php"}

 

Потому что придётся файл загружать в корень форума, а так лежал бы себе в папке с изображениями и очень удобно.

 

Я даже пробовал указывать путь:

 

{parse include="talk/public/style_images/tbm/file.php"}

 

Но на IP. Contente вылазит ошибка.

 

Заранее огромное спасибо!

Изменено пользователем Lesovsky

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

  • Автор

Забыл написать, что в шаблон globalTemplate хочу подключить.

Можно построить от img_url:

 

<php>
 $images_dir = DOC_IPS_ROOT_PATH . substr( str_replace( array( $this->settings['ipb_img_url'], $this->settings['_original_base_url'] ), "", $this->settings['img_url'] ).'/', 1 );
 require_once( $images_dir . 'file.php' );
</php>

 

Или просто на базе upload_dir c подключением данных из output:

<php>
 $baseDir = str_replace('uploads', '', $this->settings['upload_dir']);
 require_once( $baseDir. 'public/style_images/' . $this->registry->getClass('output')->skin['set_image_dir'] . '/file.php' );
</php>

 

Первый способ самый корректный, второй - популярный, встречается в некоторых платных скинах, но если на сервере нестандартная папка public - второй не работает.

  • Автор

Спасибо вам огромное! Работают оба варианта, но появилась проблема. Увеличился шрифт названия категорий, описание категорий и т.д.

 

Screenshot100.png

Если ваш скрипт что-то выводит (через echo, print или подобное, или даже пустой перевод каретки в начале или конце файла), то этот вывод оказывается до определения DOCTYPE (т.е. перед всем шаблоном), что очень плохо - браузер не может определить тип страницы, и изменившийся шрифт - очевидная реакция на эту проблему.

 

В идеале, нужно чтобы ваш php-скрипт ничего никуда не выводил, а только определял некую переменную, которую вы уже выведете дальше в шаблоне, посредством конструкции "{$variable_name}".

 

Например, файл test.php:

<?php 
$test_var = time();
?>

 

Код в шаблоне:

<!DOCTYPE ...
<html ...
<head ...
<body>
<php>
 $images_dir = DOC_IPS_ROOT_PATH . substr( str_replace( array( $this->settings['ipb_img_url'], $this->settings['_original_base_url'] ), "", $this->settings['img_url'] ).'/', 1 );
 require_once( $images_dir . 'test.php' );
</php>
{$test_var}

 

Результат на выходе:

<!DOCTYPE ...
<html ...
<head ...
<body>
1305835183

 

Однако, иногда возникает необходимость изменить что-то уже существующее, или сразу вписать все "на месте". В таких случаях вы можете получить доступ ко всему уже обработанному коду шаблона через переменную $IPBHTML.

 

Т.е, например, файл test2.php:

<?php 
$IPBHTML .= 'test';
?>

 

Код в шаблоне:

<!DOCTYPE ...
<html ...
<head ...
<body>
<php>
 $images_dir = DOC_IPS_ROOT_PATH . substr( str_replace( array( $this->settings['ipb_img_url'], $this->settings['_original_base_url'] ), "", $this->settings['img_url'] ).'/', 1 );
 require_once( $images_dir . 'test2.php' );
</php>

 

В том месте, где стоит вставка ..., появится текст "test":

<!DOCTYPE ...
<html ...
<head ...
<body>
test

 

 

А можно и изменить что-то из уже обработанного. Например, test3.php:

<?php 
$IPBHTML = str_replace('test', 'hi!', $IPBHTML);
?>

 

В самом конце globalTemplate:

<php>
 $images_dir = DOC_IPS_ROOT_PATH . substr( str_replace( array( $this->settings['ipb_img_url'], $this->settings['_original_base_url'] ), "", $this->settings['img_url'] ).'/', 1 );
 require_once( $images_dir . 'test3.php' );
</php>

 

И на всех страницах форума слово "test" будет заменено на "hi!".

  • Автор

Действительно, у меня в файле переменная выводилась через echo.)

Благодаря вашему сообщению я разобрался и сделал как хотел.

Большое спасибо!

 

А можно ли с помощью такого кода подключать php файл в шаблон:

 

<php>
require_once( IPS_PUBLIC_PATH . '/style_images/' .  $this->registry->getClass('output')->skin['set_image_dir'] .  '/file.php');
</php>

Создайте аккаунт или войдите в него для комментирования

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.