Alleen als "weer" een constante is. Het is iig geen variabele, want er staat geen $ voor. En het is geen functie, want er staat geen () achter. Het is ook geen string, want die moet tussen quotjes staan.quote:Op donderdag 26 maart 2009 23:56 schreef Dawnbreaker het volgende:
nvm opgelost:
<a href="<?php echo $siteurl.weer;?>"> linkje </a> is de correcte php code
1 |
Idd, maar op 1 pagina komen 100derden links, dan wordt het qua code erg onoverzichtelijk..quote:Op donderdag 26 maart 2009 21:17 schreef Light het volgende:
[..]
Je kunt ook eerst php afsluiten, dan je html doen, en dan php weer openen. Scheelt je een hoop gedoe met " en '
Thanks, ga wel eens ff kijken!quote:Op donderdag 26 maart 2009 16:43 schreef hoerezooi het volgende:
[..]
gebruik het zend framework welke in zich heel veel gebruikt maakt van patterns oa singeltons, factory's,chain of command, mvc.
1 2 3 | echo '<a target="blank" rel="nofollow" href="'.$row['http_www_website'].'" onClick="javascript: pageTracker._trackPageview(\'/outgoing/auto_accessoires/'.$row['www_website'].')"\'>'.$row['website'].'</a><br />'; ?> |
Als je door de enorm lange code niet meer ziet wat je aan het doen bent, breek het dan gewoon op in begrijpelijke stukken! Zo ziet je code er uit als je het opbreekt in een paar logische stukken:quote:Op vrijdag 27 maart 2009 09:41 schreef klusmeister het volgende:
Met deze code:
[ code verwijderd ]
komt het er zo:
[ afbeelding ]
uit te zien.. bijna(?) dus, iemand nog een idee wat ik kan proberen om de uitgaande klik goed te kunnen meten?
1 2 3 4 5 6 | $url = $row['http_www_website']; $onclick = 'javascript: pageTracker._trackPageview(\'/outgoing/auto_accessoires/'.$row['www_website'].')'; $linkText = $row['website']; echo '<a target="blank" rel="nofollow" href="'.$url.'" onClick="'.$onclick.'"\'>'.$linkText.'</a><br />'; ?> |
Ook dan blijf ik met het ' verhaal zitten.quote:Op vrijdag 27 maart 2009 11:07 schreef Roy_T het volgende:
Met Rembo eens. Wel een typo op regel 5: een \' die er niet hoort(na de onclick)
En net omdat ik de fout niet kan ontdekken kwam ik hier voor hulp..quote:Op vrijdag 27 maart 2009 11:25 schreef SuperRembo het volgende:
Ik heb de code alleen opgeknipt in logische stukken. Alle fouten staan er inderdaad nog in.
Maar dat kan je toch ook in je voordeel gebruiken, door de broncode uit FF te kopieren? Want die is dan al "gefixed" of werkt dat niet?quote:Op vrijdag 27 maart 2009 10:16 schreef ralfie het volgende:
je moet de laatste 'en " nog omdraaien
Mag ik je een tip geven? als je broncode wil controleren, doe dit nooit in Firefox (als het gaat om quotes ed). Sure, het ziet er overzichtelijker uit, maar Firefox heeft de neiging om de broncode her en der al wat te fixen, door elementen en quotes en dergelijke toe te voegen en weg te halen. Ben er al vaker ingetuind, uren mn php doorgespit waar dat ene element of quoteje nou vandaan komt...
De broncode van Firefox is niet 100% dat wat de browser van de server krijgt, dat van bijvoorbeeld internet explorer is dat altijd wel. Ik gebruik IE nooit, behalve voor broncode's...
Nee helemaal niet, integendeel, soms is een zet in de goede richting erg fijn, ik ben alweer een stuk verder gekomen door eerder advies hier.quote:Op vrijdag 27 maart 2009 11:31 schreef SuperRembo het volgende:
Wil je een paar tips om fouten op te sporen en in de toekomst te voorkomen, of heb je liever dat iedereen telkens al je typfoutjes komt fixen
Firebug wel, maar Firefox "view source" niet.quote:Op vrijdag 27 maart 2009 10:16 schreef ralfie het volgende:
Sure, het ziet er overzichtelijker uit, maar Firefox heeft de neiging om de broncode her en der al wat te fixen, door elementen en quotes en dergelijke toe te voegen en weg te halen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class Modules { var $modules = array(); function __construct() { $dir = opendir("../modules"); while (false !== ($file = readdir($dir))) { if (is_dir("../modules/$file") && !preg_match("/\.\.?/", $file)) { $mod = new Module($file); array_push($this->modules, $mod); } } } } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | class Module { var $templatedir; var $linkname; function __construct($name) { $this->templatedir = "../modules/".$td."/templates"; if(file_exists("../modules/$name/$name.php")) require("../modules/$name/$name.php"); if(file_exists("../modules/$name/$name_admin.php")) require("../modules/$name/$name_admin.php"); } function getModuleByName($name) { foreach($this->modules as $module) { if ($module->name == $name) { return $module; } } } } ?> |
1 2 3 | $modules->getModuleByName("agenda")->index($args); ?> |
Maak de Module class een extensie van een abstracte class met daarin functies die je extended class moet implementeren. Maak elke module class een unique naam, en instanieer deze. Dan hoef je alleen nog maar $modulenaam->index() te doen, zonder dat je via de getModuleByname() iets hoeft te doen.quote:Op vrijdag 27 maart 2009 14:18 schreef daReaper het volgende:
Ik zit wat te klooien met OO-programmeren, maar ik kom ergens niet helemaal uit.
Ik heb een site gemaakt, en aan die site wil ik modules kunnen toevoegen. Dit is enkel een directory met bestandjes, die je alleen maar aan de modules-directory hoeft toe te voegen, en het werkt al.
Nou heb ik een bestand modules.php met daarin de klasse Modules. Deze klasse kijkt in de modules directory om te zien welke modules er zijn.
[ code verwijderd ]
Zoals je daar ziet, wordt voor elke module weer een nieuw object aangemaakt van de klasse Module
[ code verwijderd ]
in deze module gaat het echter niet helemaal goed.
In die includes wordt ten eerste $this->linkname bepaald, wat geen probleem is. Er staat (staan) echter ook functies in, in elk geval de functie index($args). Hoe kan ik er nou voor zorgen dat deze functies gewoon onderdeel worden van het nieuw aangemaakte object? Beetje moeilijk uit te leggen allemaal, maar uiteindelijk wil ik in het hoofdscript het volgende stukje script gebruiken:
[ code verwijderd ]
Ik hoop dat het een beetje begrijpelijk is... Hoe kan ik dit oplossen?
Ik vrees dat ik het niet helemaal snap :@ Ben nog een beetje een beginner met OOP.quote:Op vrijdag 27 maart 2009 14:23 schreef Scorpie het volgende:
[..]
Maak de Module class een extensie van een abstracte class met daarin functies die je extended class moet implementeren. Maak elke module class een unique naam, en instanieer deze. Dan hoef je alleen nog maar $modulenaam->index() te doen, zonder dat je via de getModuleByname() iets hoeft te doen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | class Modules implements IteratorAggregate { var $modules = array(); function __construct() { $dir = opendir("../modules"); while (false !== ($file = readdir($dir))) { if (is_dir("../modules/$file") && !preg_match("/\.\.?/", $file)) { if(file_exists("../modules/$file/$file.php")) require("../modules/$file/$file.php"); if(file_exists("../modules/$file/$file_admin.php")) require("../modules/$name/$name_admin.php"); $mod = new $file(); array_push($this->modules, $mod); } } } public function getIterator() { return new MyIterator($this->modules); } function getModuleByName($name) { foreach($this->modules as $module) { if ($module->name == $name) { return $module; } } } } $modules = new Modules(); ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 | class Module { var $templatedir; var $linkname; var $name; function __construct($name) { $this->templatedir = "../modules/".$td."/templates"; $this->name = $name; } } ?> |
1 2 3 4 5 6 7 8 9 | $this->linkname = "Agenda"; class agenda implements Module { function index($args) { [...] } } ?> |
Een interface is wat anders dan een abstrace class.quote:Op vrijdag 27 maart 2009 14:51 schreef daReaper het volgende:
[..]
Ik vrees dat ik het niet helemaal snapBen nog een beetje een beginner met OOP.
Die getModuleByName() wil ik eigenlijk wel houden. Ik heb zojuist ook een functie op php.net gevonden die ik in mijn Modules klasse kon stoppen, zodat ik een foreach() op de $modules kan gooien, waarbij $modules dan elke keer een nieuwe module returnt.
Ik snap alleen niet zo goed wat dat eerste is, wat je daar zegt. Mijn Modules klasse ziet er nu zo uit:
[ code verwijderd ]
de Module klasse ziet er zo uit:
[ code verwijderd ]
Agenda.php:
[ code verwijderd ]
Maar dit geeft een error: Fatal error: agenda cannot implement Module - it is not an interface in C:\severjanin\modules\agenda\agenda.php on line 4
Zoals ik al zei: ik ben nog een beetje een beginneling hierin. Wat houdt dat "interface" in?
Waarom zou je dat willen houden? Het is een dure operatie die eigenlijk onnodig is, aangezien je al de naam weet van de module die je wilt aanspreken. Dan heeft het geen zin om IEDERE keer weer die modules lijst op te halen en aan te spreken, roep dan direct de controller van de module zelf aan.quote:Op vrijdag 27 maart 2009 14:51 schreef daReaper het volgende:
[..]
Ik vrees dat ik het niet helemaal snapBen nog een beetje een beginner met OOP.
Die getModuleByName() wil ik eigenlijk wel houden. Ik heb zojuist ook een functie op php.net gevonden die ik in mijn Modules klasse kon stoppen, zodat ik een foreach() op de $modules kan gooien, waarbij $modules dan elke keer een nieuwe module returnt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | interface ModFuncs { public function index($args); } abstract class Module implements ModFuncs { var $templatedir; var $linkname; var $name; function __construct() { $this->name = get_class($this); $this->templatedir = "../modules/".$this->name."/templates"; } } class Modules implements IteratorAggregate { var $modules = array(); function __construct() { $dir = opendir("../modules"); while (false !== ($file = readdir($dir))) { if (is_dir("../modules/$file") && !preg_match("/\.\.?/", $file)) { if(file_exists("../modules/$file/$file.php")) require("../modules/$file/$file.php"); if(file_exists("../modules/$file/$file_admin.php")) require("../modules/$name/$name_admin.php"); $mod = new $file(); array_push($this->modules, $mod); } } } public function getIterator() { return new MyIterator($this->modules); } function getModuleByName($name) { foreach($this->modules as $module) { if ($module->name == $name) { return $module; } } } } $modules = new Modules(); ?> |
1 2 3 4 5 6 7 8 9 10 | $this->linkname = "Agenda"; class agenda extends Module { function index($args) { [...] } } ?> |
Nu ik er over na denk is die functie ook niet meer van toepassing. $modules wordt aangemaakt en in het hoofdscript komt het volgende stukje script voorbij:quote:Op vrijdag 27 maart 2009 15:13 schreef Scorpie het volgende:
[..]
Waarom zou je dat willen houden? Het is een dure operatie die eigenlijk onnodig is, aangezien je al de naam weet van de module die je wilt aanspreken. Dan heeft het geen zin om IEDERE keer weer die modules lijst op te halen en aan te spreken, roep dan direct de controller van de module zelf aan.
De rest heeft Tiemie al verteld
quote:Op vrijdag 27 maart 2009 15:15 schreef daReaper het volgende:
[..]
Nu ik er over na denk is die functie ook niet meer van toepassing. $modules wordt aangemaakt en in het hoofdscript komt het volgende stukje script voorbij:
foreach($modules as $mod) {
array_push($menuitems, array($mod->name, $mod->linkname));
if ($page == $mod->name) {
$content = $mod->index($args);
}
}
Dat getModuleByName() heb ik bij nader inzien dus helemaal niet nodig.
Beeld->paginabron heb ik het over. Firebug heb ik niet eens geinstalleerd.quote:Op vrijdag 27 maart 2009 12:17 schreef Roy_T het volgende:
[..]
Firebug wel, maar Firefox "view source" niet.
Dan weet ik niet welke Firefox jij gebruikt, maar de mijne past echt niets aan de in de source vziwquote:Op vrijdag 27 maart 2009 16:43 schreef ralfie het volgende:
Beeld->paginabron heb ik het over. Firebug heb ik niet eens geinstalleerd.
Heb het effe zitten uitzoeken, maar het blijkt mijn overactieve 'view selection source' te zijn. Deze code is natuurlijk al min of meer geparsed...quote:Op vrijdag 27 maart 2009 17:37 schreef Roy_T het volgende:
[..]
Dan weet ik niet welke Firefox jij gebruikt, maar de mijne past echt niets aan de in de source vziw
Heb je een testcase?
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |