Problém se zobrazením náhledu
- Jan Blažek
- Člen | 36
Dobrý den,
zkouším si napsat jednoduchý redakční systém. Při zakládání článku
bych chtěl uživateli nabídnout možnost zobrazení náhledu jeho článku,
protože používám texy. Bohužel se mi nechce překreslit snippet.
latte:
{snippet show}
{if $show === false}
<label for="inputContent" class="sr-only">{_form.article.content}</label>
<textarea n:name=content id="inputContent" class="form-textArea" placeholder="{_form.article.content}" required=""></textarea>
{else}
<div class="form-textArea">
{$show|texy|noescape}
</div>
{/if}
{/snippet}
presenter:
function handleShow($text)
{
$this->template->show = $text;
$this->redrawControl('show');
}
function handleEdit()
{
$this->template->show = false;
$this->redrawControl('show');
}
function renderCreate()
{
$this->template->show = false;
}
function actionCreate()
{
if(!$this->user->isAllowed('article', 'write'))
$this->redirect('Homepage:');
}
js, který se zavolá při kliku na button
function show(){
$.nette.ajax({
type: "POST",
dateType: "json",
url: {link show!},
data: { text: $('#inputContent').val() }
});
}
Problém je v tom, že se mi při kliku na button nepřekreslí snippet
show, takže uživatel nevidí svůj náhled.
Mohli byste mi prosím poradit?
- David Matějka
- Moderator | 6445
viz zivotni cyklus presenteru, render metoda se vola po handle, takze ty tam tu hodnotu prepises
- Zuben45
- Člen | 268
Seš si jistý, že se nepřekreslí ? Jelikož nastavuješ stejnou hodnotu kterou posíláš:
function handleShow($text)
{
$this->template->show = $text;
$this->redrawControl('show');
}
Kontroluješ v presenteru, jestli show pro template je již nastaven ?
Class ArticlesPresenter extends BasePresenter
{
public function renderCreate()
{
if (!isset($this->template->show)) {
$this->template->show = 'defaultni při spuštění';
}
}
}
EDIT: @DavidMatějka byls rychlejší :)
Editoval Zuben45 (26. 7. 2017 16:28)
- Jan Blažek
- Člen | 36
Mohl bych váš otravovat ještě s jednou drobností?
Když se chci přepnout zpět do editace, tak mi vyskočí chyba:
if ($show === false) {
116: ?> <label for="inputContent" class="sr-only"><?php echo LR\Filters::escapeHtmlText(call_user_func($this->filters->translate, "form.article.content")) ?></label>
117: <textarea id="inputContent" class="form-textArea" placeholder="<?php echo LR\Filters::escapeHtmlAttr(call_user_func($this->filters->translate, "form.article.content")) ?>" required=""<?php
118: $_input = end($this->global->formsStack)["content"];
119: echo $_input->getControlPart()->addAttributes(array (
120: 'id' => NULL,
na řádku 108 s hláškou:
„end() expects parameter 1 to be array, null given“
EDIT: řádek 118 :)
Editoval Jan Blažek (26. 7. 2017 20:33)
- Zuben45
- Člen | 268
Jan Blažek napsal(a):
if ($show === false) { 116: ?> <label for="inputContent" class="sr-only"><?php echo LR\Filters::escapeHtmlText(call_user_func($this->filters->translate, "form.article.content")) ?></label> 117: <textarea id="inputContent" class="form-textArea" placeholder="<?php echo LR\Filters::escapeHtmlAttr(call_user_func($this->filters->translate, "form.article.content")) ?>" required=""<?php 118: $_input = end($this->global->formsStack)["content"]; 119: echo $_input->getControlPart()->addAttributes(array ( 120: 'id' => NULL,
na řádku 108 s hláškou:
„end() expects parameter 1 to be array, null given“
hláška říká že jsi místo pole, dostal null, píšeš že se jedná o řádek 108, ale v ukázaném kodu tento řádek nemáš ;)