Форум русской поддержки Joomla!® CMS
07.12.2016, 01:49:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Как подключить библиотеку Joomla в свой php файл?

 (Прочитано 2604 раз)
0 Пользователей и 1 Гость смотрят эту тему.
kowap
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 3


« : 16.05.2013, 15:58:46 »

вообщем, такая проблема. есть модуль, называется PHP mod. с его помощью можно вставлять на страницы php код. и у меня есть файл обработчик, который сохраняет значения в переменные сессии. то есть: на странице Joomla, с помощью phpmod мы на страницу вставляем например такое:
Код:
<?
echo $_SESSION["value"];
?>
<form method = "post" action = "go.php">
<input type = "text" name = "text">
<input type = "submit" name = "ok">
</form>

а теперь создаем свой файл php. и в нем пишем
Код:
<?
session_start();
$_SESSION["value"] = $_POST["text"];
header("Location: /ссылка обратно")
?>

объясняю.
в первом куске, который мы вставили на страницу с помощью модуля phpmod, мы заполняем поле text, нажимаем отправить, и нас переносит на созданный нами php файл. в нем открывается сессия, и в эту сессию сохраняется переменная $_SESSION["value"] в которую мы записали значиние веденное в форму ранее. по всем законам, при выводе $_SESSION["value"] на любой странице сайта, должно отображаться ее содержимое. но тут и проблема, в сессию ничего не сохраняется, то есть, на всех страницах сайта переменная $_SESSION["value"] будет пустая.

нашел ответ на вопрос. что бы в Joomla что то записать в сессию и что то выбрать, нужно делать это с помощью следующего блока кода
Код:
$session =& JFactory::getSession():
// Выбор
$var = $session->get('key');
// Запись
$session->set('key', 'value');

проблема вроде и решена, но как записать это в моем файле? например такое $session =& JFactory::getSession(): работать вроде не будет, так как библиотеки Joomla не подключены к моему файлу. и вот вопрос, что и как нужно подключить в мой новый php файл, что бы работала эта конструкция
Код:
$session =& JFactory::getSession():
// Выбор
$var = $session->get('key');
// Запись
$session->set('key', 'value');
Записан
SmokerMan
Профи
********

Репутация: +694/-25
Offline Offline

Пол: Мужской
Сообщений: 5225



« Ответ #1 : 17.05.2013, 21:11:46 »

How to create a stand-alone application using the Joomla! Platform
Записан
googlonator
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 25


« Ответ #2 : 20.10.2015, 15:07:01 »

Тоже сейчас мучаюсь с подключение собственного скрипта и сессиями. Прочитал что надо вот это прописать:
Код:
define('JPATH_BASE', dirname(__FILE__));
define('DS', DIRECTORY_SEPARATOR);
$path = JPATH_BASE . DS . 'includes' . DS;
// once использовать необязательно, не думаю, что вы подключите файлы фреймворка дважды
require($path . 'defines.php');
require($path . 'framework.php');
$app = JFactory::getApplication('site');
$app->initialise();

В строке
 
Код:
define('JPATH_BASE', dirname(__FILE__));

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

Но вот у меня беда, после добавления этого кода перестает вообще выполняться скрипт. Строки эти правильные, я уверен. В чем проблема не пойму.
Записан
googlonator
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 25


« Ответ #3 : 20.10.2015, 16:16:08 »

Разобрался и все заработало! В начале приведенного выше мною кода, добавил
Код:
define( '_JEXEC', 1 );

В исполняемом отдельно скрипте для проверки вставил
Код:
$session =& JFactory::getSession();
$session->set('hello', 'blin');

А в файле index.php моего шаблона
Код:
$session =& JFactory::getSession();
 echo $session->get('hello');
 

И вуаля, на страницах сайта стало выводится слов blin которое было занесено в сессию в отдельном от Joomla скрипте.
Записан
EndVal
Осваиваюсь на форуме
***

Репутация: +9/-0
Offline Offline

Сообщений: 53


« Ответ #4 : 13.02.2016, 07:21:25 »

Разобрался и все заработало! ....
Всегда ли заработает? Для Joomla 3.x вы создаете файл в корне CMS, что неверно и не логично, если взглянуть со стороны модуля.
Файл должен лежать внутри каталога модуля, что правильно. Разбираю КАСАТЕЛЬНО ТОЛЬКО МОДУЛЯ - ВНИМАТЕЛЬНО!

Тогда JPATH_BASE выдаст совсем другой путь при define('JPATH_BASE', dirname(__FILE__));
Например, пусть сайт будет NAME_OF_SITE, внутри модуль в MODULES\MOD_NAMEOFMODULE - вот здесь будет наш файл например, score.php,
.....NAME_OF_SITE\MODULES\MOD_NAMEOFMODULE/score.php

Тогда define('JPATH_BASE', dirname(__FILE__)); выдаст типа:
Warning: require_once.......NAME_OF_SITE\MODULES\MOD_NAMEOFMODULE/includes/defines.php): failed to open stream...... (сокращенно написал),
кстати, про эту ошибку спрашивали, почему появляется когда require_once падает.

Выделил заглавными MODULES\MOD_NAMEOFMODULE - появится это лишнее,
естественно строка $path = JPATH_BASE . DS . 'includes' . DS; выдаст совсем другой путь и
require($path . 'defines.php'); require($path . 'framework.php'); - не загрузятся.

Решение: убрать MODULES\MOD_NAMEOFMODULE из PATH_BASE
define('JPATH_BASE', dirname(__FILE__)); заменить на define( 'JPATH_BASE', __DIR__ . '/../../' ); - тогда все includes подключатся

dirname(__FILE__) - это месторасположение файла, .дает...NAME_OF_SITE\MODULES\MOD_NAMEOFMODULE/includes/....
define( 'JPATH_BASE', __DIR__ . '/../../' ); дает ....NAME_OF_SITE\includes/ что верно для загрузки includes

обратите внимание на  __DIR__ . '/../../' переход на верхние уровни

Надеюсь, что понятно, через var_dump - поисследуйте, тогда все поймете
« Последнее редактирование: 13.02.2016, 08:14:15 от EndVal » Записан
buyanov
Осваиваюсь на форуме
***

Репутация: +22/-0
Offline Offline

Пол: Мужской
Сообщений: 150


Сайты 74


« Ответ #5 : 13.02.2016, 14:49:55 »

Привет, но попахивает чем-то не хорошим прям сразу!
Переопределять JPATH_BASE как-то грешновато по моему Smiley

А сторонние библиотеки лучше ставить с помощью composer (это на время разработки например), а если собрать модуль то уже можно туда засунуть папочку вендор например.
У Joomla есть прекрасный класс JLoader.

Вот пример подключения mtHaml библиотеки

Код
JLoader::registerNamespace('MtHaml', JPATH_THEMES . '/blank_j3/lib/vendor/mthaml/mthaml/lib');
JLoader::register('JHaml', JPATH_THEMES . '/blank_j3/_php/utility/haml.php');

тут blank_j3 это мой шаблон, в нем все и лежит. Подозреваю что с модулем будет все похоже.
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet