Obecný dotaz: PHP alá moduly aplikace – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Obecný dotaz: PHP alá moduly aplikace – PHP – Fórum – Programujte.comObecný dotaz: PHP alá moduly aplikace – PHP – Fórum – Programujte.com

 

šnek
~ Anonymní uživatel
21 příspěvků
14. 8. 2018   #1
-
0
-

Zdravím přátelé...

Nemám rád OOP v PHP (Nevím proč, nesedí mi v něm) - Rád bych si napsal nějaký řídící systém, který by mi načítal moduly stránky - Dám příklad:

Administrace čehokoliv - Základ, přihlášení

Moduly - Faktury, Sklad, Objednávku

Rád bych měl vždy složku s modulem a v ní potřebné scripty k danému modulu.

To co chci napsat, je systém který bude ty moduly automaticky ze složky načítat - Vloží odkaz do Menu a ve chvíli, kdy v nemnu kliknu na modul, aby se v submenu ukázalo submenu daného modulu. Všechny tyhle informace vč. submenu chci v tý složce s daným modulem.

Nechci příklady, spíš teorii - jak by jste to řešili vy? :-) Díky za diskuzi

Nahlásit jako SPAM
IP: 185.193.86.–
Kit+15
Guru
14. 8. 2018   #2
-
0
-

#1 šnek
Nemáš rád OOP v PHP nejspíš proto, že jsi v něm viděl jen špatné ukázky. Zapomeň na gettery a settery, pravé OOP je nepoužívá - s atributy pracuje výhradně privátně.

Automatické načítání přes autoloader potřebuje uspořádání kódu do tříd. To ovšem stále není OOP. Pokud zavoláš třídu, která ještě není v paměti, autoloader ji natáhne ze správného souboru. Jsou to jen 4 řádky kódu.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:43c:d...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
šnek
~ Anonymní uživatel
21 příspěvků
15. 8. 2018   #3
-
0
-

Já v php prostě oop zkoušel párkrát, ale i když sem dělal eshop, prostě pro mě byla pohodlnější klasika...

Jinak udělal jsem si totok:

<?php
	function modul_menulink($modul) {
		$path_modules = "moduls";
		
		//check if modul exist in modul folder
		$fullpath = $path_modules."/".$modul."/load.php";
		if(!file_exists($fullpath)) {
			 echo "WTF WTF Module not load!!?";
			return;
		}
		//load file and get info
		include_once $fullpath;
		
		if(!isset($modul_url) && !isset($modul_name)) return;
		$url = $modul_url;
		$name = $modul_name;

 		return array($url, $name);
	}

	function modules_nav() {
		//Check folder with modules and if php file - load it
		$path_modules = "moduls";
		$scan = scandir($path_modules);		
		
		foreach ($scan as &$value) {
    		if(($value != ".") && ($value != "..")) {
				if(file_exists($path_modules."/".$value."/load.php")) { //check if load.php exist
					$getinfo = modul_menulink($value);
						if(is_array($getinfo)) echo "<a href=\"".$getinfo[0]."\" >".$getinfo[1]."</a><br>";
						else echo "wrong infos of $value module<br>";	
				}			
			}
		}
	}
	

	modules_nav(); //This call clasic navigation of base pages

Tohle mi vlastně načte základní info o modulu - URL (název) modu a vygeneruje navigaci s modulama

základem je, aby každej modul měl ve složce load.php, kterej obsahuje základní informace, právě zmíněnej název do navigace, url a později i submenu, a klasickej include stránek...

Pro mě je tohle pohodlný řešení, spíš mě zajímá, jak moc to zatíží server? Nejsem si jistej, jak často si otevře ten soubor aby si natáhnul informace - případně napadá vás lepší řešení?

Nahlásit jako SPAM
IP: 37.205.9.–
peter
~ Anonymní uživatel
3981 příspěvků
15. 8. 2018   #4
-
0
-

Jen jednou? Vzdy pri zmene. Udelas novy sken a vygenerujes si databazi nebo php kod. A protoze zmenu v modulech nebudes delat treba 20 let, tak se ten kod nemusi pouzit 20 let.

Nahlásit jako SPAM
IP: 193.84.203.–
šnek
~ Anonymní uživatel
21 příspěvků
15. 8. 2018   #5
-
0
-

#4 peter
Ted uplně nechápu

Nahlásit jako SPAM
IP: 37.205.9.–
Kit+15
Guru
15. 8. 2018   #6
-
0
-

#3 šnek
Server neřeš, podstatná je zátěž vývojáře.

V OOP se udělá vcelku snadno třeba tohle: 

$modul = "NázevModulu";
$objekt = new $modul($data);
$objekt->operace();
echo $objekt;

Načítání modulů v cyklu je hodně nešťastné, ale i kdybys ho použil, tak místo 


if (file_exists($path_modules."/".$value."/load.php")) {
    //check if load.php exist
    $getinfo = modul_menulink($value);
    if (is_array($getinfo))
        echo "<a href=\"".$getinfo[0]."\" >".$getinfo[1]."</a><br>"; else echo "wrong infos of $value module<br>"; }
// snadno použiješ
echo $objekt;

který udělá totéž.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:43c:d...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
šnek
~ Anonymní uživatel
21 příspěvků
15. 8. 2018   #7
-
0
-

Pomalu a jistě mě k oop v php přemlouváš, ale furt mi v php ta topologie nedává smysl...

Co je vlastně v php třída?

Dělá se jedna třída na menu, druhá na submenu, třetí na obsah? Já si prostě to rozdělení v php nedokážu plně reálně představit tak, aby mi to usnadnilo život...

Nahlásit jako SPAM
IP: 185.193.86.–
Kit+15
Guru
15. 8. 2018   #8
-
0
-

#7 šnek
Třída je ve své podstatě (pokud možno) nezávislá komponenta, která řeší jednu část problému. Slouží jako šablona pro vytváření objektů. Jsou do ní soustředěny atributy a metody, které k sobě patří. Dá se srovnat s modulem, jen má o něco jasněji definována pravidla a hlavně má na rozdíl od modulu podporu autoloadingu - natáhne se automaticky do paměti až když je potřebná. V celé aplikaci tak stačí jediný include.

Pokud jsem správně pochopil, tak chceš vytvářet menu podle toho, jak máš moduly rozmístěné v adresářích. Tvůj postup nese problém, že vlastně natahuješ všechny moduly, což zejména u domovské stránky způobí tragický výkon. Vždy se snaž natahovat pouze ty moduly, které skutečně potřebuješ. Místo 

$path_modules."/".$value."/load.php"
// raději
$path_modules."/load.php"

a do toho souboru uložit všechny potřebné informace, které moduly v adresářích jsou. V podstatě v něm bude to menu. Tím odpadne i skenování adresáře.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:43c:d...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3981 příspěvků
16. 8. 2018   #9
-
0
-

šnek:
Tridy se pouzivaji, aby sis udelal poradek v kodu. Skupinu prikazu uzavres tridou. A kdyz v jinem programu budes chtit pouzivat totez, zkopirujes si celou tu tridu.

Napr mas program, ktery pracuje jako upload obrazku. Mas tam 2 tridy. Upload, ktera se stara a upload souboru. A uploadObrazek, ktera vyuziva tridy upload a presunuje obrazek, uklada do databaze, dava obrazku nazev, napr hezkou url a pod.
Ted budes mit jiny program, kam si zkopirujes obe ty tridy a muzes je hned pouzit. Nemusis hledat funkci po funkci mezi stovkami, ktere vlastne potrebujes.

---

To pred tim, ptal ses na pouziti toho loadovani. Prijde mi zbytecne pri kazdem spusteni volat funkce pro load modulu. Proc si nepripravis uz vysledek? Nacist 50 souboru chvili trva. Ikdyz, dnes, s ssd, asi ani ne. Ja bych si udelal php, ktere mi vygeneruje jeden php soubor a ten pak naincluduji. Generovani toho souboru bych spoustel jenom v pripade, ze nekdo meni nastaveni nebo update modulu. Coz se dela kratce po instalaci cms, ale pak treba 10 let vubec.
Cili, 10 let budes brzdit cms loadovanim modulu nebo je muzes nacist pokazde najednou.

Nahlásit jako SPAM
IP: 2001:718:2601:258:f0fb:14...–
šnek
~ Anonymní uživatel
21 příspěvků
29. 9. 2018   #10
-
0
-

#9 peter
Jasně, vytvořil jsem si soubor vygenerovaný do .html... Ale...

Co když potřebuju řešit práva a skrývat v menu moduly, na který nemá daný člověk práva?

Nahlásit jako SPAM
IP: 185.193.86.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 1 host

Podobná vlákna

Aplikace s více moduly — založil plasmo

SQL dotaz v php — založil kadla

PHP anketa - dotaz — založil Toreto

Sql dotaz v PHP — založil Brambor

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý