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á 10 let, 8 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