Gépház?

Itt a Gépház.

Hibát találtál? Javaslatod van? Meg akarod dicsérni a Gépházat? Nem érted, hogy működik a felület? Look no further.

A hozzászólások alatt várjuk az észrevételeidet. Ha egyetértesz egy javaslattal vagy téged is nagyon zavar egy hiba, lájkold a hozzászólást.

Backlog

To-Do

  • translate theme (theme does not support translation)
  • toggle comment threads
  • BuddyPress?
  • chat?
  • Upgrade Jetpack?
  • Propose a random post from the archive

Work-in-progress

  • advanced search (awaiting user validation)
  • migrate from blog.hu

Complete

  • migrate from WP.com
  • latest comments plugin
  • migrate email subscribers
  • highlight latest comment in thread
  • like/dislike comment
  • subscribe to notification
  • timestamp on recent comments widget

343 Commments

  1. izé.

  2. jó, akkor most dolgozom, utána megpróbálom kitalálni, hol baszarintom el a válasz erre-t, mert hogy elb, az tuti.

  3. @Gépház: kösz. Egy pillanatra megörültem, hogy talán ez a kukacos-kattintós válasz lesz, hogy ha rákatt az előzményre, akkor oda is ugrik. De akkor ezt úgy lehetne megcsinálni, ha az előzmény kódjába a hivatkozott komment permalinkjét adnám meg, amit egyrészt nem tudok, másrészt a kis buborék biztos amúgy se lenne kattintható.

  4. Azért érzed ugye, hogy te itt már az ismert univerzum határait feszegeted… 🙂
    @Podvincecz marsall

    A permalinkhez elég a comment id-t ismerni.

    Ha az előzmény válaszolható, akkor az id-t megnézheted alul, ha a Válasz link föléd viszed az egeret.
    Ha nem, akkor a hozzászóláson jobbklikk, helyi menüből Inspect, az Elements fülben megkeresed azt a sor, ami úgy kezdődik, hogy
    <li id="comment-...."
    a … a commend id.

    Ha megvan a comment id, akkor csinálsz egy linket, ahol a link egyszerűen
    [@Józsi](#comment-...)
    ahol a … a comment-id.

    De szerintem nem akarsz te permanlinket. 🙂

  5. @Gépház: sejtem, hogy feszegetem 🙂 és nem, nem feltétlenül akarok permalinket, pedig tök hasznos és még mafi is sikítozva örülne. Szeretek legozni, csak nem tudok.
    Az ilyen kommentelőkről, mint én, ezt ajánlanám figyelmedbe, intő jelként.

  6. @Kettes számú Gépház csak kipróbálom azért, ez egy nagyon hasznos cucc, hátha még nekem is sikerül.

  7. yes, @Gépház felejtsd el a linkelt videot, már nem vagyok olyan, becsszó!

  8. Ja, csak nem mindig veszem észre, ha írsz.:-)

    Én továbbra is azt javasolnám, hogy a filterben tedd bele, hogy melyik kommentekről van csak szó:

    $query[‘comment__in’] = ov_get_last_comments(1);

    ahol a függvény innen a Constructing the SQL query alatt található get_cids_wpse(). Kérdés, hogy az még ma is fut-e így, módosítás nélkül, de ha igen, akkor visszaadja az érintett kommentek ID-jét, annyit, amennyit paraméterben átadsz (itt egyet). A szűrés meg már elvégzi akkor, hogy a plugin csak őket mutassa meg. Nem hiszem, hogy ennél gyorsabban és transzparensebben el lehetne érni a célt, és ez nem nyúl bele az eredeti pluginba.

  9. @Podvinecz marsall Te nem örülsz sikoltozva? Csak én? :))

    @Józsi izé Gépház Nem tennéd bele ezt a feszegetést is a leírásba, hogy megtaláljam, amikor most hogy már lehet, nem használom a permalinket hetekig, de aztán megint irtóra akarom?

  10. @mafi: ha kettőpontyot is teszek, olyan mint régen. sírok.

  11. Sőt, a komment végére, a Válasz link mellé akarom kiíratni azt a markdownt, amit bemásolhatsz a válaszodba, és akkor örülve sikoltozhatsz.

  12. Majdnem 400 ezer hozzászólás lesz az adatbázisban. Nem biztos, hogy jó ötlet, hogy minden címlapletöltéskor kétszer is lekérdezzük a comments táblát. Nem lenne jobb az utófeldolgozás? Akkor a második szűrés már csak 50 tételből válogat.

  13. Erre kapásból nem tudok jót válaszolni, mert nem ismerem a WP cache-stratégiáját, de az evi problémának azt látom, hogy: vagy belenyúlsz úgy, a lekérdezések optimalizása érdekében, hogy például már a $query filterbe beleteszel egy olyat, hogy max. 50 komment. Akkor nem fogja a sok hozzászólást mind visszaadni. Viszont, elvileg belefuthatsz egy olyan helyzetbe, hogy mondjuk van öt poszt, ebből egynél 49 hozzászólás van, lekérdezel ötvenet, megszűröd, és végeredményben csak két posztod lesz a címlapon, holott nyilván több lenne valójában.

    Vagyis, minden olyan megoldás, ami nem a lekérdezés szintjén tudja megoldani, hogy minden posztból csak egy kommentet vesz elő, hanem utólag szűri vissza, szükségszerűen egy, jóval több adatot fog megmozgatni, kettő, extrém esetekben, mint fent, tévedhet.

    Az a helyzet, hogy például Drupalnál tudnám, hogy hogy kell megoldani az ilyet úgy, hogy a címlapra kerülő blokk tartalma a cache-ben legyen, és akárhányan érkeznek, nem kell lekérdezni, megkapja a cache-ből. Ha születik egy új hozzászólás, az érvényteleníti a cache-t, akkor a következő látogatónak egyszer lefut, onnantól kezdve megint cache. De WP-hez ennyire nem tudok hozzászólni, ámbár nekiállhatok guglizni…

  14. De oké, nem tudom, most a plugin átpasszol-e valami maximumot a lekérdezésnek, de ha véletlenül nem, akkor állítsd be max 100 hozzászólásra (szerintem ez azért nagyjából elkerüli a fenti extrém esetet, nyilván nem matematikai bizonyossággal, de a gyakorlatban elegendően), és már csak azok között szűrj.

  15. plugin

    Igen, átadja a limit paramétert, ami most asszem 40-re van beállítva.
    Azzal a get_cids_wpse() függvénnyel annyi van, hogy a comment id-k nem dátumsorrendben növekednek, mert miközben mi itt kommentelgetünk, a háttérben migrálom a régi blog.hu-s kommenteket. Lényeg a lényeg, subselect nélkül nem fog menni, és akkor már inkább utófeldolgozás, megengedve, hogy extrém esetben nagyon kevés posztot kapunk vissza.

  16. Jó, akkor szerintem vedd feljebb 40-ről, az ő esetében az elmegy, ha válogatni akarsz, akkor 100 vagy 200 jobb lenne, és nem gondolnám, hogy túl nagy telerheltséget jelentene pluszban. Valamint, remélhetőleg, azért ez is cache-sel megfelelően.

  17. Elvileg mindkét szélsőség megeshet (az utolsó n hozzászólás n különböző posztra ment vs. az utolsó n hozzászólás ugyanarra a posztba ment). Az n változtatgatásával az egyik problémát orvosoljuk, a másikat súlyosbítjuk. Vagyis valójában két limitre lenne szükségünk, de a plugin csak egyet kezel.

    Úgy érzem, hogy a specifikáció kezd eszkalálódni. 🙂

    Megnéztem a WP get_comment() függvényét, és a sor végén lévő WP_Comment_Query kezel valami cache-eket, de a megfejtés meghaladja a képességeimet.

  18. Nem túl fontos, az a komment cache-e. Azt nyilván csinálja, rendben is van, de igazából a kérdés az lenne, hogy a recent_comments modul szintjén van-e cache az egész aktuális címoldali blokkra, és olyat nem látok.

  19. Általában azt mondanám, hogy meg ne lássam, hogy a $comments-et úgy szűröd, hogy végigmész rajta egy ciklussal, és pakolgatod, ami kell. 🙂 De mivel itt időközben adatot kell gyűjtened, hát…

    $results = [];
    $posts = [];
    for ($comments as $comment_id => $comment) {
    if (isset($posts[$comment->post_id)] {
    $results[] = $comments;
    $posts[$comment->post_id] = TRUE;
    }
    }
    return $results;

    De a $comment post_idje hasraütés, meg kell nézned.

  20. És természetsen !isset(), nem túl jó ötlet ide írni be csak úgy kapásból… 🙂

  21. Nice. Ezt a cwp_get_comments végére a get_comments() hívás után szúrjam be?
    (Egyébként a post id pontos neve comment_post_id).

        $results = [];
        $posts = [];
        for ($comments as $comment_id => $comment) {
            if (!isset($posts[$comment->comment_post_id)] {
                $results[] = $comments;
                $posts[$comment->post_id] = TRUE;
            }
        }
    
  22. Igen, lehet oda. A végén return $results;

    A $var = [] a $var = array() modernebb formája, ha esetleg olyan öreg arrafelé a PHP, hogy panaszkodik, akkor írd úgy, de azért nem hinném.

    A ciklust elkúrtam, mint Gyurcsány, egyszerre sok nyelven szoktam dolgozni, és most nem IDE-ben írtam, hanem itt… foreach, nem for.

    A foreach ($array as $key =&gt; $value) azt feltételezi, hogy a tömb $key alapján szervezett tömb, mindegyik eleme egy $value, vagy itt a komment ID-jével a kommentet magát adja vissza. Reméljük, mert ha nem, másképp kell, de elég furcsa lenne. Azért mutatom, hátha:

    foreach ($comments as $comment) {
    $comment_id = $comment->comment_id // mondjuk, ez az ID, ha ez a neve

  23. Ciklusban belül még egyszer van a comment_post_id

  24. Á, nem is kell neked egyáltalán a $comment_id

  25.     $results = [];
        $posts = [];
        foreach ($comments as $comment_id => $comment) {
            if (!isset($posts[$comment->comment_post_id)] {
                $results[] = $comments;
                $posts[$comment->comment_post_id] = TRUE;
            }
        }
    
        return $results;
    
    //     return $comments;
    

    Rámentek, mindenki kapaszkodjon. Ready?

  26. Annyi minden elrontottam benne a végére, várj, inkább beírom még egyszer.

    $results = [];
    $posts = [];
    foreach ($comments as $comment_id => $comment) {
    if (!isset($posts[$comment->comment_post_id)] {
    $results[] = $comment; // így csak hozzáadjuk sorban
    $results[$comment_id] = $comment; // így kulccsal együtt adjuk hozzá
    $posts[$comment->comment_post_id] = TRUE;
    }
    }
    return $results;

    Van két sor a ciklusban, az alternatív. Könnyen lehet, hogy a második kell neki inkább, de nem látom most, hogy melyiket kéri tőled vissza.

  27. Nem… A ciklusban a konkrét $comment-et kell hozzáadni, nem a teljes $comments tömböt újra és újra, az volt az egyik, aminél félrehordott a szemem.. Közben már most jól írtam…

  28. Azon gondolkodom, hogy ez nem a poszt utolsó hozzászólását írja fel a result tömbbe, hanem az elsőt, amit a comments-től kapott. Nem kéne visszafelé felolvasni a comments-et?

  29. Igen, azt. Én különösebb gondolkodás nélkül abból indultam ki, hogy csökkenő időrendben van. Miért, nem úgy van?

  30. Kijavítottam a szintaktikai hibát. Csak egy találatot ad vissza. Kipróbálom a másik verziót.

  31. A snippet:

        $results = [];
        $posts = [];
        foreach ($comments as $comment_id => $comment) {
            if (!isset($posts[$comment->comment_post_id])) {
                $results[$comment_id] = $comment;
                $posts[$comment->comment_post_id] = TRUE;
            }
        }
    
        return $results;
    
  32. Ilyenkor kezdene az ember belenézegetni, hogy mi jön belefelé, és mi kerül ahhoz képest a resultsba. 🙂

  33. Belenéztem a kódba, és nem használja a $comments-ből a kulcsokat. Úgyhogy, ha mégis így?

    $results = [];
    $posts = [];
    foreach ($comments as $comment) {
    if (!isset($posts[$comment->comment_post_id])) {
    $results[] = $comment;
    $posts[$comment->comment_post_id] = TRUE;
    }
    }

    return $results;

    comment->comment_ID lenne az ID, ha kellene, de nem kell igazán itt most.

  34. A post id pontos neve comment_post_ID. 🙂

        $results = [];
        $posts = [];
        foreach ($comments as $comment) {
            if (!isset($posts[$comment->comment_post_ID])) {
                $results[] = $comment;
                $posts[$comment->comment_post_ID] = TRUE;
            }
        }
    
        return $results;
    
  35. Hát, akkor jogos. 🙂 Te legalább látod a hibaüzeneteket valahol? Mert az segít…

  36. Köszönettel és az úri közönség nevében is hálásan átvettem. A fene se gondolta volna, hogy egy marsalli sóhaj micsoda energiákat mozgat meg, egészen megható. Annyit tudok felajánlani, hogy ha egyszer az életben összefutunk és még tudunk is róla, állom a sört, erre marsalli becsületszavamat adom. Részemről ruzsénoár, bankuver és fájront.

  37. Képbeszúrás próba

  38. Yay, a megrendelő átvette a munkát és meghívott minket a beláthatatlan jövőben egy bizonytalan minőségű sörre! 🙂
    Kudos!

Vélemény, hozzászólás?