JS változó PHP kódban

JS változó PHP kódban
2021-03-17T21:07:48+01:00
2021-03-18T16:53:34+01:00
2022-10-15T21:16:20+02:00
RobertHerold
Sziasztok,

Az alábbi kóddal próbálnám meg elérni, hogy btn kattintásra, a H1-be kerüljön a btn data-id-hoz tartozó post title, de valamiért nem sikerül.

Van esetleg ötletetek, hogy hol lehet a hiba?

<a class="btn" data-id="<?php echo get_the_ID() ?>">Delete</a> <h1 class="p-title"></h1> <script> $(document).ready(function(){ $(".btn").click(function(){ var pid = $(this).data('id'); var title = "<?php echo get_the_title("+ pid +"); ?>" $(".p-title").html(title); }); }); </script>
Mutasd a teljes hozzászólást!
Értelmezd egy kicsit a kódot amit adtam.

A button attributumai között át tudsz adni data-valami tagot.
Ezt pedig a js-el le tudod kérni:

$(this).data('valami');
Szóval ennek fényében át tudod adni a del_linket is.
Mutasd a teljes hozzászólást!

  • Azt ugye tudod, hogy amikor a js részhez ér a dolog, akkor a php már réges-régen befejeződött?
    Mutasd a teljes hozzászólást!
  • Szerintem menj vissza az alapokhoz és tanuld meg mi az a szerver és mi az a kliens oldal. A PHP kódod már régen lefutott, mire lejut a böngésződig, azaz fixen ki lesz írva ez:

    var title = "<?php echo get_the_title("+ pid +"); ?>"
    Azt gyanítom erre syntax error-t is fogsz kapni. Ami neked kell az az AJAX.
    Mutasd a teljes hozzászólást!
  • Hát amúgy ha ezt a sort:

    var title = "<?php echo get_the_title("+ pid +"); ?>";
    lecserélem erre:

    var title = "<?php echo site_url('"+ pid +"'); ?>";
    akkor kiírja az URL-t.

    Nyilván nincs ilyen URL, csak teszteltem, hogy a pid-et átadja-e. És átadja. Tehát idáig rendben.
    Azt gyanítom, hogy az lehet a baj, hogy a get_the_title-nek integer kell, míg a site_url-nek nem muszáj.
    Mutasd a teljes hozzászólást!
  • Zárjuk rövidre:
    Nézd meg az oldal forrását a böngészőben (CTRL+U) és elemezd a "var title = ..." sort!
    Mutasd a teljes hozzászólást!
  • Oké, nincs ott semmi.

    De ha a var title sorban átírom
    site_url('"+ pid +"')
    -re, akkor már lesz ott valami. Ez miért van?
    Mutasd a teljes hozzászólást!
  • Rossz a megközelítésed teljesen sajnos. 
    Ha jól sejtem ez valami WP oldalhoz lesz. Inkább így csináld.

    <?php $pid = get_the_ID() ?> <a class="btn" data-id="<?php echo $pid ?>" data-title="<?php echo get_the_title($pid) ?>">Delete</a> <h1 class="p-title"></h1> <script> $(document).ready(function(){ $(".btn").click(function(){ var pid = $(this).data('id'); var title = $(this).data('title'); $(".p-title").html(title); }); }); </script>
    Mutasd a teljes hozzászólást!
  • Az a baj, hogy sajnos nem csak a title kell, hanem igazából ez lenne a lényeg:

    var del_link = "<?php echo get_delete_post_link("+ pid +"); ?>"; $(".del").html("<a href='"+ del_link +"'>Delete</a>");
    Tehát btn kattintásra feldob egy popUp-ot, ahol törölni lehet az adott post-ot. És ugye több post van egy oldalon.
    Csak gondoltam, ha rájövök, hogy a címet hogy lehetne kiíratni, akkor a törlés is menni fog.
    Mutasd a teljes hozzászólást!
  • Az url gondolom hogy valami fix, tehát ha már van id, akkor az valami ilyesmi lesz: mydomain/post/delete/1, ahol az 1 az id, tehát össze tudod tenni JS-ből:

    var del_link = "<?php echo get_delete_post_baselink(); ?>"+ pid;

    Ahogy többen írták már, a js alatt a PHP nem működik. A PHP-vel csak az oldal forrását szerkesztheted.
    Mutasd a teljes hozzászólást!
  • A PHP -t és JS -t válaszd külön!

    A "var pid = $(this).data('id');" lényegében a "data-id="<?php echo get_the_ID() ?>"" részt olvasná be.
    Ahogy korábban írták:

    <?php $pid = get_the_ID(); ?>
    ezzel a $pid PHP változóba meg kapod az ID -t.
    Ahol JS -el fűzted volna hozzá, ott $pid php változóval csinálod.

    Ehyelett:

    var del_link = "<?php echo get_delete_post_link("+ pid +"); ?>"; $(".del").html("<a href='"+ del_link +"'>Delete</a>");
    Így:

    var del_link = "<?php echo get_delete_post_link(". $pid ."); ?>"; $(".del").html("<a href='"+ del_link +"'>Delete</a>");
    DE! Akár a "del" class -al rendelkező elem közé is be illeszthetnéd közvetlen PHP -val.
    és nem JS -el szúrnád utólag kliens oldalon.
    Mutasd a teljes hozzászólást!
  • var del_link = "<?php echo get_delete_post_link(". $pid ."); ?>";
    helyett

    var del_link = "<?php echo get_delete_post_link($pid); ?>";
    Mutasd a teljes hozzászólást!
  • Értelmezd egy kicsit a kódot amit adtam.

    A button attributumai között át tudsz adni data-valami tagot.
    Ezt pedig a js-el le tudod kérni:

    $(this).data('valami');
    Szóval ennek fényében át tudod adni a del_linket is.
    Mutasd a teljes hozzászólást!
  • Az van, hogy itt több post van egy oldalon, és mindegyik post-hoz tartozik egy Delete gomb (btn), ami egy modal popUp-ot dob fel, amiben a tényleges delete link van.
    Nem minden post-hoz tartozik popUp, (tehát nem a loop-ban van) hanem csak egy popUp van, és ebbe kellene beolvasni az adott post-hoz tartozó dolgokat (delete link, post title), a btn kattintása révén.
    Így a get_the_ID() már kilőve, mert az az utolsó post id-jét adja vissza.
    Mutasd a teljes hozzászólást!
  • Így történt! :) Köszönöm szépen!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd