NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Mario Brunmayr:11.12.2016 3:20

Ahoj lidi, nějak se mi nedaří předat údaj z kontroleru do parametru, zatim jsem to vždy předával přes POST a vždy bez problému ale teď se mi to nějak nedaří :(.

Kontroler

$PraceSeSoubory = new PraceSeSoubory();
                $osahHTMLSouboru = $PraceSeSoubory->NacteniObsahuSouboru('b');
                echo ($osahHTMLSouboru);

Model

        public function NacteniObsahuSouboru($obsahSou)
{
    $osahHTMLSouboru = file_get_contents('pohledy/'.$obsahSou.'phtml');
                echo ($osahHTMLSouboru);
        return $osahHTMLSouboru;
}

Echo mám vždy jen dočasně na zjišťování kde je chyba a problém je při předávání z kontroleru ale nemůžu přijít co je v syntaxi špatně.

 
Odpovědět
11.12.2016 3:20
Avatar
vlam
Člen
Avatar
vlam:11.12.2016 8:51

Otázka je trochu nesrozumitelná. Do jakého parametru chceš co předávat?
Pokud v kontroleru je 'b' název šablony (view) a pokud třída PraceSeSoubory() je ona modelová třída, jejíž instanci vytváříš v kontroleru (new), tak by ti to mělo chodit. Jen nezapomeň doplnit v návratu obsahu pohledu funkci htmlentities($ob­sahHTMLSouboru), abys nedostal jen holý text bez hrml tagů.

public function NacteniObsahuSouboru($obsahSou)
{
    $osahHTMLSouboru = file_get_contents('pohledy/'.$obsahSou.'phtml');
        return htmlentities($osahHTMLSouboru);
}
Editováno 11.12.2016 8:52
Nahoru Odpovědět
11.12.2016 8:51
Do demence ještě stále daleko.
Avatar
Odpovídá na vlam
Mario Brunmayr:11.12.2016 15:39

Problém mám v kontroleru protože kontroler má předat modelu hodnotu $obsahSou ale nepředá a nějak nemůžu přijít proč.

Ještě jedna doplňující otazka. Řešil jste někdo možnost vkládání hodnoty (value) do inputu textarea ve firefoxu 50.0.2 ? Nedaří se mi tam vložit předem definovanou hodnotu ale v chromu to jde bez problémů ale já by jsem potřeboval aby to šlo i ve firefoxu.

 
Nahoru Odpovědět
11.12.2016 15:39
Avatar
Mario Brunmayr:11.12.2016 15:50

Problem s HTML tagem vyresen, nemel jsem ho uzavreny a firefox s tim mel problem narozdil od chromu.

 
Nahoru Odpovědět
11.12.2016 15:50
Avatar
vlam
Člen
Avatar
vlam:11.12.2016 19:51

Kontroler předává do modelové funkce NacteniObsahu­Souboru jediný parametr a to string 'b', pokud tedy máš ve složce pohledy soubor b.phtml (cesta pohledy/b.phtml), pak to musí fungovat.

Nahoru Odpovědět
11.12.2016 19:51
Do demence ještě stále daleko.
Avatar
Odpovídá na vlam
Mario Brunmayr:11.12.2016 20:25

cesta je správně soubor b.phtml existuje postnu sem kompletní kontroler model i pohled.

pohled

 <h1>Editor článků</h1>

<form method="GET">
        název načítaného souboru<br />
        <input type="text" name="NacitanyObsah" value="" /><br />

        <input type="submit" value="Načíst" />
</form>


<form method="post">
        Titulek<br />
        <input type="text" name="titulek" value="<?= $clanek['titulek'] ?>" /><br />
        URL<br />
        <input type="text" name="url" value="<?= $clanek['url'] ?>" /><br />
        Popisek<br />
        <input type="text" name="popisek" value="<?= $clanek['popisek'] ?>" /><br />
        Klíčová slova<br />
        <input type="text" name="klicova_slova" value="<?= $clanek['klicova_slova'] ?>" /><br />
    <textarea name="obsah"><?= $clanek['obsah'] ?></textarea>
        <input type="submit" value="Uložit článek" />
</form>

<script type="text/javascript" src="//tinymce.cachefly.net/4.0/tinymce.min.js"></script>
<script type="text/javascript">
        tinymce.init({
                        selector: "textarea[name=obsah]",
                        plugins: [
                                        "advlist autolink lists link image charmap print preview anchor",
                                        "searchreplace visualblocks code fullscreen",
                                        "insertdatetime media table contextmenu paste"
                        ],
                        toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image",
                        entities: "160,nbsp",
                        entity_encoding: "named",
                        entity_encoding: "raw"
        });
</script>

Kontroler

<?php
class EditorKontroler extends Kontroler
{
    public function zpracuj($parametry)
    {
                        //$PraceSeSoubory = new PraceSeSoubory();
                        //$a = $PraceSeSoubory->NacistOdkazy();

                        $PraceSeSoubory = new PraceSeSoubory();
                        $a = $PraceSeSoubory->NacistOdkazy();
        // Hlavička stránky
        $this->hlavicka['titulek'] = 'editor článků';
        $this->hlavicka['popis'] = 'editace článků';
        $this->hlavicka['klicova_slova'] = 'editor, změna, editovat';
                $this->hlavicka['odkazy'] = $a;
        // Nastavení šablony

        $this->pohled = 'editor';
 if ($_GET)
 {
                        $PraceSeSoubory = new PraceSeSoubory();
                $obsahHTMLSouboru = $PraceSeSoubory->NacteniObsahuSouboru($_GET['NacitanyObsah']);
                //echo ($osahHTMLSouboru);
 }
                 $clanek = array(
                        'titulek' => '455',
                                                'obsah' => '<b><strong>osahHTMLSouboru</strong></b>',
                        'url' => 'ahoj',
                        'popisek' => '65',
                        'klicova_slova' => '54 yhug',
                );
                $this->data['clanek'] = $clanek;

 if ($_POST)
 {
        $PraceSeSoubory = new PraceSeSoubory();
        $PraceSeSoubory->VytvoritSoubory($_POST['url'], $_POST['obsah'], $_POST['titulek'], $_POST['popisek'], $_POST['klicova_slova']);
 }

   }


}

model

<?php
class PraceSeSoubory
{

        public function VytvoritSoubory ($url, $obsah, $titulek, $popisek, $klicova_slova)
        {
                        $urlBezMezer = str_replace(" ", "", $url);
               $urlBezDiakritiky = strtr($urlBezMezer,
            "áčďéěíľňóřšťúůýžÁČĎÉĚÍĽŇÓŘŠŤÚŮÝŽ",
            "acdeeilnorstuuyzACDEEILNORSTUUYZ");
        $url1 = lcfirst($urlBezDiakritiky);
        $url2 = ucfirst($urlBezDiakritiky);

        $soubor1=fopen("pohledy/".$url1.".phtml", "w+");
        fwrite($soubor1, "".$obsah."");
        fclose($soubor1);

        $soubor2=fopen("kontrolery/".$url2."Kontroler.php", "w+");
        fwrite($soubor2,
        " <?php
class ".$url2."Kontroler extends Kontroler
{
    public function zpracuj(\$parametry)
    {
                                \$PraceSeSoubory = new PraceSeSoubory();
                        \$a = \$PraceSeSoubory->NacistOdkazy();
                \$this->hlavicka['titulek'] = '".$titulek."';
        \$this->hlavicka['popis'] = '".$popisek."';
        \$this->hlavicka['klicova_slova'] = '".$klicova_slova."';
                \$this->hlavicka['odkazy'] = \$a;
        \$this->pohled = '".$url1."';

                }
}
");
        fclose($soubor2);

        $soubor3=fopen("pohledy/odkazy/".$url1.".txt", "w+");
        fwrite($soubor3, '<li><a href="'.$url1.'"><button class="btn btn-primary">'.$titulek.'</button></a></li>');
        fclose($soubor3);
        }

public function NacistOdkazy ()
        {

        $dir = 'pohledy/odkazy/';
$dFilename = scandir($dir);



foreach ($dFilename as $odkazy)
{

    $a .= (file_get_contents($dir.$odkazy));


}
        return $a;
}


        public function NacteniObsahuSouboru($obsahSou)
{
    $obsahHTMLSouboru = file_get_contents('pohledy/'.$obsahSou.'phtml');
                echo $obsahHTMLSouboru;
        return $obsahHTMLSouboru;
}

}
 
Nahoru Odpovědět
11.12.2016 20:25
Avatar
Mario Brunmayr:11.12.2016 20:26

Echo tam mám jen pro kontrolu jestli se předání povedlo nebo ne

 
Nahoru Odpovědět
11.12.2016 20:26
Avatar
Odpovídá na Mario Brunmayr
Neaktivní uživatel:11.12.2016 21:40

No ale v modelu nenačítáš obsah souboru s příponou phtml, ale soubor s názvem necophtml. Podle mého ti tam chybí tečka před příponou.

Takhle bych to změnil

$obsahHTMLSouboru = file_get_contents('pohledy/'.$obsahSou.'.phtml');

Teda pokud to není záměr.

Editováno 11.12.2016 21:42
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
11.12.2016 21:40
Neaktivní uživatelský účet
Avatar
vlam
Člen
Avatar
vlam:12.12.2016 7:15

Jen letmo:
Pozor na překlepy, jednoduché a zdvojené uvozovky, chybějící znak $ u proměnné! Chce to více soustředění - vypni si hudbu, TV apod. :-)
Kontroler:

'obsah' => '<b><strong>osahHTMLSouboru</strong></b>',

namísto

'obsah' => "<b><strong>$obsahHTMLSouboru</strong></b>",

A taky se rozhodni zda použiješ <strong> nebo <b>, obojí je trochu mimo.

Editováno 12.12.2016 7:17
Nahoru Odpovědět
12.12.2016 7:15
Do demence ještě stále daleko.
Avatar
vlam
Člen
Avatar
vlam:12.12.2016 7:22

Oprava předchozí poslední věty:
A taky se rozhodni zda použiješ strong nebo b, obojí je trochu mimo.

Nahoru Odpovědět
12.12.2016 7:22
Do demence ještě stále daleko.
Avatar
Odpovídá na Neaktivní uživatel
Mario Brunmayr:13.12.2016 17:55

Děkuji vůbec jsem si toho nevšíml, taková hloupost, asi budu muset skusit nějaký framework kde bude nějaký debugovací nástroj ikdyž na takový typ chyby by mě nezachránil žádný nástroj na kontrolu :D.

 
Nahoru Odpovědět
13.12.2016 17:55
Avatar
Odpovídá na vlam
Mario Brunmayr:13.12.2016 18:22

Děkuji za pomoc a postřehy. Být na to lépe soustředěný by to chtělo ale holt škola potom práce a až potom všem PHP. Asi budu muset přestat chodit do školy nebo do práce :P . strong a b jsem měl jen na zkoušku jak mi na to zareaguje javascriptový editor a jestli to vypíše jako text nebo to použije jako html tag.

 
Nahoru Odpovědět
13.12.2016 18:22
Avatar
Odpovídá na Mario Brunmayr
Neaktivní uživatel:13.12.2016 22:31

No já to prošel jen tak od oka, ale určitě je fajn jak debugovat tak testovat.
Zkusit můžeš třeba xdebug, hodně IDE ho podporuje.
A nebo si vezmi laděnku z Nette (oficiálně se jmenuje Tracy) k té není potřeba celý framework.

Nahoru Odpovědět
13.12.2016 22:31
Neaktivní uživatelský účet
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 13 zpráv z 13.