Sziasztok,
Létrehoztam egy új tartalomtípust, amely tartalmazza a bannert is.
Blokkban szeretnék véletlenszerűen megjeleníteni mindig egy képet, és mérni azt, hogy ez a banner hányszor jelent meg.
Drupal 7-t használok, azt már megoldottam, hogy véletlenszerűen jelenjenek meg a bannerek, viszont a "méréssel" akadt egy kis gondom. Egy oldallehíváskor 5x fut le az sql-kód. Forráskódból hoztam létre a blokkot, nem tudom, hogy ez bekavarhat-e.
Először ezzel próbálkoztam:
banner lekérdezése:
db_query("SELECT nid FROM {node} WHERE type='microbanners' ORDER BY RAND() LIMIT 1")->fetchAll();
Megjelenés növelése (külön táblában):
db_query("INSERT INTO {banners} (nid, bshow, bclick) VALUES('".$node->nid."', '1', '1') ON DUPLICATE KEY UPDATE bshow=bshow+1");
Természetesen ezt kipróbáltam két különálló sql-le is, attól függően, hogy a node id szerepelt-e már vagy sem egy INSERT-el és UPDATE-el. Ugyanúgy többször kerültek be az értékek.
Érdekes módon, hiába csak egy bannert kérdezek le előtte, mégis az összes olyan node bekerül ebbe a táblába, amely microbanner típusú.
Gondoltam, velem van a baj, közvetlenül a blokk megjelenítéséhez betettem még ezt a kódot:
db_query("INSERT INTO banners_show SET nid='231', visit_time=NOW()");
Érdekes módon ez is 5x fut le egy oldalletöltéskor. Ezután gondolkodtam el, hogy elképzelhető: a templatek összeállításakor és kigenerálásakor ötször hívja meg azt a függvényt, amiben ez a kód van.
Milyen alternatívák vannak még arra, hogy mérőkódot helyezzek el?
Blokk-kezelő függvényem:
function mymodule_block_view($delta = '') {
$block = array();
$block['subject'] = '';
switch($delta) {
case 'microbanner' :
$block['content'] = mymodule_microbanner();
break;
}
}
Köszönöm,
Krisztián