Получить текущий идентификатор статьи Joomla! 2,5

Я пытаюсь получить «текущий» идентификатор статьи из внешнего скрипта в Joomla! 2.5 Во-первых, я включил основные файлы Joomla:

define( '_JEXEC', 1 );
defined('_JEXEC') or die('Restricted access');
define( 'JPATH_BASE', realpath(dirname(__FILE__).'/..' ));
define( 'DS', DIRECTORY_SEPARATOR );

require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

Затем инициализировал сеанс:

$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();

Теперь я знаю, что для Joomla 2.5 я должен использовать Jinput вместо JRequest (устаревший), поэтому:

$jAp = JFactory::getApplication();
$jInput = $jAp->input;

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

$id = $jInput->get('id', 0); // doesn't work
$idInt = $jInput->getInt('id',0); //doesn't work

Также с JRequest... Я не могу получить идентификатор текущей статьи.

Это работает, только если я буду запрашивать данные для зарегистрированных пользователей, например:

$user = JFactory::getUser();
echo $user->username; // this works...

Что мне не хватает? Где моя вина?

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


person David Madhatter    schedule 13.08.2013    source источник
comment
Вы пробовали получить его из суперглобала через $jInput->get->get("id")?   -  person Lance    schedule 14.08.2013
comment
Привет Лэнс. Да, я пробовал, и это не работает. Я пробовал также через $jInput-›get-›get('id',null,null). Ничего такого. Спасибо за ваш ответ.   -  person David Madhatter    schedule 14.08.2013
comment
Что вы имеете в виду, что пытаетесь получить текущий идентификатор статьи. Если отображается статья, вы уже используете фреймворк, поэтому вы также можете использовать обычные функции фреймворка. Итак, такой код: JRequest::getInt('id') (он устарел, но все еще работает) должен возвращать текущий идентификатор статьи. То же, что $_REQUEST['id']. Как отображается эта статья?   -  person Artur Stępień    schedule 14.08.2013
comment
Здравствуйте Артур. То, что вы видите (исходный вопрос), является частью внешнего файла AJAX (ajax_request.php). JRequest::getInt('id') и $_REQUEST['id'] не работают в этом файле ajax (вызывается функцией: jQuery(document).ready(function($){ $('#divid') .load('/plug/ajax_request.php'); }); )   -  person David Madhatter    schedule 14.08.2013
comment
В вашем запросе ajax вам также необходимо передать идентификатор статьи. Ваш код jQuery, вероятно, имеет доступ к идентификатору статьи Joomla. Если у вас включен SEF, возможно, вы не сможете получить идентификатор из URL-адреса. Возможно, вам придется использовать php для написания некоторого javascript для определения переменной с идентификатором статьи.   -  person Lian    schedule 17.08.2013


Ответы (1)


Отладка AJAX может быть сложной. Я часто обнаруживаю, что добавление некоторых журналов в мой обработчик очень помогает, например, добавление следующего в начало вашего кода...

# logging of all hits
$log_file = realpath(dirname(__FILE__)) . '/ajax_debug.log';
$fh = fopen($log_file, 'a') or die();
$log_string = "Backend Hit \n" . date("Y-m-d H:i:s") . "\n";
$log_string .= "POST: " . print_r($_POST, true) . "\n";
$log_string .= "GET: " . print_r($_GET, true) . "\n";
$log_string .= "Hit by: " . $_SERVER['REMOTE_ADDR'] . "\n";
$log_string .= "\n\n\n";
fwrite($fh, $log_string);
fclose($fh);  

Вы не упомянули, как/где был реализован ваш код AJAX. Похоже, это может быть реализация вне Joomla. Я бы поместил это в плагин, если он достаточно автономен, хотя обработчики модулей или компонентов AJAX также хорошо работают в Joomla. На https://docs.joomla.org/Using_Joomla_Ajax_Interface есть несколько хороших документов и кода.

person AndyGaskell    schedule 26.01.2015