Monimutkaisen PHP koodin lisääminen jokaiselle sivulle

phpBB3 ongelmia. Neuvoja ja ohjeita kuinka korjata.
MOD kysymykset, niiden asennukset ja omien muokkausten ongelmat alempana olevalle MOD alueelle.
elmo
Aloittelija
Aloittelija
Viestit:7
Liittynyt:09 Tammi 2009, 19:05
Monimutkaisen PHP koodin lisääminen jokaiselle sivulle

Viesti Kirjoittaja elmo » 09 Tammi 2009, 19:42

Terve

Minun pitäisi saada toimimaan kohtalaisen monimutkaista php-koodia jokaisella keskustelupalstan sivulla. Keskustelupalstan versio on uusin phpBB3.

Tekemäni sivusto on tehty oman template enginen päälle. Keskustelupalsta toimii erillisenä muusta sivusta, mutta ulkoasu ja osa sisällöstä pitää olla yhdenmukainen muun sivuston kanssa. Olen muokannut overall_header ja footer tiedostoja, ja ulkoasun muuttaminen onnistuu ihan ok. Asetuksista on säädetty PHP päälle ja keskustelualueen näytettävä sivu luodaan uudestaan jos se on vanhentunut.

Näiden "monimutkaisten" php-koodien avulla luodaan käyttäjän henkilökohtainen valikko sekä mainoksia sivuston oikeaan laitaan (tulostus overall_footer tiedostossa) ja mainos sivuston yläosaan (tulostus overall_header tiedostossa). Tarvittavat tiedot haetaan tietokannasta sitä varten tehtyjen luokkien avulla. Keskustelualueen ulkopuolella tiedot parsitaan oman template-enginen avulla, mutta keskustelualueen osalta voidaan käyttää phpBB:n template-engineä.

Vanhalla toisen henkilön tekemällä sivustoversiolla on käytössä phpBB2, jossa jokaista templatetiedostoa varten on oma "kooditiedostonsa". Vanhalla sivustolla ei käytetä mitään luokkia, sillä en viitsinyt niitä enää siihen sovittaa lyhyen käyttöajan vuoksi. Uuden sivuston ylläpito vaikeutuu, jos näiden mainos- ja valikkoluokkien toiminnot pitää toteuttaa erikseen keskustelualuetta varten.

Löytyykö phpBB3:sta joku puhdasta koodia varten tarkoitettu tiedosto (common.php?), jota käytetään jokaisella sivulla. Admin control panelia ei tarvitse kattaa, sillä tiedot tulostetaan overall_header ja -footer tiedostoissa. Tarkoituksena on siis hakea tiedot tietokannasta omien luokkieni avulla ja lähettää eteenpäin parsittavaksi phpBB3:lle (eli lisätä tarvittavat templatemerkinnät näihin header ja footer tiedostoihin kaarisulkeiden avulla: esim.{mainos}.

Templatetiedostoon tällainen ei luonnollisesti kuulu, vaikka sinne saankin lisättyä koodia <!-- PHP --> <!-- ENDPHP --> tagien avulla.

Annan lisätietoa tarvittaessa.

Kiitos etukäteen :)

elmo
Aloittelija
Aloittelija
Viestit:7
Liittynyt:09 Tammi 2009, 19:05

Re: Monimutkaisen PHP koodin lisääminen jokaiselle sivulle

Viesti Kirjoittaja elmo » 09 Tammi 2009, 21:33

Osittain itse itselleni vastaten:

common.php tiedosto ladataan joka sivulle (tai ainakin etusivulle :)), eli sinne kun lisää tiukkaa PHP koodia niin se suoritetaan aina.

Nyt sitten seuraava ongelma:

Onnistuin hakemaan mainokset tietokannasta oman luokan avulla ja parsimaan ne oman template-enginen avulla. Tiedot talletetaan common.php:n lopussa $ads muuttujaan (array). Jos tuon kyseisen muuttujan tulostaa ruudulle common.php:n lopussa (print_r($ads)) niin siinä näkyy sellaiset tiedot kuin pitääkin.

Minulla on overall_header.html:ssä seuraavat rivit:

Koodi: Valitse kaikki

<!-- PHP -->
echo $ads[header];
echo 'Moikka';
<!-- ENDPHP -->
Näytölle tulostuu haluttuun kohtaan kuitenkin ainoastaan "Moikka". Mistäköhän moinen johtuu ja miten asia korjataan?
Viimeksi muokannut elmo, 09 Tammi 2009, 22:08. Yhteensä muokattu 1 kertaa.

elmo
Aloittelija
Aloittelija
Viestit:7
Liittynyt:09 Tammi 2009, 19:05

Re: Monimutkaisen PHP koodin lisääminen jokaiselle sivulle

Viesti Kirjoittaja elmo » 09 Tammi 2009, 22:07

Jälleen itse itselleni vastaten:

En tiedä miksi muuttujaa ei voi tulostaa suoraan (luultavasti tietoturvasyistä), mutta käyttämällä templatekomentoja, se onnistuu.

Kannattaa lisätä tulostukseen tarvittavat muuttujat templateen (olio luodaan common.php:ssa nimellä $template). Muuttujia lisätään assign_vars(array) operaatiolla (tai yhtä muuttujaa lisättäessä assign_var(name, value)).

Tässä on kuitenkin yksi pieni "koukku", sillä muuttujia voidaan kutsua templatetiedostossa ainoastaan silloin, jos se on lisätty ko. templaten "koodisivulla". Jos muuttujaa halutaan kuitenkin käyttää jokaisella sivulla, niin se pitää asettaa /includes/functions.php:n page_header() -operaatioon (tässä phpBB3 versiossa se alkaa riviltä 3524). Oikea paikka on siellä, missä muitakin muuttujia asetetaan (=assign_vars(array) rivillä 3640).

Koodi: Valitse kaikki

// The following assigns all _common_ variables that may be used at any point in a template.
$template->assign_vars(array(
'ADS_HEADER' => $ads[header],
'ADS_RIGHT' => $ads[right],
'SITENAME' => $config['sitename'],
…
Tämän jälkeen mihin tahansa templatetiedostoon voi laittaa kutsun ko. muuttujalle templaten nimellä (tässä tapauksessa esim. {ADS_HEADER}).

Nyt homma toimii. Case closed. Kiitos avusta! ;)

Avatar
Lurttinen
phpBB nub
phpBB nub
Viestit:4787
Liittynyt:13 Marras 2005, 18:41
Paikkakunta:Tampere
Viesti:

Re: Monimutkaisen PHP koodin lisääminen jokaiselle sivulle

Viesti Kirjoittaja Lurttinen » 10 Tammi 2009, 08:34

Hienoa, että osasimme auttaa. :)

elmo
Aloittelija
Aloittelija
Viestit:7
Liittynyt:09 Tammi 2009, 19:05

Re: Monimutkaisen PHP koodin lisääminen jokaiselle sivulle

Viesti Kirjoittaja elmo » 10 Tammi 2009, 12:56

Nyt tuli saman asian kanssa omituinen ongelma (jonka kiersin).

Vein asian hieman pidemmälle ja nyt tiedot haetaan ja parsitaan omien luokkieni avulla common.php:ssa, pystyn siten käyttämään samoja templateja keskustelualueella ja muulla sivustolla. Valmiiksi parsitut tiedot välitetään vielä phpBB:lle parsittavaksi {SITE_HEADER} ja {SITE_FOOTER} template-kutsujen tulostettaviksi (voin ottaa tämän jälkeen asetuksista PHP:n suorituksen ja templaten uudelleenluontiasetukset pois päältä).

Homma toimii moitteetta, mutta jostain syystä käyttämäni muuttujat "katoavat" ennen kuin saan asetettua ne /includes/functions.php:ssa. $ads muuttuja toimii, mutta esim. $kvi (array) eikä $kvi_site (array) ei toimi. Myöskään "tavalliset" $site_header ja $site_footer muuttujat eivät toimi. Melko omituista :shock: Jos siis tulostan tiedot common.php:n lopussa, niin muuttujat sisältävät juuri oikean datan. functions.php:ssa muuttuja on kuitenkin tyhjä.

Välitin tiedot lopulta $ads[site_header] ja $ads[site_footer] muuttujan / alkioiden avulla (joka siis toimi alunperin pelkillä mainoksilla kokeiltuna). Tämä toimii, on vaan vähän hassua, että osa muuttujanimistä toimii ja osa ei. Mitään muuttujanimiä ei ole käytössä mistään phpBB:n tiedostossa, tarkistin asian koko projektin kattavalla haulla.

...homma kuitenkin toimii.

Viestiketju Lukittu

Paikallaolijat

Käyttäjiä lukemassa tätä aluetta: Ei rekisteröityneitä käyttäjiä ja 357 vierailijaa