Joomla - dymanická výmena rekamných banerov (php,javascript)

Do you want to share your Knowledge Base, code strips or ask something about open source CMS Joomla and it's i-shop extension VirtueMart? All of you are welcome.

Joomla - dymanická výmena rekamných banerov (php,javascript)

Poslaťod Palo-admin » 04.06.2010, 16:29

Riešil som pre klienta špecifickú požiadavku.

Vytvoriť funkčnosť, pomocou ktorej by bolo možné na ľubovoľné miesto stránky (článok, modul, záhlavie ...)
vkladať reklamné banery (resp. ľubovoľný HTML kód) načítané z databázy, ktoré by sa v pravidelných intervaloch obmieňali.

Samotné riešenie nie je zložité, bolo však treba skombinovať zopár funkčností.

1) spúšťanie kódu v moduloch:
P: Vo verzii Joomly 1.5 nie je možné spúšťať výkonný kód (napr. pluginy) v časti modulov mod_custom

R: Riešení je viacero, jedným z nich je plugin SOURCERER (Sourcerer-v2.4.3.zip), ktorý to umožňuje.
podrobnejšie tu: http://www.nonumber.nl/extensions/sourcerer

syntax:
Kód: Vybrať všetko
{source}  php kód {/source}


2) meniť časť obsahu stránky bez refrešu celej stránky:
P: Údaje z databázy možno "potiahnuť" spustením php kódu, čo však vyžaduje refreš celej stránky

R: Na riešenie na naviedla jedna informácia "Replace Div Content On The Fly With New Content"
kde bol publikovaný javascript a v rámci neho funkcia, ktorá umožňuje dynamicky meniť obsah ľubovoľného DIV tágu.
(DIV musí mať svoj unique ID)

Kód: Vybrať všetko
<script type="text/javascript"><!--
function ReplaceContentInContainer(id,content) {
var container = document.getElementById(id);
container.innerHTML = content;
}
//--></script>


2) potiahnuť údaje z MySQL databázy:
P: Potiahnuť z DB množinu preddefinovaného HTML kódu a vložiť ju ako jednotlivé polia pre javascript pole (array).

R: Bola vytvorená tabuľka s reklamami - tbl_ppa_content, s poľami
- full_text - samotný obsah / html
- force_show - (0 / 1), true/false príznak, ktorý definuje či načítať kód do javascriptu

Kód: Vybrať všetko
<?php
   $db =& JFactory::getDBO();
   $query = "
     SELECT COUNT(*)
      FROM ".$db->nameQuote('#__ppa_content')."
      WHERE ".$db->nameQuote('force_show')." = 1".";
     ";
   $db->setQuery($query);
   $count = $db->loadResult();
   $query = "SELECT `title`,`full_text` FROM `tbl_ppa_content` WHERE `force_show` = 1";
   
   $db->setQuery($query);
   $row = $db->loadRowList();

   $arrtxt = "";
   print('var reklpole= ["0"];');
    for ( $i = 0; $i < $count; $i++ ) {
     print('reklpole[' . $i . '] = ' . "'" . $row[$i]['1'] . "'" .';');
     }
   ?>


3) Kompletný výkonný skript
Ako to funguje: Načíta zvolené reklamy z DB, v zvolenom intervale ich vkladá na určené miesto (identifikované cez DIV ID - <div id="ppareklama">).
!!! Ak použijete script viac krát, zmente v scripte ID !!!

- kombinácia script / sourcerer / php

- čo bude zobrazené je definované v podmienke: WHERE `force_show` = 1"
- možno upraviť ľubovoľne, napr. pridaním nových stĺpcov Kampan1, Kampan2 ....

- časový interval (5 sek): var timerID = setInterval("CountdownTimer()",5000);
- kód zobrazuje random (náhodnú) položku v 30-tich cykloch (po 5 sek), potom zobrazí prvú
- logiku timeru možno ľubovoľne zmeniť

TIP
: Priložený script je lepšie vkladať priamo cez DB (napr. do tbl_modules), aby cez admin rozhranie Joomly nebol kód "očesaný" :)

Celý kód je v prílohe.

P.
Prílohy
php_script_code.zip
(839 Bajtov) 641 krát
Palo-admin
Administrátor stránky
 
Príspevky: 473
Registrovaný: 18.07.2008, 16:43
Udelené poďakovania: 6 krát
Prijaté poďakovania: 63 krát

Späť na Joomla + VirtueMart "affairs"

Kto je on-line

Užívatelia prezerajúci fórum: Žiadny registrovaný užívateľ nie je prítomný a 1 hosť

cron