Caching - Eine Frage der Umsetzung

Hi Leute,

ich habe eine Frage bzgl. der Umsetzung von Caching.

Auf meiner Seite gibt es eine DropDown Liste in der man in verschiedenen Kategorien suchen kann. Wenn der Besucher nun im DropDown BMW ausgesucht hat, dann soll BMW auch auf den nachfolgenden Seiten ausgewählt sein, unabhängig davon ob der Besucher JS benutzt oder nicht.

Nun habe ich das so realisiert, das die Auswahl in der Session gespeichert wird.




<select name="l" style="border: 1px solid #bbbbbb; border-right:0"	id="languageType">

	<option value="1" <?php echo Sessions::getSelected("1", Yii::app()->user->getState('selected')); ?>><?php echo Yii::t('standard','BMW');?></option>

	<option value="2" <?php echo Sessions::getSelected("2", Yii::app()->user->getState('selected')); ?>><?php echo Yii::t('standard','AUDI');?></option>

	<option value="3" <?php echo Sessions::getSelected("3", Yii::app()->user->getState('selected')); ?>><?php echo Yii::t('standard','BENZ');?></option>

</select>



Nun ist dieser Teil der Seite der einzige der dynamisch ist, die restlichen Teile der Seite werden zwar dynamisch aus der Datenbank geholt sind dennoch statisch.

Ich würde gerne einen Page-Cache benutzen der die ganze Seite speichert. Aber wie soll ich nun das DropDown behandeln? Welche Möglichkeit habe ich hier?

danke schon einmal für eure Antworten!!!

  1. Hat nichts mit deiner Cache-Frage zu tun, aber: Warum verwendest du nicht CHtml::dropDownList() ? Das würde deinen Code wesentlich vereinfachen, weil du damit den Datenteil vom Darstellungsteil trennen kannst.

  2. An der Stelle, an der das Dropdown stehen soll schreibst du sowas hin:


<?php echo $this->renderDynamic(array($this,'renderCategoryDropDown')); ?>

Dann baust du in deinen Controller die Funktion renderCategoryDropDown ein, die das HTML für die DropDownList zurückgeben (nicht ausgeben!) muss.

Wenn du das wie in 1. beschrieben machst, sieht die Funktion z.B. so aus:




public function renderCategoryDropDown()

{

    // ... hier Daten vorbereiten: $selectedValue + $listData ...

    return CHtml::dropDownList('l', $selectedValue, $listData);

}



Siehe auch hier:

http://www.yiiframew…caching.dynamic

  1. Vielen Dank für den Tip

  2. Vielen Dank für die super Lösung!!!!

Ich habe nun ein Caching Problem und zwar befinden sich die Dateien nur für wenige Minuten im Cache.

Meine filters:




public function filters()

{	

//	if(Yii::app()->params['caching'])

//	{

		return array(

			array(

				'COutputCache - AutoCompleteLookup',

				'duration'=>999999999,

				'varyByParam'=>array('l', 's'),

			),

		);

//	}


}

Meine config.php




	'cache'	=> array(

		'class' => 'system.caching.CApcCache',

	),



Maximal 1 Minute befindet sich eine Datei im Cache?!

Weiß jemand warum?

Nicht normal, irgendwas an deinem Setup muss Probleme machen. Hast du schon mal mit dem APC Kontrollscript nachgesehen, was im Cache so los ist (wird mit APC geliefert, heisst meist apc.php und musst du irgendwo ins Webverzeichnis legen).