Přidání vlastní třídy komentáře

Úvodní stránka Fórum podpory WordPressu Šablony, CSS (zobrazení webu) Přidání vlastní třídy komentáře

Zvolené téma neobsahuje zatím 1žádnou odpověď. Do diskuze (2 účastníci) se naposledy zapojil uživatel  peeeeeta a poslední změna je stará 8 let, 1 měsíc.

Aktuálně je na stránce zobrazeno 11 příspěvků - 1. až 11. (z celkem 11)
  • Autor
    Příspěvky
  • #26471

    peeeeeta
    Participant
    Web

    Zdravím,
    jak mohu přidat ke stávajícím třídám vlastní třídu.
    Potřeboval bych přidat ke komentářům, které splní určitou podmínku další třídu. Teď tam mám základní a když využiji této funkce

    function komen_class()
    	{$classes[] = 'stary';
    return $classes;}

    Tak mám u komentáře jenom
    classes="stary" a již tam nemám ty další.
    Tak že se mi rozhodí všechny styly.
    Já bych potřeboval, aby se mi zobrazilo
    class=" stavaji tridy stary".
    Jde to nějak?

    #26472

    sjiamnocna
    Participant
    Web

    Ahoj
    No, předpokládám, že je to filtr, přidaný přes add_filter()?

    V tom případě musí funkce nejdříve přijmout staré pole s třídami, přidat jednu navíc a teprve potom vrátit pole s přidanou třídou, čili tak nějak;

    <?php
    function my_comment_classes( $puvodni, $class, $comment_id ){
     $puvodni[] = 'mojetrida';
     return $puvodni;
    }
    add_filter('comment_class', 'my_comment_classes',10,3);
    ?>

    Pokud jsem to odhadl špatně prosím napiš znovu sem do topicu

    #26473

    peeeeeta
    Participant
    Web

    Ano přesně to jsem chtěl.
    Nemohl jsem ale přijít na to jak získat původní třídy.
    Jak funguje ta funkce. Nevidím, kde by bylo vypsány staré třídy a pak k nim přibyla nová.
    Očekával bych někde spojení pomocí tečky.

    add_filter() samozřejmě využívám.

    Díky moc funguje to ;)

    #26474

    sjiamnocna
    Participant
    Web

    Pole je proměnná, která obsahuje více oddělených hodnot, které můžeme najít pod tzv. Indexy – $pole[1], $pole[14], atd.

    Třídy proto, aby se mohly měnit filtrem, umístí se do takovéto proměnné. Nakonec se všechny spojí a tvoří HTML atribut class.

    Aby mohly jednotlivé funkce přidávat / odebírat třídy, jak se programátorovi zachce, musí si tyto třídy – tedy celou proměnnou (pole) – mezi sebou předávat. To dělají tak, že přijmou toto pole jako parametr funkce, udělají s ním, co potřebují, a vyplivnou výsledek, který si do parametrů dá další funkce. Nakonec si je všechny vyzbírá HTML atribut class a všechny jje vypíše ;-)

    Vím, zní to jako válečná románová tetralogie, ale zhruba tak nějak to funguje :-)

    #26475

    peeeeeta
    Participant
    Web

    No teď když na to koukám, tak už mi to dochází.
    Pole znám. Jen jsem se hned nezorientoval.
    Prostě přibude další index a pak vypíšu celé pole.
    Díky už jsem si to uvědomil.
    ____ Jen jedna věc mi není jasná, jak jsem dostal do pole puvodni ty předchozí třídy.
    Nikde nevidím předání do pole hodnoty.
    Přeci hodnoty u function jsou jen hodnoty, s kterými lze pracovat uvnitř funkce.

    #26480

    sjiamnocna
    Participant
    Web

    Wordpress pouze nadefinoval funkci comment_class, která vypíše všechny třídy, které se různými aplikovanými filtry dostanou do pole tříd (je jedno s jakým indexem, proto se používá $classes[] = '' pro přidání), potom vezme pole tříd, spojí je mezerou a vloží do HTML prvku.

    Filtry fungují tak, že si jednotlivé funkce vzájemně předávají upravenou hodnotu pole, tedy:

    nejprve přeskočím na apply_filters – tato “funkce” je použita až po definici všech filtrů, ale je klíčová – tady se pouze zavolají a spustí všechny filtry. Do prvního filtru se vloží $hodnota ze zadání, tedy 123, a dalšími parametry, ovlivňujícími práci filtru 999 a text ‘aligator’:
    apply_filters('abc', $hodnota = 123, $dalsipromenna = 999, $adalsipromenna = 'aligator');

    muj_filtr_a($hodnota, $dalsipromenna, $adalsipromenna){
    //dělej něco s hodnotou
    if ($adalsipromenna == 'aligator') $hodnota = $hodnota / $dalsipromenna;
    //vrátíme hodnotu vydělenou číslem 999, tedy 123/999
    return $hodnota; //0,123123123123
    }
    /*identifikator filtru je 'abc' tak tedy pokud zadáme 'abc', provede se
    'muj_filtr_a' je název funkce. Klidně tam může být metoda ze třídy (OOP),
    tedy místo 'muj_filtr_a' bude array('nazevtridy','nazevmetody')
    na třetím místě je důležitost. Čím je číslo vyšší, tím později se funkce v řadě spustí - pokud chcete např. vymazat celý obsah, dejte nějaké vysoké číslo, jinak vám tam naskáčou další úpravy. Poslední je počet parametrů, které je funkce schopna přijmout - tedy pokud tam nebude nic, funkce dostane zadánu pouze proměnnou $hodnota, pokud tam jsou 3, dostane všechny 3, tedy
    $hodnota, $dalsipromenna, $adalsipromenna
    */
    add_filter('abc','muj_filtr_a',5,3);
    
    /*další filtr dostane do par. $hodnota upravenou hodnotu z filtru a, parametry $druhahodnota, $tretihodnota dostane stejné jako předchozí hodnoty $dalsipromenna, $adalsipromenna, protože tyto se nemění, jen přidávají další pokyny*/
    function muj_filtr_b($hodnota, $druhahodnota, $tretihodnota){
    //dělej něco s hodnotou
    if ($tretihodnota == 'aligator') $hodnota = $hodnota / $tretihodnota;
    //vrátíme hodnotu vydělenou číslem 999, tedy 0,123123123123/999
    return $hodnota; //0,000123246369492
    }
    add_filter('abc','muj_filtr_b',9,3);

    Takto si mezi sebou předává pole $tridy třeba 20, 30 funkcí:

    1. fce - přidá třídu 'a', do prázdného pole array{}
    2. fce - přidá třídu 'b' do pole, které již obsahuje jednu hodnotu 'a'
    3. fce - prohledá pole $tridy a vymaže záznam, který obsahuje 'a'
    4. fce - dostává pole, obsahující jen 'b'. Když zjistí, že třída 'a' v poli není, přidá třídu 'c'
    5. dejme tomu, že poslední funkce (nechce se mi psát :) ) projede celé pole a ke každé třídě přidá koncovku, třeba '-z', a je jí jedno, že tím zkazí celý vzhled webu :)

    Tedy na konci si apply_filters zavolá všechny funkce postupně, a prvnímu zadá hodnotu (prázdné pole):

    $tridy = apply_filters('comment_class',array());
    /*aby se nerozpadl design pouze se třídami 'b' a 'c', přidáme třídu 'comment', tu ovlivnit - odebrat ani změnit koncovkou nemůžeme, protože se přidá až po všech filtrech*/
    $tridy[] = 'comment';
    $tridy = implode(' ',$tridy);
    
    echo "<div class="$tridy"></div>

    Na konci získá (podle rozpisu fcí 1-5 a nakonec přidání ‘comment’) obsahový DIV komentáře třídy ‘b’, ‘c’ a ‘comment’, které spojí mezerou a vloží do DIV

    ______

    Filtr pouze zařídí to, že proměnnou, kterou předchozí funkce “vyplivne” (return $hodnota;), dostane další funkce, která ji dále zpracovává.

    Mělo by teď být jasné, jak se tam dostávají ty původní třídy –
    1. z jádra WordPressu, které přidává možnosti pro webdesignery
    2. z nejrůznějších pluginů, které je mohou používat třeba pro JavaScriptové úpravy ap.

    :)

    #26493

    peeeeeta
    Participant
    Web

    Děkuji za detailní popis. Snažil jsem se najít i nějaké české články i filtrech, abych jejich fungování lépe pochopil.
    Bohužel jsem vždy našel jen články rozdělení akcí a filtrů.

    Je někde nějaký obsáhlejší článek i s ukázkami nebo knížka nejlépe v češtině?
    Našel jsem jen seznam, na co lze filtry a akce zavěsit.
    Odkud čerpáš ty? Nebo to jsou léta praxe?

    #26508

    sjiamnocna
    Participant
    Web

    Léta praxe bych tomu neříkal, ale dejme tomu, že už mám drobnou představu, jak to asi funguje.. :)
    Neco jsem našel tady:
    http://kapler.cz/wordpress-filtry-a-akce-pro-zacatecniky/
    a tady:
    http://wordpress-sensei.cz/filtry-a-akce/

    #26509

    peeeeeta
    Participant
    Web

    Tyto stránky jsem už našel.
    No a odkud máš tu představu?

    #26516

    sjiamnocna
    Participant
    Web

    Jakože asi nic moc elementárního v češtině není. Chce to zkoušet – pokus:omyl => (částečný) úspěch :D

    Taky pomáhá naučit se Angličtinu a hledat na Googlu (popř. v kodexu nebo na developer.wordpress.org a ve fóru)

    #26526

    peeeeeta
    Participant
    Web

    No tak že aplikovat můj postup doposud.
    Anglické články také čtu, ale mám raději ty v češtině :) .

Aktuálně je na stránce zobrazeno 11 příspěvků - 1. až 11. (z celkem 11)

Pokud chcete odpovědět na toto téma, musíte se nejdříve přihlásit.

WordPress – novinky, návody a zajímavosti