Gal kas žino kokias CMSMS komandas reikia naudoti, norint savo pagamintame modulyje iškviesti error404 puslapio turinį ir kad jį pavaizduotų su šablonu (template) priskirtu tam puslapiui.
Jei konkrečiau, mano sukurtas modulis tam tikrais atvejais turi išmesti ERROR 404 klaidą, ir tam padaryti norėčiau rodyti CMSMSe esančio built-in puslapio su aliasu "error404" turinį (content).
Bandau įvairius variantus, bet niekaip nerandu CMSMS funkcijų kombinacijos, kurių pagalba tai galėčiau padaryti nenusigrybaudamas.
Be to, CMSMS apidoc'as nelabai detalus ir pavyzdžių niekur nėra.
Ačiū
Kaip savame modulyje iškviesti error404
Moderator: Augustas
Re: Kaip savame modulyje iškviesti error404
Labas,
nelabai suprantu kas yra "built-in" puslapis. Bet redirectinimą į sukurtą puslapį galima padaryti taip:
vilkis
nelabai suprantu kas yra "built-in" puslapis. Bet redirectinimą į sukurtą puslapį galima padaryti taip:
Code: Select all
$alias = 'error404';
$id = ContentManager::GetPageIDFromAlias($alias);
if($id)
{
$this->RedirectContent($id);
return;
}
Re: Kaip savame modulyje iškviesti error404
sakau "built-in", nes nuo vienos iš paskutinių CMSMS versijų (galbut nuo 1.6) tarp Content Types egzistuoja ir "Error Page" tipas, pagal kurį sukurus puslapį, jam automatiškai priskiriamas alias'as "error404".
Dėkui už pasiūlymą, bet ir jį esu anksčiau išbandęs. Problema ta, jog šitas redirektinimas duoda klaidos statusą = 302.
O man reikia, kad klaidos kodas iš karto būtų 404.
Aš kol kas tą reikalą išsprendžiau taip:
T.y. aš iš modulio iškviečiu CMSo pagrindinį index.php failą su neegzistuojančio puslapio alias'u.
Nelabai švariai, bet veikia. --> rodomas tekstas nurodytas "error404" puslapyje, ir išmetama http status 404 klaida.
Dėkui už pasiūlymą, bet ir jį esu anksčiau išbandęs. Problema ta, jog šitas redirektinimas duoda klaidos statusą = 302.
O man reikia, kad klaidos kodas iš karto būtų 404.
Aš kol kas tą reikalą išsprendžiau taip:
Code: Select all
if( [sąlyga netenkinama] ){
header("HTTP/1.1 404 Not Found");
header("Status: 404 Not Found");
$_GET['page'] = $_REQUEST['page'] = 'xxmxmxmxmxmxmxmxmxasasasasas';
include(dirname(__FILE__).'/../../index.php');
exit;
}
Nelabai švariai, bet veikia. --> rodomas tekstas nurodytas "error404" puslapyje, ir išmetama http status 404 klaida.
Last edited by Augustas on Mon Apr 12, 2010 12:19 pm, edited 1 time in total.
Re: Kaip savame modulyje iškviesti error404
Pastebėjau, kad nereikia nurodyti 404 statuso headerių mano modulyje, nes aš juk kviečiu neegzistuojantį puslapį.
t.y. kodas būtų:
t.y. kodas būtų:
Code: Select all
if( [sąlyga netenkinama] ){
$_GET['page'] = $_REQUEST['page'] = 'xxmxmxmxmxmxmxmxmxasasasasas';
include(dirname(__FILE__).'/../../index.php');
exit;
}
Re: Kaip savame modulyje iškviesti error404
Nepadėjau, bet sužinojau 
Reiks kada nors išbandyti.
vilkis

Reiks kada nors išbandyti.
vilkis
Re: Kaip savame modulyje iškviesti error404
Pasirodo mano sprendimas veikia normaliai tik kai "config.php" faile 'process_whole_template' yra TRUE:
$config['process_whole_template'] = true;
Kadangi nuo CMSMS 2.0 jo reikšmė bus FALSE, ir nebebus galima jo keisti config'e, aš vis dar ieškau varianto savo problemai
$config['process_whole_template'] = true;
Kadangi nuo CMSMS 2.0 jo reikšmė bus FALSE, ir nebebus galima jo keisti config'e, aš vis dar ieškau varianto savo problemai
