är denna php-syntax korrekt ?

Permalänk
Avstängd

är denna php-syntax korrekt ?

Hej,
Jag är ny på PHP och när jag kikar på en fil till en wordpressplugin så förstår jag inte hur den syntaxen kan vara korrekt (eller rättare sagt inte ge upphov till fel).

Längst ner klistrar jag in koden ifråga. Den kommer från en lightboxplugin till WP

1) Det första jag inte fattar är sekvensen { ?> <script> i början av koden och motsvarande <?php } vid slutet. Jag fattar inte logiken i placeringen av ?> och }. Det känns som att 'begin och end php-tecknen' har blivit felplacerade.

2) Det andra jag inte fattar är hur den andra funktionen kan skriva in skriptet korrekt i sidfoten i html, vilket jag har verifierat att den gör. Enligt WP-codex borde det se ut nåt i den här stilen...

function your_function() { echo '<p>This is inserted at the bottom</p>'; } add_action('wp_footer', 'your_function');

...men i funktionen smäller man på direkt med <script> utan något kommando typ echo som faktiskt säger åt php-tolken att skriva in i html.

Är den någon som har lust att hjälpa mig fatta varför koden funkar?
Tack!

<?php /******************* Load JS Scripts & CSS Styles *******************/ // Load the Javscript and CSS files. function iwmp_load_styles() { wp_enqueue_style( 'iwmp-styles', plugins_url( '/assets/magnific-popup.css', __FILE__ ) ); // Load JS in footer wp_enqueue_script( 'iwmp-scripts', plugins_url( '/assets/jquery.magnific-popup.min.js', __FILE__ ), array( 'jquery' ), '1.0', true ); } add_action( 'wp_enqueue_scripts', 'iwmp_load_styles' ); //Add script to the footer, to initate Magnific Popup. function iwmp_add_script() { ?> <script> // Ref: http://ajtroxell.com/use-magnific-popup-with-wordpress-now/ jQuery(document).ready(function($) { // Single Image $('a[href*=".jpg"], a[href*=".jpeg"], a[href*=".png"], a[href*=".gif"]').each(function(){ //single image popup if ($(this).parents('.iwmp-gallery').length == 0) { $(this).magnificPopup({ type:'image', callbacks: { open: function() { $('.mfp-description').append(this.currItem.el.attr('alt')); }, afterChange: function() { $('.mfp-description').empty().append(this.currItem.el.attr('alt')); } }, image: { markup: '<div class="mfp-figure">'+ '<div class="mfp-close"></div>'+ '<div class="mfp-img"></div>'+ '<div class="mfp-bottom-bar">'+ '<div class="mfp-title"></div>'+ '<div class="mfp-description"></div>'+ '<div class="mfp-counter"></div>'+ '</div>'+ '</div>', titleSrc: function(item) { return item.el.find('img').attr('alt'); } } }); } }); // Gallery Images $('.iwmp-gallery, .woocommerce-main-image').each(function() { $(this).magnificPopup({ delegate: 'a[href*=".jpg"], a[href*=".jpeg"], a[href*=".png"], a[href*=".gif"]', type: 'image', gallery: {enabled:true}, callbacks: { open: function() { $('.mfp-description').append(this.currItem.el.attr('alt')); }, afterChange: function() { $('.mfp-description').empty().append(this.currItem.el.attr('alt')); } }, image: { markup: '<div class="mfp-figure">'+ '<div class="mfp-close"></div>'+ '<div class="mfp-img"></div>'+ '<div class="mfp-bottom-bar">'+ '<div class="mfp-title"></div>'+ '<div class="mfp-description"></div>'+ '<div class="mfp-counter"></div>'+ '</div>'+ '</div>', titleSrc: function(item) { return item.el.find('img').attr('alt'); } }, }); }); }); </script> <?php } add_action( 'wp_footer', 'iwmp_add_script' ); ?>

Permalänk
Medlem

Då det ligger utanför PHP-tecknen (<?php och ?>) hanteras det som HTML och inte PHP, därmed krävs ingen echo. Dock ligger det fortfarande innanför {}-klamrarna, så det printas inte förrän funktionen körs.

Skickades från m.sweclockers.com

Permalänk
Avstängd

Okej, jag förstår.
Men jag tycker att det är mycket kontraintuitivt att funktionen är utspridd över tre olika strukturella sektioner: först som en del av php-kod, sen som html, och innan funktionen är slut så befinner den sig i php-kod igen. Det känns som ett väldigt omständligt sätt att skriva, lite omotiverat invecklat. Hade det inte varit mer logiskt att sätta allt inom ett och samma php-segment och sen sätta <script>...</script> inuti en echo?

Permalänk
Hedersmedlem
Skrivet av pigge_85:

Okej, jag förstår.
Men jag tycker att det är mycket kontraintuitivt att funktionen är utspridd över tre olika strukturella sektioner: först som en del av php-kod, sen som html, och innan funktionen är slut så befinner den sig i php-kod igen. Det känns som ett väldigt omständligt sätt att skriva, lite omotiverat invecklat. Hade det inte varit mer logiskt att sätta allt inom ett och samma php-segment och sen sätta <script>...</script> inuti en echo?

Det som gör det bökigt är kanske snarare uppbyggnaden av Wordpress här (men jag skulle gissa på att det finns bättre färdiga anrop för att inkludera JavaScript), och kodaren som utan betänkligheter bakar in HTML i JavaScript (med JQuery), i HTML, i PHP…

Om jag personligen skulle inkludera JavaScript på ett liknande sätt så skulle jag nog lagt hela JavaScript-koden i en extern fil som lästes in av PHP för att undvika att blanda multipla språk som nu görs. Det känns rätt omöjligt att köra tester på JavaScript-kod som bara existerar inbakad i en PHP-funktion på detta sätt, så det är inte precis en "best practice" (dessutom så skulle JavaScript-koden i sig må bra av en ordentlig omstrukturering).

Att hoppa ur PHP-läge för att skriva HTML snarare än att använda `echo` till HTML-partier är dock generellt att föredra för att hålla kod läsbar. Det är också snabbare, även om den biten sällan är särskilt relevant. När man går ytterligare en eller ett par nivåer ner i språkhierarkin som i kodexemplet här så har man dock större layoutproblem, i mina ögon.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.