Page 1 of 1

Kaip savame modulyje iškviesti error404

Posted: Mon Apr 12, 2010 5:14 am
by Augustas
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ū

Re: Kaip savame modulyje iškviesti error404

Posted: Mon Apr 12, 2010 9:57 am
by vilkis
Labas,
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;
}
vilkis

Re: Kaip savame modulyje iškviesti error404

Posted: Mon Apr 12, 2010 12:12 pm
by Augustas
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:

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;
}
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.

Re: Kaip savame modulyje iškviesti error404

Posted: Mon Apr 12, 2010 12:24 pm
by Augustas
Pastebėjau, kad nereikia nurodyti 404 statuso headerių mano modulyje, nes aš juk kviečiu neegzistuojantį puslapį.
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

Posted: Mon Apr 12, 2010 1:14 pm
by vilkis
Nepadėjau, bet sužinojau :)
Reiks kada nors išbandyti.
vilkis

Re: Kaip savame modulyje iškviesti error404

Posted: Tue Apr 13, 2010 6:11 am
by Augustas
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 :)