Jak vypnout cache pro konkrétní šablony?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Yosomono
Člen | 3
+
0
-

Dobrý den, s Nette normálně nepracuji, bohužel teď potřebuji opravit na rychlo jednu aplikaci, která v něm je napsaná, v čem spočívá můj problém:
Je tam zaplá nějaká cache (nevím kde, nevím jak) a v aplikaci je dynamicky generovaný formulář = data ve formuláři mají být vždycky jiná, jenže nejsou, data zůstanou pokaždé stejná, respektive ve formuláři zůstanou data, která byla použita při jeho prvním vygenerování. Rád bych tedy nějakým způsobem docílil toho aby se tohle nedělo a šablona s formulářem se generovala real time. V šabloně nikde nejsou nastavený tagy pro cache, rozuměj: {cache}, a ani v PHP kódu / konfiguračních souborech sem nenašel, že by se volala nějaká třída pro cache.

PHP vezre: PHP 5.5.6–1+debphp.org~raring+2 (cli) (built: Nov 21 2013 14:39:09)
Copyright © 1997–2013 The PHP Group
Zend Engine v2.5.0, Copyright © 1998–2013 Zend Technologies
with Zend OPcache v7.0.3-dev, Copyright © 1999–2013, by Zend Technologies
with Xdebug v2.2.3, Copyright © 2002–2013, by Derick Rethans

Pokud budou potřeba další informace k problému, stačí napsat jaké, případně kde bych to měl asi tak najít.

Děkuji za odpověď.

Editoval Yosomono (12. 1. 2014 15:37)

David Matějka
Moderator | 6445
+
0
-

hlavne by bylo potreba ukazat kod, ktery to generuje

Yosomono
Člen | 3
+
0
-

Upozorňuji, že vypadá dost nebezpečně a šíleně;)

AjaxPresenter.php:

public function renderForm()
	{
        if(isset($_GET['date'])){
            $this->date = $_GET['date'];
        }

		$form = new \Nette\Forms\Form;

        $form->setAction($this->link('Ajax:form', array('field'=>$_GET['field'], 'time'=>$_GET['time'])))->getElementPrototype()->{'data-role'} = "form";
		$iterator = 0;
		$note = '';
		if( isset($_GET['time']) && isset($_GET['field']) ){
			$rezervace = $this->getRezervace($_GET['time'], $_GET['field']);
			if( !empty($rezervace) ){

//tady s tím je problém
				$zaplatit = new \Nette\Forms\Form;
				$zaplatit->setAction($this->link('Ajax:form', array('field'=>$_GET['field'], 'time'=>$_GET['time'],'zaplatit'=>1)))->getElementPrototype()->{'data-role'} = "zaplatit";
				$zaplatit->addSubmit('zaplatit', 'Zaplatit')->setAttribute('class', 'form-control btn btn-primary')->setAttribute('style', 'width: 370px;');

				if( $zaplatit->isSubmitted() && isset($_GET['zaplatit']) ){
...
				}
				$this->template->zaplatit = $zaplatit;

				$note = $rezervace->getNote();
				$form->addHidden('rezervace', $rezervace->getId());
				$cars = $this->context->db->getRepository('GolfCars')->findBy(array('rezervace' => $rezervace->getId()));

				foreach( $cars as $car ){
					$iterator++;
					${'checkbox'.$iterator} = true;
				}
			}
		}
		$form->addSelect('klient', 'Vyberte klienta', $this->getKlientForSelect())->setAttribute('class','form-control');

//a tady s tím je problém
		if( isset($_GET['time']) ){
			$form->addText('time', 'Čas startu')->setValue(date('d.m.Y H:i',$_GET['time']))->setDisabled()->setAttribute('class','form-control');
		}
//nastavení několika formulářových prvků
...
//konec nastavování formulářových prvků
		$form->addSubmit('save', 'Uložit')->setAttribute('class','form-control btn btn-primary');
		$form->setDefaults(array('tournaments' => $this->getTournament($_GET['time'], $_GET['field']),'note'=>$note));

		if( $form->isSubmitted() ){
			...

		}

		$this->template->form = $form;
	}

Ajax/form.latte

<div class="modal-dialog">
    <div class="modal-content">
        <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
            <h4 class="modal-title" id="myModalLabel">Vytvořit rezervaci</h4>
        </div>
        <div class="modal-body">
            {$form}
			{ifset $zaplatit}
				<div style="margin-left: 100px;">{$zaplatit}</div>
			{/ifset}
        </div>
    </div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
<script>
    $(".modal-content").draggable({
        handle: ".modal-header"
    });
</script>
Michalek
Člen | 211
+
0
-

Jen pro sichr, nedělá to javascript z local storage? Tzn. zkusit bez javascriptu.

Yosomono
Člen | 3
+
0
-

Michalek napsal(a):

Jen pro sichr, nedělá to javascript z local storage? Tzn. zkusit bez javascriptu.

Jo přesně tak.
Twitter bootstrap JS za to může, provede první ajaxový request a v momentě, když si člověk myslí, že modálový okno zavřel, ho jen skryje (display: none;) a při dalším „ajax requestu“ zobrazí první skrytý modálový okno (display: block;)

Tímto děkuji všem z účastněným, především členovy matej21 za přímou podporu na ICQ a vlákno můžete považovat za uzavřené.

Edit: ještě dodám řešení
javascript:

$( document ).ready(function() {
	$('body').on('hidden.bs.modal', '.modal', function () {
		$(this).removeData('bs.modal');
	});
});

Editoval Yosomono (12. 1. 2014 19:03)