Support » Kokeneille käyttäjille » Suorittamisjärjestysongelmia

  • Resolved tapiohuuhaa

    (@tapiohuuhaa)


    Jälleen kerran niiden kanssa ongelmia.

    Loin funktion, joka palauttaa array-muuttujan.

    Se toimii tässä ihan ok:

    function topOpenSidebar($forum_id = 0 ){
    $articles = pageLists($list[2]);

    Tuo funktio on ns. shortcode-koodauksessa käytetty funtio

    Mutta kun toisessa tietueessa laitoin tietueen alkuun:

    $blogi = pageLists($list[0]);
    $articles=pageList($list[1]);
    $muut = pageLists($list[3]);
    $howAlt = pageLists($list[4]);

    tulikin ilmoitus, että funktiota pageLists() ei ole määritetty. Kun laitoin:

    function mylist($list){
    $list[0]=pageLists($list[0]);
    $list[1]=pageLists($list[1]);
    $list[3]=pageLists($list[3]);
    $list[4]=pageLists($list[4]);
    return $list;}

    ei tullut herjausta.

    Mutta kun laitoin perään:

    $blogi = mylist($list[0]);
    $articles=mylist($list[1]);
    $muut = mylist($list[3]);
    $howAlt = mylist($list[4]);

    taas ilmoitus, että pageList() ei ole määritelty.

    En ymmärrä, miksi funtiota pystyi kutsumaan osana omaa funktiota mutta ei irrallisella rivillä. Pitäiskö luoda luokka? 5-10v sitten tein viimeksi muutamia luokkia.

    Idea oli määritellä sivurajoitukset yhdessä funktiossa, josta sitten käyttäysi kaikkialla.

    Prioriteetti pageLists()-funktiolla oli kummassakin tapauksessa alempi kuin tietueessa, jossa funktiota kutsutaan.

Esillä 8 vastausta, 1 - 8 (kaikkiaan 8)
  • ”En ymmärrä, miksi funtiota pystyi kutsumaan osana omaa funktiota mutta ei irrallisella rivillä.”

    Ei pystynyt, koska silloin jos funktiokutsu on jemmattu toisen funktion sisään, jota ei kutsuta missään, silloin tulkki ei välttämättä tarkasta koko funktiota, eikä siten valita määrittelemättömästä funktiosta.

    Missä tuo pageLists()-funktio on määritelty? Teemassa? Missä sitä kutsutaan tarkalleen ottaen? Luokan tekeminen ei luultavasti auta, koska sitten sulle valitettaisiin, että luokkaa ei ole määritelty.

    Thread Starter tapiohuuhaa

    (@tapiohuuhaa)

    PHP-koodista Code Snippet -lisäosan kanssa on outo ongelma.

    Laitoin Code Snippet -tietueelle, jossa määritin funktion prioriteetin 1.
    Funtio, jossa oli kutsu, oli prioriteetilla 7.

    Oletin, että funktio löydettäisiin enkä saisi virheilmoitusta.

    Kun laitoin funktion samaan tietueeseen, missä sitä kutsuttiin, ongelmaa ei tullut.

    Jotenkin prioriteetit eivät toimi ihan oikein. Eikö 1-merkitty tietue pitäisi lukea ennen 7-merkittyä?

    Sinänsä idea ei toisaalla toiminut:

    Laadin funktion väärin, joten siitä ei ollut hyötyä siinäkään kohdassa, jossa funktiokutsu ei aiheuttanut ongelmia.

    function pageLists($list){
    $blogi=stristr($currentUrl=’https://’ . $_SERVER[’HTTP_HOST’]. $_SERVER[’REQUEST_URI’],’/test/blogikirjoitukset’);

    $list[0]=$blogi;
    $list[1]=$articles1;
    $list[2]=$articles2;
    $list[3]=$muut;
    $list[4]=$howAlt;
    return $list;}

    function topOpenSidebar($forum_id = 0 ){
    $articles = pageLists($list[2]);
    $blogi = pageLists($list[0]);
    if($articles){…}elseif($blogi){…}else{…}

    Ei listannut oikeita valikoita. Tuli aina sama valikko.
    Idea oli määritellä sivuryhmät yhdessä funktiossa ja käyttää muualla array-muuttujaa käyttäen. Miten array-muuttujan yksittäisiä arvoja voisi käyttää ehtoina mikä tehtävä (tässä tapauksessa valikon printtaus) suoritetaan ja mikä ei.

    • Tätä vastausta muokkasi 4 vuotta, 6 kuukautta sitten tapiohuuhaa.
    Thread Starter tapiohuuhaa

    (@tapiohuuhaa)

    Testasin funktion palauttamia arvoja eri sivuilla

    print_r(pageLists($list));

    Se antoi käyttökelpoisia arvoja, kuten:

    Array
    (
    [0] => /test/blogikirjoitukset/
    [1] =>
    [2] =>
    [3] =>
    [4] =>
    [5] =>
    [6] =>
    [7] =>
    )
    Array
    (
    [0] =>
    [1] => 1
    [2] => 1
    [3] =>
    [4] =>
    [5] =>
    [6] =>
    [7] =>
    )

    Tosta array-muuttujasta pitäisi vain saada oikealla lailla testi ulos, eli tuleeko testistä 1 tai string eli antaako se lopputuloksena arvon true vai ei.

    $blogi = pageLists($list[0]);
    $articles= pageLists($list[2]);

    elseif($blogi)… ei silti toimi sillä arvo on aina true kohdassa if($articles)…

    Hiivatti kun en keksi oikeaa logiikkaa.

    Thread Starter tapiohuuhaa

    (@tapiohuuhaa)

    Minusta Code Snippet on prioriteettien suhteen erittäin buginen.
    Laitoin Code Snippet -tietueelle, jossa määritin funktion prioriteetin 1.
    Funtio, jossa oli kutsu, oli prioriteetilla 7.

    Oletin, että funktio löydettäisiin enkä saisi virheilmoitusta.

    Kun laitoin funktion samaan tietueeseen, missä sitä kutsuttiin, ongelmaa ei tullut.

    Jotenkin prioriteetit eivät toimi ihan oikein. Ymmärtääkseni 1-merkitty tietue pitäisi lukea ennen 7-merkittyä, mutta niin ei käynyt. Ei ainakaan Code Snippet -tietueen tallennusvaiheessa. Koodi olisi saattanut todellisuudessa toimia ilman virheilmoitusta netissä, jos sen olisi pystynyt tallentamaan. Ymmättääkseni lisäosa toimi tässä kohtaa bugisesti.

    Toisaalta on käynyt toisinkin päin. Pririteetti on ollut väärin, mutta Code Snippet ei valittanut virheestä.

    Tuntuu, että lisäosa lukee tietueet vähän miten sattuu ja löytää tai jättää löytämättä funktioita epäloogisesti.

    Kysyin tästä asiasta tekijältä:

    https://wordpress.org/support/topic/priority-checking-error/

    Voi olla, että noiden Code Snippetsin pätkien suoritusjärjestyksessä on jotain epämääräistä, ehkä kaikkia tietueita ei esimerkiksi ladata aina, vaan jotenkin tarpeen mukaan, jolloin on ihan sama mitä prioriteettejä suorittamattomassa koodissa on.

    Voisi olla parempi idea määritellä nuo prioriteetilliset filtterit jossain vakaammassa ympäristössä, eli joko teeman functions.php:ssa tai omassa pluginissa. Prioriteetithan muutenkin liittyvät vain filttereihin, ei kai Code Snippetsissä filttereitä kannata määritellä?

    Jätä Code Snippetsiin sitten vain ne jutut, jotka on tarkoitettu just siinä tietyssä paikassa ajettavaksi ja jotka eivät riipu mistään ulkopuolisesta koodista, koska selvästikään Code Snippetsissä ei voi luottaa siihen, että jossain toisessa snippetissä määritelty koodi olisi käytettävissä.

    Thread Starter tapiohuuhaa

    (@tapiohuuhaa)

    No olen onnistuneesti käyttänyt prioriteetilla 0 olevan snippetin funkitiota monessa muussa snippetissä.

    Olen käyttänyt myös onnistuneesti fillereitä ja ylipäätänsä WordPressin ja bbPressin funktioita.

    Pririteettimäärityksiin liittyviä ongelmia on tullut kaksi kertaa. Kuten joskus kerroin, sivusto kaatui kun oli kutsunut toisessa snippetissä määriteltyä funktiota. Sen sain korjattua määrittelemällä eri prioriteetit. Tässä säikeessä kohdattu tilanne oli ensimmäinen, jossa Code Snippet ei lukenut alemmalla prioriteetilla määriteltyä snippettiä ylemmän arvon omaavassa snippetissä.

    Lisäosan ongelma on tosiaan epäluotettavuus. Toivottavasti tekijä saa lisäosan toimimaan luotettavammin. No tein erillisen testisivuston, jossa virheellinen toiminta ei aiheuta katastrofia. Kun tiedän, että lisäosa ei toimi aina loogisesti, sen kanssa pärjään. Koodin laittaminen snippetiksi on helpoin tapa tehdä omia lisäyksiä.

    Thread Starter tapiohuuhaa

    (@tapiohuuhaa)

    Ihan vaan tiedoksi, että ratkaisin käyttöongelman. Piti luoda silmukka:

    $address = pageLists($list);
    $x=0;// laskuri for-silmukan tapaan
    foreach ($address as $value) {
    if($x<3){
    if($x==0){
    $blogi=$value;
    }
    elseif($x==2){
    $articles=$value;
    }}else{break;}
    $x++;
    }​

    Jos haluat, voit testata mobiililaitteella (laita varmuuden vuoksi pystysuuntaan):

    https://www.sanaristikkofoorumi.net/test/forums/
    avaa valikko ja klikkaa LISÄT
    testaa sama blogiosiossa ja artikkeliosiossa.
    Tulee eri sisältö.

    Ongelmat on ratkaistu, mutta Code Snippet kanssa pitää kaikki testata tarkasti.

    Thread Starter tapiohuuhaa

    (@tapiohuuhaa)

    Ihan vaan tiedoksi, että kävin niin, että sivusto kaatui, kun olin vahingossa jättänyt päälle tietueen, jossa oli sama funktio.

    CodeSnippet ei varoittanut, että sama funktio oli määritetty, koska se ei funktiota löytänyt. On kyllä pirullinen bugi. Ihan totaalisen epäluotettava sen tarkistsamisen suhteen, onko funktio olemassa vai ei. Yleensä menee oikein, mutta kolmesti mennyt väärin.

Esillä 8 vastausta, 1 - 8 (kaikkiaan 8)
  • The topic ‘Suorittamisjärjestysongelmia’ is closed to new replies.