NaslovnicaDownloadPomoć
  croJoomla
Ovaj forum je zaključan.
Registracija je isključena. Isključena je mogućnost pisanja novih postova ili uređivanja starih, čitanje je i dalje moguće.
Forum će u ovakvom obliku ostati dostupan dok statistika ne pokaže je prestao biti koristan.
Forum Pomoć Pravila croJoomla Foruma Prijava Registracija
 
Napredno pretraživanje
  
croJoomla Forum » Joomla 1.5 » Dodaci (Extensions) » Pluginovi » Tema: Pomoć pri izradi joomla plugina
 Str: [1] Dolje
Autor      Tema: Pomoć pri izradi joomla plugina  (Posjeta: 5903 )
****
Postova: 321


» datum: 03-08-2010, 10:21:16

Želio bih si napraviti plugin kartanaselja.

Imam kartu sa naseljima. U Fireworksu sam napravio karte za svako naselje tako da je odabrano naselje istaknuto. Kreirao sam Hotspot sa linkom koji vodi na tekst o odabranom naselju.

Sve sam to exportao u html.

Sad bi želio naraviti plugin u kojega bi iskipao taj html, kako bi plugin mogao aktivirati u svakom članku o pojedinom naselju. Jednini parametar koji mi treba je karta pojedinog naselja.

Znači želio bih da mi radi ovako:

{kartanaselja}karte/cvetkovic.jpg{/kartanaselja}

Gledao sam malo wizarde za kreiranje pluginova ali mi nije sasvim jasno kako u php ubaciti html i kako natjerati da traži parametar!

Pozz!

*
Postova: 7

» Odgovor #1 datum: 03-08-2010, 14:46:39

Pozdrav!

Plugin se radi ovako:

<?php
// tekst (u plaginu se koristi '$row->text'
$text =<<<EOTEXT
As with previous releases, Joomla! provides a unified and easy-to-use framework for delivering content for Web sites of all kinds.<br /><br />
{kartanaselja}karte/cvetkovic.jpg{/kartanaselja}
<br /><br />To support the changing nature of the Internet and emerging Web technologies, Joomla! required substantial restructuring of its core functionality and we also used this effort to simplify many challenges within the current user interface.<br /><br /><br />
Joomla! 1.5 has many new features.
EOTEXT;

// izraz
$regex = '#{kartanaselja(\s+[a-z]+\s*=\s*(?:"|&quot;)[^}]*(?:"|&quot;))*}([^{]+){/kartanaselja}#m';

preg_match_all ( $regex, $text, $match );

//kreiraj html
$html = '<img src="' . $match[2][0] . '" width="100" height="100" />';


// zamijeni
$text = preg_replace ( $regex, $html, $text );

// testiraj (ne treba u plaginu!)
echo $text;
?>



Nadam se da će pomoći.

Tihomir Tucaković
HIT media
*****
Postova: 2337


» Odgovor #2 datum: 03-08-2010, 17:29:57

Tihomir  ti je dobro pokazao koncept ali evo detaljnije kako napraviti plugin koji trebaš:

Plugin se sastoji od dvije datoteke: .xml sa informacijama i parametrima i .php sa kodom koji radi ono što nam treba.

xml datoteka izgleda ovako:

Kod:
<?xml version="1.0" encoding="utf-8"?>
<install version="1.5" type="plugin" group="content">
<name>Karta naselja</name>
<author>Brq</author>
<creationDate>2010</creationDate>
<copyright>Copyright (C) 2010 Brq. All rights reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license>
<authorEmail>brq@brq.hr</authorEmail>
<authorUrl>www.brq.hr</authorUrl>
<version>1.0</version>
<description>Prikazuje karte naselja</description>
<files>
<filename plugin="kartanaselja">kartanaselja.php</filename>
</files>
<params />
</install>

Mogu ti pokazati kako možeš dodati i parametre, ali sada idemo najjednostavnije što može. Spremi taj xml kao datoteku kartanaselja.xml

Sada kada je xml gotov idemo na php datoteku.

kod bi išao ovako:

Kod:
<?php
// no direct access
defined'_JEXEC' ) or die( 'Restricted access' );
$mainframe->registerEvent('onPrepareContent''plgContentKartaNaselja');

function 
plgContentKartaNaselja(&$row, &$params$page=0){
if (is_object($row)) {
$row->text=preg_replace('/{kartanaselja}(.*?){\/kartanaselja}/''<img src="$1" alt="Karta" />'$row->text);
}
}
spremi kao datoteku kartanaselja.php

Sada te dvije datoteke zazipaj kao .zip datoteku i instaliraj u Joomli. Nakon instalacije idi u upravljanje pluginovima i objavi.

To je to: još ti preostaje da testiraš sa {kartanaselja}karte/cvetkovic.jpg{/kartanaselja}
 i da nam javiš ako radi.

Edit: gospodin Tihomir je dobro primjetio da sam pogriješio napisavši kartenaselja umjesto kartanaselja u sintaksi plugina pa sam ispravio
» Zadnja izmjena: 03-08-2010, 22:09:07 Erik
Dragi moji forumaši, forum nastavlja svoj rad na forum.joomla-hrvatska.com
*
Postova: 7

» Odgovor #3 datum: 03-08-2010, 18:53:17

Obratio bih pažnju Eriku da ne radi njegov $regex
Kod:
'/{kartenaselja}(.*){\/kartenaselja}/'

Te predlažem fuziju kodova u "kartenaselja.php":


Kod:
<?php
// no direct access
defined '_JEXEC' ) or die ( 'Restricted access' );
$mainframe->registerEvent 'onPrepareContent''plgContentKarteNaselja' );

function 
plgContentKarteNaselja(&$row, &$params$page 0)
{
if(is_object $row ))
{
// izraz
$regex '#{kartanaselja(\s+[a-z]+\s*=\s*(?:"|&quot;)[^}]*(?:"|&quot;))*}([^{]+){/kartanaselja}#m';

//pronađi
preg_match_all $regex$row->text$match );

//kreiraj html
$html '<img src="' $match [2] [0] . '"  alt="Karta" width="100" height="100" />';

// zamijeni
$row->text preg_replace $regex$html$row->text );

}
}
?>

Praktičnije je stoga što se odmah dobije putanja do slike u $match [2]
  • [/b].
    A dobiva se i mogućnost za proširenje koda da se u tekst može staviti više različitih karata!
*
Postova: 7

» Odgovor #4 datum: 03-08-2010, 18:58:03

Sorry, zabrljao sam.


Praktičnije je stoga što se odmah dobije putanja do slike:
Kod:
$match [2][0]
A dobiva se i mogućnost za proširenje koda da se u tekst može staviti više različitih karata!
*****
Postova: 2337


» Odgovor #5 datum: 03-08-2010, 19:19:33

Obratio bih pažnju Eriku da ne radi njegov $regex
Kod:
'/{kartenaselja}(.*){\/kartenaselja}/'

Dakle, ovo ne radi:

Kod:
$regex='/{kartenaselja}(.*){\/kartenaselja}/';
$text='Lorem ipsum dolor sit amet, consectetur {kartenaselja}slika.jpg{/kartenaselja} adipiscing elit.';
echo preg_replace($regex, '<b>&lt;img src="$1" alt="Karta" /&gt;</b>', $text);

Koju grešku javi? Ili samo ništa ne nađe?

Tvoj regex je dobar komad koda, ali kako nećemo koristiti parametre tipa {kartenaselja aaa="bbb"} nije potrebna takva kompleksnost.

U mom malom primjeru moguće je staviti više različitih karata u isti članak i to radi ok. Jedino bih nadodao jedan upitnik u regex da bi se izbjegli potencijalni problemi:

Kod:
'/{kartenaselja}(.*?){\/kartenaselja}/'
Dragi moji forumaši, forum nastavlja svoj rad na forum.joomla-hrvatska.com
*
Postova: 7

» Odgovor #6 datum: 03-08-2010, 19:46:06

Ni ovo ne radi:

Kod:
'/{kartenaselja}(.*?){\/kartenaselja}/'

Citat:
Tvoj regex je dobar komad koda...

Ne vidim razlog zašto ne bi bio. Bolje je odmah napisati kod kojim možeš bolje kontrolirati uvjete.
Uostalom u programiranju do cilja ima više puteva, stvar je izbora programera koji će upotrijebiti.



Tihomir Tucaković
HIT media
*****
Postova: 2337


» Odgovor #7 datum: 03-08-2010, 20:14:40

Ni ovo ne radi:...

Ako ti kažeš druže, neka bude tako.
http://www.a-web.hr/tihomir/


Bolje je odmah napisati kod kojim možeš bolje kontrolirati uvjete. Uostalom u programiranju do cilja ima više puteva, stvar je izbora programera koji će upotrijebiti.

Istina, puno toga ovisi o samom programeru. Ja sam ipak za rad po KISS principu.
Dragi moji forumaši, forum nastavlja svoj rad na forum.joomla-hrvatska.com
*
Postova: 7

» Odgovor #8 datum: 03-08-2010, 21:52:07

Sad ću reći sorry!

Kopirao sam kodove:

brq je napisao:
Kod:
{kartanaselja}karte/cvetkovic.jpg{/kartanaselja}

A ti si napisao:
Kod:
{kartenaselja}karte/slika.jpg{/kartenaselja}

Razlika "kartanaselja" i "kartenaselja"! Jedan znak, ali puno znači! A testirao sam u Joomli gdje je bio napisan original "{kartanaselja}karte/cvetkovic.jpg{/kartanaselja}"!

Ti bi mogao ubuduće obratiti pažnju na detalje jer neupućenima radiš zbrku. Čovjek je tažio kod s točno određenim parametrima. Zamjenom znakova stvorio si zbrku! Dakle s tvojim regex-om nije radilo u odnosu na originalan parametar! Ako netko ne zna programirati i pošalješ mu takav programski kod, on njemu ne radi! I možeš tvrditi da radi koliko god hoćeš!

A i glupa ubadanja bi mogao ostaviti po strani. To rade klinci. Naravno, pod nadimkom!!!
Uostalom moje plugine i komponente možeš pronači na Joomlinim  stranicama, nadam se da su i tvoji tamo!!!

Tihomir Tucaković
HIT media
*****
Postova: 2337


» Odgovor #9 datum: 03-08-2010, 22:05:17

Bravo!
Vidiš da si našao grešku. Žao mi je da ovu semantičku grešku nismo uočili ranije, ali bitno da smo riješili neporazum oko "neradećeg koda".

Isprika sudionicima teme: pogrešno sam napisao kartenaselja umjesto kartanaselja. Odmah ispravljam i kod koji sam postao.
» Zadnja izmjena: 03-08-2010, 22:11:26 Erik
Dragi moji forumaši, forum nastavlja svoj rad na forum.joomla-hrvatska.com
*
Postova: 7

» Odgovor #10 datum: 03-08-2010, 22:23:53

Samo sam rekao  da  ti kod ne radi! Bar ne kao takav!

Razliku si trebao uočiti i sam, tako da do zbrke ne bi niti došlo.

Moj stav u programiranju je pratiti originalan kod. Sintaksu i funkcije koje sam upotrijebio pronači ćeš u svim jomlinim pluginima, tako da to svakako ne treba ispustiti iz vida prilikom programiranja.
Dalje, moj regex omogućava dodavanje niza elemenata koji pripadaju pojedinoj slici u sadržaj članka, recimo autor članka vrlo lako može napisati 'alt' za svaku sliku pojedinačno, u tvom kodu alt je isti za sve slike. Naravno, programski kod koji sve to radi puno je složeniji od ovdje napisanih.

Dalje, bit programiranja je da korisnik ne mora znati programirati već mora moći uporabiti isprogramirano. Bolje je tada pratiti sintaksu autora CMS, jer je kod tada čitljiviji (bar onima koji znaju programirati!) i lako nadogradivstandardnim elementima koje su autori CMS-a uporabili.

TihomirTucaković
HIT media
*****
Postova: 2337


» Odgovor #11 datum: 03-08-2010, 22:30:10

Potpisujem (načelno) što si napisao iako u skladu sa onim KISS principom ne vidim potrebe za kompleksnijim kodom nego što je potreban.
Naravno, čim brq (gdje li je on BTW Smiley ) pita za dodatne parametre ide onaj regex koji si postao.
Dragi moji forumaši, forum nastavlja svoj rad na forum.joomla-hrvatska.com
*
Postova: 7

» Odgovor #12 datum: 03-08-2010, 22:41:26

Citat:
... ne vidim potrebe za kompleksnijim kodom nego što je potreban.

Radi se o tome da prateći sintaksu autora Joomle ili bilo kojeg sustava, u slučaju bilo kakve promjene tvoj će programski kod ostati kompatibilan sa sustavom!

Dakle, iz čisto praktičnih razloga!

Howgh!
 Str: [1] Gore  
croJoomla Forum » Joomla 1.5 » Dodaci (Extensions) » Pluginovi » Tema: Pomoć pri izradi joomla plugina
Skoči na:  



Powered by SMF 1.1.15 | SMF © 2006-2008, Simple Machines