страница ошибок Joomla 2.5

Я создал страницу ошибки (404 страницы) для пропущенных URL. Это делается стандартным способом или файлом error.php в шаблоне.

Страница ошибок работает нормально, она правильно перенаправляет на статью Joomla. Моя проблема в том, что я хочу получить ссылку, по которой пользователь щелкнул по этой ссылке, а затем создал страницу 404. Моя идея заключалась в том, чтобы поместить некоторый код вверху страницы error.php, которая отправила мне по электронной почте пропущенную страницу:

            <?php
defined('_JEXEC') or die;
$app = JFactory::getApplication();
$menu = $app->getMenu();
$menuItem = $menu->getItems( 'link', 'index.php?option=com_example&view=reporting', true );
$ref = JRoute::_('index.php?Itemid='.$menuItem->id);
$mailer = JFactory::getMailer();
$config = JFactory::getConfig();
$sender = array(
$config->getValue( 'config.mailfrom' ),
$config->getValue( 'config.fromname' ) );

$mailer->setSender($sender);
$recipient = array( '[email protected]' );

$mailer->addRecipient($recipient);

$body   = "Missing page is ".$ref;
$mailer->setSubject('404 Error Generated by your site');
$mailer->setBody($body);

$send = $mailer->Send();
if ( $send !== true ) {
echo 'Error sending email: ' . $send->__toString();
} else {
echo 'Mail sent';
}

header("Location: http://www.domain.com/404-page.html"); /* Redirect browser */
exit();?>

Но я не могу получить идентификатор предмета. Я могу получить ссылающуюся страницу $ _SESSION [«origURL»] = $ _SERVER [«HTTP_REFERER»]; но это бесполезно, так как я ищу пропущенную страницу.

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

Спасибо

Алан

0

Решение

Благодаря Дэвиду Т он указал мне правильное направление. Я перекодировал, и это сработало! Я добавил несколько комментариев к коду, так что, надеюсь, он поможет кому-то другому создавать страницы ошибок для Joomla 2.5 (еще не пробовал в 3.0)

Еще раз спасибо Дэвиду Т

Алан

            <?php
defined('_JEXEC') or die;

//Get reffering Id
$referer = JURI::getInstance($_SERVER['HTTP_REFERER']);
$ref = $referer->hasVar('Itemid')?$referer->getVar('Itemid'):JSite::getMenu()->getActive()->id;

//Get the title and other menu details as needed form db

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query = "SELECT * FROM `#__menu` WHERE id = ".$ref."";

$db->setQuery( $query );
$results = $db->loadObjectList();
$holdingArray = array();

if(count($results)) {
foreach($results as $r) {
array_push ($holdingArray,$r->title,$r->menutype) ;
}
}

// Set up mailer and get site name and other details
$mailer = JFactory::getMailer();
$config = JFactory::getConfig();
$sender = array(
$config->getValue( 'config.mailfrom' ),
$config->getValue( 'config.fromname' ) );
$siteName = $config->getValue( 'config.sitename' );

$mailer->setSender($sender);
$recipient = array( '[email protected]' );

$mailer->addRecipient($recipient);

$body   = "The menu item clicked was: ".$holdingArray[0]." which has id: ".$ref." which is in the the menu titled: ".$holdingArray[1];
$body   .= "\n\rPlease note that sometimes the site isn't able to tell us accurately which menu item was clicked so this may prove to be wrong!";
$mailer->setSubject('404 Error Generated by '.$siteName.' website');
$mailer->setBody($body);

//send mail
$send = $mailer->Send();

//Finally redirect to error page
header("Location: http://www.yourdomain.com/404-page.html"); /* Redirect browser */
exit();?>
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]