[php] plugins maken voor php scripts?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik zie wel eens dat bepaalde sites modules gebruiken die door andere geschreven zijn om hun gallery/guestbook/etc te beheren, nu vraag ik me af wat het idee achter een php plugin is en of dat het wel plugin genoemd kan worden of meer een component die je inbouwt?

Heeft iemand informatie omtrend het werken (indien dat kan) met php plugins en wat het idee en opzet daar van is?

Acties:
  • 0 Henk 'm!

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 17:49

ripexx

bibs

Volgens mij gooi je een aantal dingen door elkaar. Als jij een website bouwt die de miogelijkheid heeft om externe module te draaien dan moet at heel goed kunnen. Je zorgt er dan vor dat je voldoet aan een aantal afgesproken regels over de input variabelen, configs en de output variabelen. Hoe deze er dus uit moeten zien etc.

PHP zelf biedt ook de moglijkheden om er uitbreidingen voor de schrijven. Ja kan dan functies gaan aanspreken zoals bijvoorbeeld de mysql functies. Alleen dan voor je eigen specifieke doeleinde. Alleen gaat dit nog wel een stapje verder. In het manual staat er het een en ander over: http://www.php.net/manual/nl/zend.php & http://www.php.net/manual/nl/api.php

buit is binnen sukkel


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
nee wat ik bedoel is dat je bv een plugin met dergelijke onderdelen in een submapje plugin/<pluginname> hebt staan en deze kan benutten in je website (script) en natuurlijk neem ik aan dat er dan 'standaard' koppelingen gemaakt zijn... of iets dergelijks.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Een recent topicje van deze week: [rml][ PHP/MySQL] Object tree en modulisatie[/rml]

Het gaat er een beetje om wat je wilt. Voor een CMS is het vaak handig om in een database rijen toe te voegen om zo de modules aan een pagina te koppelen. Welke modules aanwezig zijn kun je vinden door in een map 'modules' alle modules in een eigen mapje te stoppen. Je kunt dan met PHP deze mapjes doorlopen en kijken welke modules beschikbaar zijn.

Acties:
  • 0 Henk 'm!

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 17:49

ripexx

bibs

Verwijderd schreef op 11 juni 2004 @ 10:10:
nee wat ik bedoel is dat je bv een plugin met dergelijke onderdelen in een submapje plugin/<pluginname> hebt staan en deze kan benutten in je website (script) en natuurlijk neem ik aan dat er dan 'standaard' koppelingen gemaakt zijn... of iets dergelijks.
Je zou eens kunnen kijken naar bijvoorbeeld squirelmail, dit is een imap webmail client die ook de mogelijkheid voor plugins etc heeft. Zo zijn plugins voor password synchronsatie enz. Maar ook kan je kijken naar PHP Nuke een webportal welke ook exteren modules kan verwerken. :)

buit is binnen sukkel


Acties:
  • 0 Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 16:14

pietje63

RTFM

Ik denk dat phpBB wel een leuk voorbeeld is, je hebt hier verschillende dingen:
- uitbreidingen die met een script geinstalleerd moeten worden
- uitbreidingen die handmatig geinstalleerd moeten worden
- uitbreidinegn die al werken als je een bepaald bestand in de goede dit zet (ik ben deze alleen tegen gekomen voor de admin)

Volgens mij verdient alleen de laatste het woord plugin omdat het niets wijzigt aan het orgineel, wel functiies toevoegt en niet geinstalleerd hoeft te worden.

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb eens gekeken maar snap er helaas nog niet zo veel van want het is natuurlijk niet niets om er achter te komen hoe een ander pakket werkt met modules cq plugins.

Ik zelf heb eens zitten denken over een opzet daarvan, om dit voor mijzelf mogelijk te maken in de toekomst, mischien handig in toekomstige projecten etc.

Echter vraag ik mij nu af wat het idee van een plugin is, en hoe ik dit zou kunnen configureren etc!, want dat moet ik ook kunnen... en administreren.....

Ik ga notepad eens starten.............

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb het nu als volgt aangepakt en weet niet of het de juiste manier is maar here i give it a shot.

Mijn modules worden geladen dmv een paar extra regels in mijn config files te plaatsen.

bv

code:
1
2
3
$module[] = array('modules/testmodule/,
                  'mijnmodule.php',
                  'mijnmoduleconfig.inc');


nu weet ik welke module ik kan benutten en waar de config te vinden is.

in de config files zet ik string variabelen met een uitleg en beperkingen zoals bijvoorbeeld het volgende

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// types zijn alsvolgt ::
// 1. type       = numeric / text / charonly
// 2. min lengte = 0 (0 = null)/
// 3. max lengte = 0 (0 = 128, 128 is max)
// 4. value      = 0 (0 = null, max 65000) kan reeds gegeven zijn.


$ini['path'] = array('text',
                     0,
                     0,
                     'c:/www/test');

$ini['naam'] = array('text',
                     0,
                     0,
                     'Test module');
$ini['versie'] = array('text',
                       0,
                       0,
                       '1.0');


dit wordt dan gelezen en of geschreven uit het bestand dat in $module beschreven staat.

Mogelijk moet ik tzt wel 'standaarden' gaan ontwikkelen maar daar breek ik mijn hoofd al een paar weken over en wil tot nu toe helaas niet echt lukken. Als iemand betere of andere ideeen heeft over hoe ik het geen moet aanpakken zou ik dit graag willen horen.

Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Ik heb hier ook vroegâh eens m'n hoofd over gebroken, en ben tot de volgende oplossing gekomen (icm PHP5 werkt dit hélemaal perfect :) )

• pleur je 'plugins' in een directory
• zorg dat je plugins een $_GET of een $_POST variabele switch()'en
• include je plugins automagisch.

kortom, dan ziet een plugin er ongeveer zo uit (héél kort)

PHP:
1
2
3
4
5
6
7
switch ($_GET['action'])
{
  case 'blaat'
     print_r($_GET);
     // doe je ding hier
  break;
}


Ikzelf hou deze structuur voor mezelf aan, en heb voor mezelf een standaard template engine ontwikkeld, hier kan je je plugins dan netjes op in laten haken.

Met de PHP5 __autoload() functie hoef je je zelfs niet eens meer druk te maken over overhead door het onnodig instantiaten includen van objecten :)

HTH :)

[ Voor 10% gewijzigd door SchizoDuckie op 05-07-2004 11:09 ]

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hmm... maar hoe trigger jij dan de layout? want bv zo'n module doet ook aan verzenden van formulieren etc.... en na het geven van een echo (en flush) kun je moeilijk nog wat met headers gaan doen toch? :D

Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Verwijderd schreef op 05 juli 2004 @ 13:07:
hmm... maar hoe trigger jij dan de layout? want bv zo'n module doet ook aan verzenden van formulieren etc.... en na het geven van een echo (en flush) kun je moeilijk nog wat met headers gaan doen toch? :D
Dat los je dus op met een template :) ik heb een global $_TPL, waar ik een hoop leuke (veelvoorkomende) dingen mee kan doen. eigenlijk is het gewoon een HTML file met PHP die pas als laatste geparsed wordt, en de vars uit de $_TPL erin plempt.

index.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
global $_TPL;

include('./includes/functions.php');

loadPlugins('./plugins/');

/*
 in zo'n plugin staat bijv. :

$_TPL['title'] = 'woei';
$_TPL['scripts'][] = '/includes/beehive2.js';
$_TPL['onload'] = "alert('woei!');";
$_TPL['menu'] = $menu->display();
$_TPL['body'] .= '<marquee>woei</marquee>';

thow_error($_POST); 
// throw_error is een functie die automagisch php en mysql en js errors 
// in een mooi popupje zet, zodat je layout niet erneukt wordt.
*/

include('/includes/template.inc.php');


hoe de template.inc.php deze vars dan weer omzet mag je natuurlijkz elf weten ;)
Zo kan je dus altijd alle headers versturen, redirecten, includen, die()' en, etc :Y)

[ Voor 18% gewijzigd door SchizoDuckie op 05-07-2004 13:35 ]

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Ik ben op dit moment weer een module-opzetje aan het testen. Ik heb hiervoor een map modules gemaakt. In die map zit voor iedere module een mapje. In deze map staan een aantal bestanden:
index.php, gewoon de module zelf
version.php, een bestand met daarin een functie: version_modulenaam
Deze functie geeft een array terug met daarin de versie, omschrijving, eventuele submodules.

Eventueel nog een install.php bestand welke een functie install_modulenaam bevat. Deze geeft een array met SQL queries terug waarmee je de update installatie kunt uitvoeren.

Wat moet er nog gebreuren: er moet gechecked worden op afhankelijkheden: een forummodule kan niet werken zonder de login module e.d.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
klinkt intressant Pape Eend; maar jou template parser is zekers stackbased gemaakt hé, en dat is iets dat mijn parser helaas niet is :P... ik zal eens kijken naar iets commons.

djluc; lijkt wel een beetje op de style van euh.. hoe heet dat ding... N... nogwattus..

om bv te controlleren op 'functies' en include, zou je nog een required.php kunnen maken, dit dat even voor je controlleert ofzo :)

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
lijkt wel een beetje op de style van euh.. hoe heet dat ding... N... nogwattus..
Geen idee, ik heb het niet op een bepaald systeem gebaseerd.
required.php kunnen maken, dit dat even voor je controlleert ofzo
Heel creatief, denk echter dat het een subarray wordt van het versiebestand. Teveel files is namelijk niet zo fijn.

Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Verwijderd schreef op 05 juli 2004 @ 13:48:
klinkt intressant Pape Eend; maar jou template parser is zekers stackbased gemaakt hé, en dat is iets dat mijn parser helaas niet is :P... ik zal eens kijken naar iets commons.
stack based? nee man veel te omslachtig.

hij ziet er eerder zo uit:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<? global $_TPL; ?>
<html>
<head>
<title><?=$_TPL['title'];?></title>
<?
if (!empty($_TPL['scripts']))
{
   for ($i=0; $i<$_TPL['scripts']; $i++)
{
echo ("<script langugae='javascript' src='{$_TPL['scripts'][$i]}'></script>");
}
}
?>


etc etc etc :) gewoon simpele html met wat PHP ertussendoor. is sneller dan welke andere template class ook :P

[ Voor 13% gewijzigd door SchizoDuckie op 05-07-2004 14:01 ]

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Papa Eend schreef op 05 juli 2004 @ 14:01:etc etc etc :) gewoon simpele html met wat PHP ertussendoor. is sneller dan welke andere template class ook :P
* djluc is het daar geheel mee eens. Vooral de notatie is veel sneller dan met een template parser. Gewoon een array vullen en klaar.
Pagina: 1