Turinio valdymo sistema

Prisijungimas partneriams
Jūsų slaptažodis

Dirbame su:










Modulių kūrimas

Įvadas

Šis dokumentas aprašo TVS iPyramid 1.5 bei 2.0 versijos galimybes, kuriant papildomus 2-o lygio modulius. Naudodamiesi juo, Jūs galėsite panaudoti savo PHP žinias, kurdami našesnius ir patogesnius sprendimus savo klientams. Kad galėtumėt pasinaudoti šiomis instrukcijomis, Jūs turėtumėte būti įvaldęs PHP kalbą, nes visi moduliai rašomi šia kalba. Jeigu Jūsų modulis naudos duomenų bazės informaciją, Jums greičiausiai teks žinoti ir tos duomenų bazės palaikomą SQL kalbos dialektą.

Kas yra 2-o lygio modulis?

Trumpas atsakymas: Tai yra TVS puslapio tipas. Kiekvienas puslapis, papildomas elementas arba praplėtimas iPyramid sistemoje turi tipą, (pvz tekstas, paveiksliukas, galerija, prekių krepšelis, komentarai, paieška, kliento prisijungimo blokas ir pan.). Tai reiškia, kad kiekvienas puslapis yra kažkokio modulio egzempliorius. Kurdami savo modulį, Jūs galite tinklapyje turėti specifinį duomenų išvedimą. Taip Jūs galite sukurti modulį, kuris pvz., atvaizduos duomenis paimtus iš Oracle, Navision, arba atvaizduoti orų prognozes, arba pateikti prijungtam klientui mėnesio ataskaitą už pvz., ryšio paslaugas, ar sukurti specifinę galeriją tik su tam tikram klientui skirtais konfiguruojamais parametrais.

Kaip prijungti tuščią modulį?

Priklausomai nuo įsigytos licencijos konkrečiam projektui, Jūs galite sukurti tam tikrą kiekį papildomų modulių. Projekto pagrindinėje direktorijoje subdirektorijose: user/modules/tree/ Jūs galite sukurti direktorijas user1, user2, user(X). Kiekviena direktorija skirta atskiram moduliui.
  1. Sukurkite direktoriją user(X), jeigu tokios dar nėra. (Turėkite omeny, kad X neturi viršyti Jūsų turimų laisvų modulių skaičių licencijoje)
  2. Direktorijoje sukurkite failus _init.php, _admin.php, _unilang.txt. Apie failų turinį skaitykite skyrelyje "Iš ko susideda modulis".
  3. Persijunkite į sistemą ir pabandykite sukurti Jūsų sukurto tipo puslapį (papildomą elementą ar pan.) sistemoje. Jeigu Jūs matote savo modulį tipų sąraše, reiškia Jums pasisekė sukurti tuščią modulį.

Iš ko susideda modulis?

Kintamieji pasiekiami administravimo srityje:

  • $action - šis parametras perduodamas GET arba POST metodu. Visus veiksmus (išsaugojimo, duomenų pakeitimo ar trinimo) siūlytumėm perduoti šiuo parametru.
    Standartinį duomenų išsaugojimą siūlome vykdyti parametru ?action=edit.
  • $_item - redaguojamo puslapio STEP duomenys
  • $_item_id - redaguojamo puslapio id arba puslapio id, kuriam priklauso redaguojamas papildomas elementas
  • $_interface_lang - vartotojo sąsajos kalba.
  • $_element_values - redaguojamo puslapio įvestos turinio reikšmės.
  • $admin_data - puslapį redaguojančio administratoriaus informacija.
    • $admin_data["user_id"] - redaguojančio administratoriaus id.
  • $_SELF - puslapio URL, kuriame vyksta administravimas
  • $page - sistemos puslapis, kuriame vyksta administravimas (siunčiant duomenis į tą patį puslapį, naudokitės tokiu URL: $_SELF . "?page=" . $page )
  • $_perms - bazinės puslapio teisės administratoriui.
    • $_perms["read"] - gali peržiūrėti
    • $_perms["write"] - gali rašyti
    • $_perms["grant"] - gali perduoti teises kitam
  • $_can - detalių teisių masyvas asmeniui, kuris atsivertė nurodytą administravimo puslapį
    • $_can["view"] - gali peržiūrėti
    • $_can["edit"] - gali redaguoti turinį
    • $_can["create"] - gali kurti elementus arba vidinius puslapius
    • $_can["create_new"] - gali kurti vidinius puslapius
    • $_can["delete_this"] - gali ištrinti šį puslapį
    • $_can["delete_childs"] - gali trinti vidinius puslapius
    • $_can["activate_items"] - gali aktyvuoti vidinius puslapius arba elementus
  • $_dependent_items - masyvas elementų, priklausancių šiam sudėtiniam puslapiui (tik faile _dependents.inc.php)
  • $_dependent_modules - masyvas modulių, kuriuos palaiko šis sudėtinis puslapis (tik faile _dependents.inc.php)

Objektai:

  • $ipyr - iPyr_Core objektas
  • Common - statiškai pasiekiamas bendrinių funkcijų rinkinys

Funkcijos:

  • loadErrors($file) - įkrauna klaidų tekstų failą (rekomenduojame naudoti loadErrorsTxt() funkciją)
  • loadLang($file) - įkrauna kalbos failą (rekomenduojame naudoti loadLangTxt() funkciją)
  • loadErrorsTxt($file) - įkrauna klaidų tekstų optimizuotą failą
  • loadLangTxt($file) - įkrauna kalbos optimizuotą failą
  • txt($label1, $label2 = null) - grąžina įkrautą kalbinę reikšmę pagal sąsajos kalbą.
    • $label1 - raktas
    • $label2 - antrinis raktas. Pvz: txt("months", 5); // Grąžins Gegužės mėnesio pavadinimą sąsajos kalba
  • error($label, $label2 = null) - grąžins klaidos kodą sąsajos kalba
Kiekvienas 2-o lygio modulis susideda iš trijų būtinų failų: _init.php, _print.php, _admin.php ir kelių nebūtinų, tokiu kaip _class.php, _unilang.txt, _derived.php, _dependents.inc.php, kurių paskirtis aprašyta žemiau.
Viduje _print.php, _init.php, _class.php, _derived.php, _dependents.inc.php failų Jūs turite konstantas:
  • NOT_INCLUDED - parodo, kad failas nėra itraukiamas (include) į sistemą. Jo reikšmė visuomet yra lygi FALSE. Failo pradžioje įrašę eilutę: if(NOT_INCLUDED) return FALSE;
    išvengsite galimo tiesioginio failo iškvietimo iš išorės, kas padidins sistemos saugumą.
  • IPYR_ADMIN_MODE - true ¦ false. Parodo, ar failas veikia administravimo rėžime ar peržiūros. Priklausomai nuo to, pavyzdziui, administravimo rėžime, Jūs galite užkrauti modulio kalbų failą. Ne administravimo rėžime to daryti nebūtina, kadangi kalbiniai tekstai nėra atvaizduojami.

_init.php

Tai inicializacinis ir pagrindinis modulio failas. Šio failo paskirtis - pranešti sistemai apie modulio egizstavimą. Jame aprašomas pats modulis ir jo parametai. Modulis turi papildyti $modules["jusu_mod_pav"] masyvą.
Žemiau pateikiame šio masyvo galimus ir būtinus parametrus:
Parametras
Būtinas
Tipas
Aprašymas
name
*
Tekstas
Modulio vartotojiškas pavadinimas
parentModule

Tekstas
Kuriam I-o lygio moduliui priklauso šis modulis, jei nenurodyta priklauso "Turinio valdymo" moduliui (tree).
use_templates

false ¦ šablonų pavadinimų masyvas (leidžiami simboliai[a-zA-Z0-9])
Nustato šablonų pavadinimus, kuriuos naudos modulis; šie šablonai bus pasiekiami per "Dizaino" modulį.
group

*
gen ¦ spec ¦ ext ¦ dep
Modulio tipas: gen - paprastas modulis, spec - papildomas elementas, ext - praplėtimas, dep - elementas. Nurodo kokio tipo yra kuriamas elementas
cache

1 ¦ 0
1- sistema kešuoja moduli, 0 - nekešuoja. Jeigu Jūsų modulio išvedimas bus visada vienodas, kol klientas jo nepakeis, Jūs galite leisti sistemai jį užkešuoti, tam kad puslapis krautusi greičiau. Jeigu turinys keiciasi nepriklausomai nuo vartotojo (Pvz forma arba naujienų sąrašas, kuriame naujienos, atėjus kažkokiam momentui, pradingsta), tai nustatykite cache = 0
built_in_childs

Modulių pavadinimų masyvas
Jeigu modulis turi kitus priklausomus modulius (elementus), šiame masyve reikia nurodyti jų pavadinimus.
max_copy

Skaičius
Maksimalus puslapio egzempliorių kiekis atskiroje kalboje. Tinka tais atvejais, kai kuriamas specifinis modulis, nes po max_copy nurodytų kartų sukūrimų medyje jis pradingsta iš galimų tipų sąrašo, tuo sumažindamas galimybę vartotojui suklysti.
icon

Tekstas
Nurodo ikonėlės URL, kuri atvaizduojama medyje šalia šio tipo puslapio pavadinimo.
inline

1 ¦ 0
Nustato ar modulis turi savo turinį (0). Ar paspaudimas ant jo iškviečia kokį veiksmą (1). Tinka kuriant nuorodas į kitus tinklapius arba specifinius meniu punktus. Tokiais elementais sistemoje yra pvz. "Nuoroda" ir "Puslapiu grupe".
additionalAllowed
1 ¦ 0
Tik inline=1 atveju. Nustato ar inline modulis leidžia redaguoti papildomus elementus. Pagal nutylėjimą lygus 0 (negali).
childsAllowed

1 ¦ 0
Tik inline=1 atveju. Nustato ar inline modulis gali turėti vidinius puslapius. Pagal nutylėjimą lygus 0 (negali).


Kintamieji pasiekiami šiame faile:
  • $lang_id - administravimo rėžime nustato einamąją sąsajos kalbą. Pvz. en, lt, ru, de ir t.t.
  • $_module_name - šio modulio sisteminis pavadinimas paruoštas sistemos.
  • $dir - dabartinė modulio direktorija. Leidžia sutaupyti procesoriaus laiką jos paieškai.
Žemiau pateikiame _init.php failo pavyzdį, paprasto modulio, pavadinimu MyModule, inicializacijai:
     <?php
if(NOT_INCLUDED) return false;
     if(IPYR_ADMIN_MODE and $lang_id){
loadLang( $dir . "/_lang/" . $lang_id . ".php" );
}
     $modules[$_module_name] = array(
"use_templates" => array("main", "part"),
"name" => "MyModule",
"group" => "gen",
"cache" => 1,
);
?>

_admin.php

Failas skirtas modulio administravimo srities pateikimui administratoriui. Paprasto modulio atveju tai skyrelis "Redaguoti", papildomo elemento atveju tai sekantis pagalbininko žingsnis. Dažniausiai failas susideda iš 2-jų dalių: atvaizdavimo ir apdorojimo. Apdorojimo dalis rašoma failo viršuje, tam kad galėtų apdoroti visus veiksmus prieš atvaizduojant rezultatą, taip pat atlikti duomenų išsaugojimo veiksmus. Atvaizdavimo dalis rašoma apačioje.
Paprasto _admin.php failo pavyzdys:
         <?php
// _admin.php failo pavyzdys
if(NOT_INCLUDED) return false;
         // Veiksmu apdorojimas
switch($action){
case "edit": // Standartinis puslapio redagavimo veiksmas
// Apdorojame HTML redaktoriaus siunčiamą tekstą (būtinas
// kiekvienam redaktoriaus siunčiamam kintamajam)
$text = iPyr_Html::parseHtml($_POST["content_area"]);

// Parametrų išsaugojimas Unidb duomenų bazėje
$ipyr -> unidb -> putVal($_item_id, "content", $text, "text");
$ipyr -> unidb -> putVal($_item_id, "intro", $_POST["intro"], "varchar255");

// Atnaujiname $_element_values duomenų masyvą, nes ką tik buvo pakeistas.
$_element_values = $ipyr -> unidb -> getVal($_item_id);
break;
}
?>
<form method="post" action="<?php echo $_SELF . "?page=" . $page ?>" id="ipyrAdminForm">
<input type="hidden" name="action" value="edit" />
<table width="100%" border="0" cellpadding="1" cellspacing="1">

<tr>
<td><?php echo txt("Title"); ?></td>
<td><input type=text name=intro value="<?php echo htmlspecialchars($_element_values["intro"]); ?>" class="formText"></td>
</tr>
<tr>
<td height="330" colspan="2"><?php iPyr_Html::printHTMLedit("content_area", $_element_values["content"], $_item_id); ?></td>
</tr>
<tr>
<td colspan="2" height="1">
<input type="submit" class="formButton" value="<?php echo txt("Save"); ?>">
<input type="reset" class="formButton" value="<?php echo txt("Reset"); ?>">
</td>
</tr>
</table>
</form>

_print.php

Kintamieji pasiekiami _print.php faile:

  • $action - šis parametras perduodamas GET arba POST metodu. Visus veiksmus (išsaugojimo, duomenų pakeitimo ar trinimo) siūlytumėm perduoti šiuo parametru.
    Standartinį duomenų išsaugojimą siūlome vykdyti parametru ?action=edit.
  • $_item - redaguojamo puslapio STEP duomenys
  • $_item_id - redaguojamo puslapio id arba puslapio id, kuriam priklauso redaguojamas papildomas elementas
  • $_element_values - redaguojamo puslapio įvestos turinio reikšmės.
  • $_SELF - puslapio URL, kuriame vyksta administravimas
  • $_template_path - kelias iki modulio direktorijos šablonų. Jeigu vartotojas pasirenka ne "default", tai irgi atsispindi šio kintamojo reikšmėje.

Objektai:

  • $ipyr - iPyr_Core objektas
  • Common - statiškai pasiekiamas bendrinių funkcijų rinkinys
Failas skirtas modulio išvedimui ir ateinancių duomenų apdorojimui. Tai, ką vartotojas matys modulio išvedimui skirtoje vietoje, turi buti rašoma čia. Modulis privalo grąžinti (return) išvedamą tekstą. Šiame faile galima naudoti modulio šablonus. Tuo atveju, kai nerandamas šablonas, modulis turi grąžinti tekstą arba klaidos kodą "-1028".
Paprasto _print.php failo pavyzdys:
     <?php
// _print.php failo pavyzdys
if(NOT_INCLUDED) return false;
     // Perduodame visas  turinio reikšmes į Smarty
foreach($_element_values as $key => $val){
$ipyr -> template -> assign($key, $val);
}


// Patikriname ar toks šablonas egzistuoja ar nepamiršo
// jo sukurti pajunginėtojas. Jeigu šablonas yra, apdorojame (parse) jį ir grąžiname
// viską ką gavome sistemai.
if($ipyr -> template -> exists( $template_path . "/main" )){
return $ipyr -> template -> fetch( $template_path . "/main" );
}else{
// Jeigu šablono nėra, grąžiname klaidos kodą
return -1028;
}
?>

_class.php

Jeigu norite sukurti modulio klasę, ją turite talpinti čia. Klasė turi vadintis iPyr_Tree_{modulio_pavadinimas}, pvz. iPyr_Tree_mymodule1. Tvarkingam klasės veikimui rekomenduojamas toks konstruktorius (pvz. modulyje news1):
     // Constructor
function iPyr_Tree_news1 (&$parent, $name){
$this -> modules = array();
$this -> parent =& $parent;
$this -> _top =& $parent -> _top;
$this -> name = $name;
}
Tokiu atveju Jūs galesite pasiekti branduolį (iPyr_Core) per $this->_top, o Turinio valdymo objektą per $this->parent, arba $this->_top->m["tree"]. Faile _print.php išvedimo metu pasiekti klasę galite iškvietę $this->{modulio_pavadinimas}(pvz. $this->mymodule1).

_unilang.txt

Plačiau apie šio failo turini skaitykite skyrelyje "Kalbų failai"

_derived.php

Šitame faile kuriamas modulio-praplėtimo administravimo organizavimas. Čia sukurtas valdymas bus vaizduojamas Turinio srityje, atitinkančiame modulio pavadinimą skyrelyje, prie kiekvieno puslapio, kurį praplečia šitas modulis. Šio modulio struktūra ir veikimas yra analogiškas _admin.php failui. Jeigu naudosite action veiksmą praplėtimo duomenų išsaugojimui, siūlome naudoti "editDerived" reiskšmę, pvz. (&action=editDerived), tam kad nesusikirstų _admin.php failo ir _derived.php atliekami veiksmai. Žemiau pateikiamas praplėtimo "Komentarai" pavyzdys.

_dependents.inc.php

Kai kurie moduliai (tokie kaip Naujienos, Galerija, Vitrina) yra sudėtiniai, t.y. susideda atitinkamai iš elementų pvz. Naujienų, Paveiksliukų, Prekių. Kadangi šių elementų gali būti daug ir jie nėra tinklapio struktūros dalis, o yra turinio dalis, tai jie nematomi tinklapio medyje ir jų negalima sukurti taip, kaip naują puslapį. Norint sukurti Naujieną Naujienų puslapyje, prie sudedamojo modulio redagavimo atsiranda 2 nauji skyreliai, "Elementų sąrašas" ir "Sukurti naują elementą". Šie skyreliai yra valdomi ir kuriami kiekvienam sudėtiniam moduliui atskirai, siekiant pratęsti sisemos lankstumą ir galimybes turėti skirtingą elementų administravimą skirtingiems sudėtiniams moduliams. Pvz naujienų sąraše mes matome naujienų pavadinimus ir naujienų publikavimo datas, galerijoje mes matome tik sumažintus paveiksliukus trim stulpeliais ir jų parametrus.

Kaip sukurti nurodyto tipo puslapį?

Jeigu tai paprasto tipo puslapis (pvz. tekstas, naujienos), paspauskite "Sukurti nauja puslapį" ir pasirinkite puslapiu tipų sąraše Jūsų norimą tipą.
Jeigu tai papildomas elementas (pvz. paveiksliukas), pasirinkite papildomą elementą, paspauskite Redagavimo mygtuką ir sąraše pasirinkite norimą tipą.
Jeigu tai praplėtimas (pvz. komentarai prie teksto arba naujienos), pasirinkite modulį, kurį praplečia Jūsų ieškomo tipo modulis, ir šalia redagavimo ir peržiūros skyrelių atrasite ieškomą praplėtimą.
Jeigu tai elementas (pvz. Atskira naujiena, galerijos paveiksliukas), pasirinkite tėvinį puslapį (pvz. atitinkamai Naujienas arba Galeriją ) ir prie skyrelio "Redaguoti" ir "Peržiūrėti" rasite skyrelį "Sukurti elementą". Elementų sąrašą rasite ten pat skyrelyje "Elementų redagavimas"

Šablonų palaikymas

Modulio išvedimą galima išskaldyti į kelias dalis. Dažniausiai tai daroma del patogumo. Pavyzdžiui, užklausimo formos siuntimo modulis gali turėti 3 šablonus: formos šabloną, el. laiško su užpildytais formos rezultatais ir padėkos šabloną, kuris pasirodo tuo atveju, kai forma sėkmingai išsiųsta. Šablonus, kuriuos modulis turi palaikyti, reikia įrašyti į _init.php failo $modules[$mod_name] masyvo parametrą "use_templates". Šis parametras yra šablonų pavadinimų masyvas. Modulių pavadinimai turi susideti tik iš lotyniškų raidžių, skaičių ir pabraukimų. pvz formai šis parametras gali buti lygus array("main", "email", "success");. Su tokiu parametru dizaino valdyme prie nurodyto modulio atsiranda 3 šablonai "main", "email", "success". Tam, kad galėtumėt panaudoti tam tikrą šabloną išvedimui, reikia naudoti $ipyr->template->exists() ir $ipyr->template->fetch() funkcijas. Šių funkcijų vienintelis parametras yra kelias iki šablono, kurio formatas turi būti toks "'_modules/tree/{modulio_pavadinimas}/{šablono_variantas}/{šablono_pavadinimas}", kur {modulio_pavadinimas} yra sisteminis modulio pavadinimas (pvz. form1), {šablono_variantas} - šablono variantas, jeigu modulis jį palaiko, pagal nutylėjimą turi būti "default", o {šablono_pavadinimas} - yra būtent tas pavadinimas vienos iš nurodyto _init.php faile parametro reikšmių.

Kešuoti ar nekešuoti?

Kai kurie moduliai vykdo tik statinio išvedimo funkciją, t.y. išvedimas keičiasi tik nuo administratoriaus tiesioginio modulio duomenų pakeitimo. Tam kad pagreitinti sistemos veikimą ir sumažinti serverio apkrovą, Jūs galite leisti kešuoti modulio išvedimą. Nurodykite _init.php faile $modules[$mod_name] masyvo parametrą "cache" lygų 1.

Nepamirškite, kad jeigu modulio išvedimas priklauso nuo išorinių veiksnių - jo leisti kešuoti negalima.

Kaip sukurti papildomo elemento moduli?

Papildomas elementas yra modulio egzempliorius, įterptas į tam tikrą puslapio vietą. Jis sukuriamas analogiškai paprastam moduliui, išskyrus kelis skirtumus.
_init.php
"group" parametras turi turėti reikšmę "spec".
_admin.php
Papildomas elementas, kuris dar nėra išsaugotas, neturi savo item_id. Jis atsiranda tik išsaugojimo metu.
"Submit" ir "Reset" mygtukų kurti nereikia. Sistema pati sukurs mygtuką "Užbaigti".
Forma privalo turėti id="ipyrAdminForm".
Tekstinis WYSYWYG redaktorius nėra inicializuojamas pagal nutylėjimą. Todėl norėdami naudoti redaktorių, failo pradžioje įdėkite:
     include_once $_cfg["system_dir"] . "/components/html_editor/dhtml.php";         

Kaip sukurti praplėtimą (extension)?

Praplėtimo modulis praplečia paprastojo modulio galimybes. Tarkime prie leidžia teksto moduliui arba naujienai turėti komentarus, galerijos paveiksliukui - reitingus; šiuo atveju reitingas ir komentaras yra Praplėtimo moduliai. Šis modulis naudoja praplečiamo modulio item_id, nes savojo neturi. Dėl to, saugojant reikšmes į UniDB duomenų bazę, stenkitės sugalvoti tokius reikšmių pavadinimus, kad jie nesusidubliuotų su paplečiamuoju. Taip pat nepamirškite, kad prie vieno modulio galima prideti kelis skirtungus praplėtimus.
Skirtumai lyginant su paprastu moduliu:

_init.php

"group" parametras turi turėti reikšmę "ext".
Turite užregistuoti kokius modulius praplečia šis. Tam, kad tai padarytumėt, įdėkite _init.php faile eilutę(-es).
     $derives["prapleciamo_modulio_pavadinimas"][$_module_name] = array("name" => txt("JusuModulioPavadinimas"));         
Taip galite praplėsti tiek modulių, kiek norite.

_derives.php

Failas skirtas praplėtimo valdymui atvaizduoti. Šiame faile $_item_id nurodo ne nuosavą id, bet praplečiamojo modulio id.

Kaip sukurti sudėtinio puslapio elementą?

Norimo modulio _init.php faile nustatykite parametrą $modules[$mod_name]["group"] = "dep". Tėvinio modulio (tame prie kurio bus pridedamas šis) _init.php faile nustatykite $modules[$mod_name]["built_in_childs"] = array("{vidinio_modulio_pavadinimas}") arba jeigu "built_in_childs" parametras jau aprašo palaikomus modulius, tiesiog papildykite šitą masyvą. Po šios procedūros administravimo srityje, redaguojant tėvinį modulį, "Turinio" skiltyje turi atsirasti skyrelis "Sukurti naują elementą", kuriame vienas iš pasirenkamų tipų turi būti Jūsų nurodytas modulis. Apie skyrelį "Elementų redagavimas" plačiau galite perskaityti punkte _dependents.inc.php
Tėvinio modulio klasėje turite sukurti metodą fetchList($id, $fetch_all). Šis metodas turi grąžinti masyvą su STEP elementais ir papildomais duomenimis tų puslapių, kurie priklauso nurodytam tėvinio puslapio $id. Sistema paduoda $fetch_all parametrą kaip true, tam kad metodas grąžintų visus elementus, tame tarpe ir neaktyvius. Tikrajame išvedime galite paduoti FALSE, tam kad metodas grąžintų tik aktyvius elementus.

Sistemos objektai

Modulių karkasai (šablonai)

Standartinis modulis (user1) Parsisiųsti
Papildomas elementas (user2) Parsisiųsti
Pavyzdys standartinio modulio (text3, "Tekstas su paveiksliuku") Parsisiųsti
Pavyzdys papildomo elemento modulio (infoblock1, "Informacijos blokas") Parsisiųsti