Witam, ostatnio z ciekawości pobrałem ezRPG, może za jakiś czas pokuszę się nawet o próbę zrobienia czegoś na jego podstawie :P wkurzała mnie tylko jedna rzecz, przesyłanie komunikatów metodą $_GET, po co użytkownik ma widzieć w linku to co i tak zobaczy na stronie? (a jak zechce to i z nudów coś tam sobie napisze :P) więc pierwsza próba była ze zmiennymi sesyjnymi no ale tu coś mi ciągle nie grało tak jak powinno, więc idąc po najlżejszej linii oporu doszedłem do wniosku że można to przecież zapisać do ciasteczka, odczytać a następnie takie ciasteczko wywalić. Wiadomo ma to swoje wady, np. użytkownik może mieć w przeglądarce zablokowane zapisywanie ciasteczek, a i parę innych pewnie się znajdzie :P
Poniżej przykład jak to zrobić:
1. Otwieramy plik: /hooks/header_msg.php
Wygląda to mniej więcej tak:
2. Zmieniamy na:Kod php:<?php
defined('IN_EZRPG') or exit;
$hooks->add_hook('header', 'header_msg', 1);
function hook_header_msg(&$db, &$tpl, &$player, $args = 0)
{
global $purifier;
if (isset($_GET['msg']) && is_string($_GET['msg']))
{
$_msg = trim(stripslashes($_GET['msg']));
$_msg = $purifier->purify($_msg);
if (!empty($_msg))
$tpl->assign('GET_MSG', $_msg);
}
return $args;
}
?>
Połowa pracy za nami pozostało tylko zmienić kilka linijek w plikach w katalogu modules, poniżej co i jak na przykładzie logowania.Kod php:<?php
defined('IN_EZRPG') or exit;
$hooks->add_hook('header', 'header_msg', 1);
function hook_header_msg(&$db, &$tpl, &$player, $args = 0)
{
global $purifier;
/*sprawdzamy czy ciasteczko istnieje*/
if (isset($_COOKIE['msg']) && is_string($_COOKIE['msg']))
{
$_msg = trim(stripslashes($_COOKIE['msg']));
$_msg = $purifier->purify($_msg);
if (!empty($_msg))
$tpl->assign('GET_MSG', $_msg);
/*usuwamy ciasteczko*/
setcookie("msg", "", time());
}
return $args;
}
?>
1. Otwieramy plik /modules/Login/index.php, następnie zjadujemy:
2. Zmieniamy to na:Kod php:header('Location: index.php?msg=' . urlencode($msg));
3. Dodajemy pustą linie przed powyższym, i wpisujemy w niej:Kod php:header('Location: index.php');
Analogicznie do tego przerabiamy pliki pozostałych modułów. Może komuś się to przyda.Kod php:setcookie("msg", $msg);
pozdrawiam arti


Odpowiedz z cytatem
I świetny przykład na to, że programowanie zorientowane obiektowo (bo tutaj to jest tylko używanie gdzie niegdzie jakichś klas) rozwiązałoby idealnie ten problem.
Bo musiałbyś kombinować z nagłówkami albo np. cURLem (jak inaczej zamierzasz przesłać dane podczas wykonywania jednego skryptu do innego, nie mogąc załączyć danego pliku przez include / require?), ale wtedy zapewne pojawi się: Warning: headers already sent by.., będzie trzeba stosować bufor, który spowolni całość lub bawić się z kodowaniem.

Zakładki