Body zdarma Body zdarma
Využij podzimních slev a získej od nás až 40 % bodů zdarma! Více zde

Diskuze: [MVC] redakční systém - clanek.phtml ve stejném okně s clanky.phtml

Aktivity (2)
Avatar
dyžon
Člen
Avatar
dyžon:10. července 12:15

čau,
právě jsem dokončil kurz Jednoduchý redakční systém v PHP objektově (MVC)
rozlozeni.phtml jsem rozdelil na dve části: levaStrana (tady mám navigaci) a pravaStrana (clanek a clanky.phtml)
s tímhle není problém, ale co kdybych pravaStrana rozdělil zase na dvě části dejme tomu divList a divTelo
do divList nechám vypsat všechny články a do divTelo pak po kliknutí na článek z divList vypsat konkrétní článek (clanek.phtml).
clanky.phtml:

<div class="divList">
<h1>Seznam článků</h1>
        <table>
        <?php foreach ($clanky as $clanek) : ?>
                <tr>
                        <td>
                                <h2><a href="clanek/<?= $clanek['url'] ?>"><?= $clanek['titulek'] ?></a></h2>
                                <?= $clanek['popisek'] ?>
                                <?php if ($admin) : ?>
                                        <br />
                                        <a href="editor/<?= $clanek['url'] ?>">Editovat</a>
                                        <a href="clanek/<?= $clanek['url'] ?>/odstranit">Odstranit</a>
                                <?php endif ?>
                        </td>
                </tr>
        <?php endforeach ?>
        </table>
</div>

<div class="divTelo">
        jak v  tomhle divu vypíšu clanek.phtml / po kliknutí na konkrétní článek ?
</div>

Zkusil jsem: podle mě je potřeba upravit pouze soubory ClanekKontroler­.php a pak clanky.phtml
je to pro mě oříšek, strávil jsem nad tím už spoustu času a pořád se mi nedaří.
úmyslně sem nedávám žádnej svůj pokus, protože nic nefungovalo ami v náznaku. Asi byste se i dost nasmáli, ale mě už bylo skoro i do breku ... :-)

Chci docílit: chtěl bych poprosit někoho, aby mi alespoň nastínil, kudy se vydat a zda je vůbec možné toho dosáhnout přepsáním pouze těchto dvou souborů, nebo je potřeba překopat celý systém Hezkých URL adres.
přikládám ještě obrázek, jak by to asi mělo vypadat:
[* rozlozeni.png .(tak by to mělo vypadat) *]

 
Odpovědět 10. července 12:15
Avatar
dyžon
Člen
Avatar
Odpovídá na dyžon
dyžon:10. července 12:26

upravil jsem obrázek rozložení, teď je správně.

Editováno 10. července 12:27
 
Nahoru Odpovědět 10. července 12:26
Avatar
dyžon
Člen
Avatar
Odpovídá na dyžon
dyžon:10. července 13:40

omlouvám se, teď je to správně ....
nedá se tady mazat vlastní příspěvky a krátká doba na úpravu ... :-) :-) 8-)
jinak mám řešení, pomocí javascriptu volám funkci v souboru vypisClanek.php, která mi vrátí data k vypsání článku v divTelo, ale ničím tím cely MVC.

 
Nahoru Odpovědět 10. července 13:40
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:10. července 14:15

Priprav si vysledek do pole a pak pouzij jednoduchy sablonovaci system, treba tento.
Sablony s if+echo jsou spatny priklad, takove clanky necti :)

https://www.itnetwork.cz/…d02784d03564

public function pageRender($tpl='', $items = array())
        {
        if (!(gettype($tpl)==="string" && gettype($items)==="array" && count($items)>0))
                {
                return $tpl;
                }
        $items2 = array();
        foreach($items as $key => $value)
                {
                $items2["{".$key."}"] = $value; // rychlejsi zkopirovat do array nez unsetovat v puvodni
                }
        return strtr($tpl, $items2);
        }
Editováno 10. července 14:17
 
Nahoru Odpovědět 10. července 14:15
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
dyžon
Člen
Avatar
Odpovídá na Peter Mlich
dyžon:12. července 8:36

to Peter Mlich: asi jsi mě úplně nepochopil, nepotřebuji vytvářet šablonu, to budu mít napsaný v zakazky.php . zřejmě jsem to popsal špatně.

každopádně jsem už vychladl a znovu se nad tím zamyslel a hle, najednou to jde :-) :-) 8-)
ClanekKontroler:

<?php

class ClanekKontroler extends Kontroler
{
    public function zpracuj($parametry)
    {
        $this->overUzivatele(true);
        $spravceClanku = new SpravceClanku();
        $spravceUzivatelu = new SpravceUzivatelu();
        $uzivatel = $spravceUzivatelu->vratUzivatele();
        $this->data['admin'] = $uzivatel && $uzivatel['admin'];

        $clanky = $spravceClanku->vratClanky();
        $this->data['clanky'] = $clanky;

        if (!empty($parametry[0]))
        {
            $clanek = $spravceClanku->vratClanek($parametry[0]);
            if (!$clanek)
                $this->presmeruj('MyDir/chyba');

            $this->hlavicka = array(
                'titulek' => $clanek['titulek'],
                'klicova_slova' => $clanek['klicova_slova'],
                'popisek' => $clanek['popisek'],
            );

            $this->data['nazevClanku'] = $clanek['titulek'];
            $this->data['popisClanku'] = $clanek['popisek'];
        }
        else
        {
            $clanek = $clanky[0];
            $this->data['nazevClanku'] = $clanek['titulek'];
            $this->data['popisClanku'] = $clanek['popisek'];
        }

        if (!empty($parametry[1]) && $parametry[1] == 'odstranit')
        {
            $this->overUzivatele(true);
            $spravceClanky->odstranClanek($parametry[0]);
            $this->pridejZpravu('Clanek byl úspěšně odstraněn');
            $this->presmeruj('MyDir/clanek');
        }

        $this->pohled = 'clanky';

    }
}

clanky.phtml

<div class="vsechnyClanky">
    <h1>Seznam Článků</h1>
    <br /><br />
    <table>
    <?php foreach ($clanky as $clanek) : ?>
        <tr>
            <td>
                <div class="objClanek">
                    <a href="/<?= $clanek['url'] ?>">

                        <div class="clanekCislo">
                            <p>88888</p>
                        </div>
                        <div class="clanekPopis">
                            <p class="jmenoClanku"><?= $clanek['titulek'] ?></p>
                            <p class="popisClanku"><?= $clanek['popisek'] ?></p>
                        </div>
                    </a>
                </div>
            </td>
        </tr>
    <?php endforeach ?>
    </table>
</div>

<div class="vybranyClanek">

    <h1><?= $nazevClanku ?></h1><br /><br />
    <p id="popis"><?= $popisClanku ?></p>

</div>
 
Nahoru Odpovědět 12. července 8:36
Avatar
dyžon
Člen
Avatar
Odpovídá na dyžon
dyžon:16. července 8:23

dokázal by mi prosím někdo poradit, jak to udělat, aby se při kliknutí na článek v class="vsechny­Clanky"

<a href="/<?= $clanek['url'] ?>">

přepsaly hodnoty v class="vybrany­Clanek" bez znovunačtení stránky ?
zřejmě bude zapotřebí javascript, nebo by to šlo jen v php ??

 
Nahoru Odpovědět 16. července 8:23
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:16. července 13:29
<script>
var i, items;
items = document.querySelectorAll('.vsechnyClanky');
for (i in items) {items[i].className='123';}
</script>
Editováno 16. července 13:30
 
Nahoru Odpovědět 16. července 13:29
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 7 zpráv z 7.