Moi
Nyt olen taas aivan kuutamolla enkä pääse jyvälle, että mikä ao. supersimppelissä skriptissä on pielessä.
Ennen silmukkaa alustamani taulukko on aina tyhjä silmukassa.
$tids = []; foreach ($price->field_license_types as $license_type) { $formfield = &$form['line_item_fields']['field_permit_type']['und']['#options']; $tid = $license_type->field_license_type_term->tid->value(); if (!empty($formfield[$tid]) && !in_array($tid, $tids)){ $tids[$tid] = $tid; // Miksi tämä asetettu avain-arvopari ei näy seuraavien silmukoiden aikana? $label = $formfield[$tid]; $price = (float) $license_type->field_license_commerce_price->amount->value() / 100; $formfield[$tid] = implode(" ", array($label, $price , '€')); } }
Silmukan jälkeen voin käyttää taulukkoa ja se täyttynyt oikeilla arvoilla. Miksei siis silmukassa näy arvoa esim. 1 arvon asettamisen jälkeen?
No just - olihan taas ongelma. Jos CMS:ään asennetut teema ja lisäosa ovat samannimiset, niin koodi voidaan suorittaa kahteen kertaan - facepalm.
Käytännössä siis joku CMS sisäinen funktio kutsuu ensin lisäosan kohdalla x-nimellä alustettuja funktiota, jonka jälkeen CMS tekee saman myös teeman kohdalla.
Ja kun ne ovat samannimiset, niin funktio voidaan suorittaa kahteen kertaan, koska se ei tunnista, että onko kyseessä teema vai lisäosa, kunhan funktio löytyy.
Eikä se myöskään rekisteröi, että funktio olisi jo suoritettu.
Tokikaan teemassa ja lisäosassa ei voi olla määritettynä samoja funktiota, koska silloin tulkki antaisi herjan duplikaatista ja suoritus lakkaisi.
Voit itse estää funktion suorittamisen kahteen kertaan esimerkiksi staattisella muuttujalla:
function f() { static $suoritettu = false; if ($suoritettu) { return; } $suoritettu = true; // Koodi tähän. }
Tietysti vielä fiksumpaa olisi järjestää asiat niin, että funktiota ei edes kutsuta kahdesti...
Metabolix kirjoitti:
(11.08.2017 18:11:58): Voit itse estää funktion suorittamisen...
Aihe on jo aika vanha, joten et voi enää vastata siihen.