slovicko control nebo cely form dostat do template, který se načítá v prestery componenty

před 2 lety

crookslovacko
Člen | 50
+
0
-

Dobrý den,
Mám problém s menším špekem co pro mne připravili.

Mám multiple Form komponentu, která se bez problémů vykresluje.
Ovšem mám předpřipravené template v txt, které si načítám přes fopen a to pak předám komponentě, která to vykreslí.
Ovšem nedaři se mi něco takového..do teď to nebyl problém s klasickýma proměnnýma $this->id se nahradí ale komponenta se nevykreslí. Text escapuju Zkoušel jsem i dvoji závorky:

$text  = str_replace('END_EDITBOX',"{{ control noticForm-$this->id }}",$text);

Pošlu sem celou komponentu

<?php

use Nette\Application\UI;
use Nette\Application\UI\Multiplier;

class NoticControl extends UI\Control{

    protected $model;
    protected $data;
    protected $id;


    public function __construct($model,$data,$id) {
        parent::__construct();
        $this->model = $model;
        $this->data = $data;
        $this->id = $id;
    }
    protected function createComponentNoticForm()
    {
    return new Multiplier(function ($id) {
        $form = new Nette\Application\UI\Form;
        $form->addText('notice', 'Text:');

        $form->addHidden('id', $this->id);
        $form->addText('idtest', $this->id);
        $form->addSubmit('send', 'Uložit');
        return $form;
    });
    }

    public function render(){
       bdump($this->data);
        $template = $this->template;

        $template->setFile(__DIR__ . '/notic.latte');
        $this->template->data = $this->data;
        $this->template->id = $this->id;
        $text = $this->data['TEXT'];
        $text  = str_replace('BEGIN_EDITBOX','',$text);
        $text  = str_replace('EB-ID='.$this->id,'',$text);
        $text  = str_replace('EB-GROUP='.$this->data['EB-GROUP'],'',$text);
        $text  = str_replace('EB-SIZE='.$this->data['EB-SIZE'],'',$text);
        $text  = str_replace('END_EDITBOX',"{{ control noticForm-$this->id }}",$text);//
        $this->template->text = $text;
        $this->template->render();
    }

 }

Toto je template {control noticForm-$id} je tu pro mou kontrolu ze se o pravdu vytváří zprávně by se měla vykreslit již v tom textu.

{block content}
{$text|noescape}
{control noticForm-$id}

Je mi jasné, že je to hodně zvláštní, tak budu rád za jakékoliv rady.

před 2 lety

CZechBoY
Člen | 3386
+
0
-

Control je makro. Neni mozne vkladat makra do sablony z promenne. Musis to nejak obejit a mit to makro v sablone komponenty nebo vykreslit sablonu ze stringu pres LatteFactory.

před 2 lety

crookslovacko
Člen | 50
+
0
-

Dekuji za nakopnuti Posunul jsem se po sem:

Takto sem zmenil render..uz to ani nedavam do souboru ale presLatteFactory dle rady Uz jsem to donutil alespon brat makra, ale stejne mi to haze chybu
Undefined property: stdClass::$uiControl
na radku echo Nette\Bridges\FormsLatte\Runtime::renderFormBegin($form = $_form = $this->global->formsStack[] = $this->global->uiControl[„noticForm-1“], []);

public function render(){
        $latte = new Latte\Engine;
        $latte->setLoader(new Latte\Loaders\StringLoader); //pokud chci template ve stringu
        $latte->setTempDirectory('./temp');
        $latte->onCompile[] = function($latte) {
            Nette\Bridges\FormsLatte\FormMacros::install($latte->getCompiler());
        };

        $params['forms_start']="{form noticForm-$this->id}";
        $params['forms_end'] =  "{/form}";
        $params['items'] = array('one', 'two', 'three','four');

//$temp='template.latte';  //soubor se šablonou



        $text = $this->data['TEXT'];
        $text  = str_replace('BEGIN_EDITBOX',$params['forms_start'],$text);
        $text  = str_replace('EB-ID='.$this->id,'',$text);
        $text  = str_replace('EB-GROUP='.$this->data['EB-GROUP'],'',$text);
        $text  = str_replace('EB-SIZE='.$this->data['EB-SIZE'],'',$text);
        $text  = str_replace('END_EDITBOX',$params['forms_end'],$text);

        $latte->render($text, $params);
    }

asi tam rvu ten nazev spatne ale nevim kde je presne problem