Jak vypnout cache pro konkrétní šablony?
- Yosomono
- Člen | 3
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)
- Yosomono
- Člen | 3
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">×</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>
- Yosomono
- Člen | 3
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)