PHP - honlap felépítése OO-val
2011-07-31T17:27:31+02:00
2011-08-03T12:50:24+02:00
2022-06-29T07:20:31+02:00
  • Az OOP eszközrendszerét soha sem önértékén alkalmazzuk, ezek használatát minden esetben meg kell előznie egy OOP szemléletben elkészült tervezési mintának, és az OOP paradigma ismeretének. Ha ismered a paradigmát a tervezési módszertant és az OOP kínálta eszközrendszert akkor van értelme hozzákezdeni az oldalad áralakításának. Amit most csinálsz az olyan mint amikor valaki megtanul egy két tánclépést de avval már nincs tisztában hogy hol és milyen formában érdemes bemutatni ezért a lakodalomban is táncra perdül és a temetésen is.
    Mutasd a teljes hozzászólást!
  • CakePHP-t a következőképpen tanuld:

    1. Angol nyelvű book.cakephp 1.3-as verzió simán végigolvasás, semmi kódolás. (a magyar nem tudom, mennyire pontos, biztosabb az angol)
    2. 11.1 fejezetben a Blog tutorialt végigcsinálod
    4. Keresel még más tutorialokat a neten, amiket megcsinálhatsz.
    5. Ha ezekkel megvagy, visszajössz, és én még adok példafeladatokat, amiket meg lehet csinálni.

    Nekem anno az első 4 pont kb 2 nap volt. Ennyi idő alatt meg lehet érteni a lényegét, nagyjából átlátni a lehetőségeket.

    A részletek úgyis a konkrét feladatok esetén fognak előjönni, először azt lásd, hogyan épül fel az egész, hogyan követi az MVC "előírásokat"! Hajrá!
    Mutasd a teljes hozzászólást!
  • "getSzokeSzemuKekHajuPicsak()" eztetszik
    Értem már.
    Más: Elakadtam cakephp-ben.
    Olvasom a magyar nyelvű kézikönyvet, és a webmánián lévő tutorialt próbálgatom, bár néhol már elavult.
    Első körben szeretnék készíteni egy egyszerű beléptetőt.
    Egy felhasználó: admin. Egyszer már működött, de valamit elrontottam, mert most akármit írok be, nem jó.
    Meg tudnátok mondani, mi a baj?
    U.i.: Inkább nyitok egy tudástártémát ezzel a problémával...

    CakePHP kezdés, login form probléma - Tudástár - Prog.Hu
    Mutasd a teljes hozzászólást!
  • De ehhez minek a modell, mért nem turkálhat a controller az adatbázisban

    Melyik kontroller? Mindegyik? Mondjuk írsz egy lekérdezést, ami visszaadja a kék hajú szőke szemű nőket () a partnerkereső alkalmazásod szemely táblájából. Ezt mondjuk fog kelleni több oldalon is, akkor mindenhol külön megírod ezt a lekérdezést? Nem egyszerűbb, ha csak azt írod mindenhol, hogy Szemely->getSzokeSzemuKekHajuPicsak()?

    Mutasd a teljes hozzászólást!
  • Mert ez a lényege az MVCnek.

    Modell-nézet-vezérlő - Wikipédia

    A modell-nézet-vezérlő ezt úgy éri el, hogy elkülöníti az adatok elérését és az üzleti logikát az adatok megjelenítésétől és a felhasználói interakciótól egy közbülső összetevő, a vezérlő bevezetésével.
    Mutasd a teljes hozzászólást!
  • Az mvc-ben a modellnek mi a szerepe?
    "A modell többnyire adatbázis táblát képvisel..."
    De ehhez minek a modell, mért nem turkálhat a controller az adatbázisban?
    Mutasd a teljes hozzászólást!
  • Már írtam, mivel linuxon van sh-t.
    ./start_bake.sh

    Elhatároztam: belemerülök a cake tanulásába, a cake.hu-n lévő kézikönyvvel kezdem.

    A cakephp-val kapcsolatban felmerülő esetleges kérdéseimet ide írhatom, vagy ezzel már nagyon elkanyarodtam az eredeti kérdéstől?
    Mutasd a teljes hozzászólást!
  • Akkor nekem ezért nem műkdöött, mert nem léptem ki be

    Én így szoktam, és akkor nem kell, legalábbis nálam:

    php cake.php bake
    Mutasd a teljes hozzászólást!
  • controllerbe meg mondjuk űrlap hibakezelést

    Mondjuk a cakephp-ban nem gy van. Ott a model szintjén van meg ez. Hiszen valószínűleg a modelbe akarsz majd adatot rögzíteni és az lehet valid, vagy nem valid.

    A symfony esetén meg külön form osztály van az űrlapokra. A megoldások száma végtelen. És neked kár lenne mindegyiket külön feltalálnod, a keréktől kezdve. Először érdemes lenne megtanulni/megismerni a már létező megoldásokat. Megérteni azok előnyeit és hátrányait.

    Annyira amúgy ez a dolgot cakephp.ban kb 10 megérteni. Majd amikor komponenseket akarsz fejleszteni, vagy routing szabályokkal küzdesz, akkor kicsit bonyolult lesz, de még mindig nem az a kezdőknek érthetetlen kategória. De egy admin felület legenerálása nem lehet bonyolult. Hozz létre (windows alatt) a projekt könyvtárban egy indit.bat-ot és ird bele:
    cd app cd.. cake\console\cake.bat bake
    Máris behívhatod vele a konzolt és mehet az admin felület gyártása.

    Pluszpont ha megmondod, hogy miért kell belépni az app könyvtárba és kilépni onnan. Én nem tudom, de már évek óta szeretném megérteni...
    Mutasd a teljes hozzászólást!
  • "de egyelőre úgy érzem a megtanulása több időt venne igénybe, mint amennyit megspórolnék vele."


    Rosszul érzed. Biztos, hogy nem két nap lesz megtanulni, viszont ha nem tanulsz meg legalább egy OOP keretrendszert, soha nem fogsz magadtól normálisat írni. Egyébként meg tizenX évesen ráérsz, nem? Nyáriszünet, stb... De ne hallgass az okosabbra...
    Mutasd a teljes hozzászólást!
  • Hosszútávon biztosan kifizetődőbb megtanulni egy keretrendszert, de egyelőre úgy érzem a megtanulása több időt venne igénybe, mint amennyit megspórolnék vele. Egyébként a cakePHP-vel most ismerkedem.

    Az MVC-vel kapcsolatban lenne egy kérdésem:
    Ha készítek három fájlt (model.php, view.php, controller.php) és ezekbe csoportosítom az osztályokat,
    [például a modelbe csak adatbázissal kapcsolatosakat teszek (írás, olvasás), a viewbe meg pl. olyan, ami táblázatban írja ki az adatbázisból kapott adatokat, a controllerbe meg mondjuk űrlap hibakezelést]
    az már MVC?
    Vagyis az MVC attól MVC, hogy csoportosítom az osztályokat feladatuk szerint?
    Mutasd a teljes hozzászólást!
  • Osztom nova74 véleményét, annyiszor ki lett már ez a téma tárgyalva itt. Ott van a CakePHP, végignyomod a manualt, csinálsz pár közepes OOP példát, majd egy saját keretrendszert, végül, ha nagyon elvetemült vagy, csinálsz egy komolyabbat PHP5-re.

    Nulla OOP tudással (és itt nem az OOP szintaktikájára, mert az nem nagy wasistdas, hanem a programtervezésre gondolok) nem fogsz tudni elsőre értelmes MVC framework-öt írni.
    Mutasd a teljes hozzászólást!
  • Azt áruld el hogy miért nem jó, ha valami meglévő, ismert keretrendszeren keresztül tanulnád meg az OOP-t? Ott van például a CakePHP, egyszerű nagyon, van hozzá magyar nyelvű leírás. Igaz, a magyar fórumon kicsit lassan válaszolnak, de szoktak. Pont van neki egy Configure osztálya is. Annyira nem is viszik túlzásba az OOP-t, hiszen 4-es PHP-t is támogatja.
    Mutasd a teljes hozzászólást!
  • Nem egyszerhasználatos. Az utolsó oldal kivételével mindenhol ottvan.
    Mutasd a teljes hozzászólást!
  • Hát pl így:
    Config::write('pages',array('a','b','c');

    Hát ha már tovább, akkor valahogy így csinálnám:
    class Tovabb() { public $szoveg; public function __construct($szoveg = 'Tovább..') { $this->szoveg = $szoveg; } public function display() { A kód amit megírtál. } } $link = new Tovabb('A következő oldalra'); $link->display();
    De nem biztos, hogy egy tovább linknek én osztályt csinálnék
    Inkább csinálnék egy HtmlLink osztályt, amivel linkeket lehet csinálni így:
    HtmlLink::link('A főoldalra', '/'); HtmlLink::link('Valahova máshova', '/mashova.php', array('egy' => 1 , 'ketto' => 2)); //kiirja: <a href="/mashova.php?egy=1&ketto=2">Valahova máshova</a>

    Én nem szeretek példányosítani feleslegesen egyszer használatos dolgok miatt.
    Ezért pl nem Link helperem lenne, hanam inkább Html helperem amivel minden html taget, gombot, képet elő tudnék állítani, és a View-ben automtamikusan be lennének ezek töltve.


    Igen az hibás, mert visszatérési értéket nem lehet így tömb szerűen használni, előbb el kell menteni.
    Mutasd a teljes hozzászólást!
  • Ide is kell egy közvetett változó, mert ez így hibás:
    Config::read('pages')[array_search(...
    Mutasd a teljes hozzászólást!
  • Csináltam egy ilyet:

    $pages = array("fooldal.php", "szolgaltatasok.php", "lepesek.php", "referenciak.php", "kapcsolat.php"); Config::write('pages', $pages); class tovabb { var $szoveg; var $kovetkezo_oldal; function create_tovabb($szoveg) { $this->szoveg = $szoveg; $this->kovetkezo_oldal = $pages[array_search($_SERVER['PHP_SELF'], Config::read('pages')) + 1]; echo ' <div id="tovabb">'."\r\n". ' <a href="'.$this->kovetkezo_oldal.'" class="szoveg_tovabb">'."\r\n". ' '.$this->szoveg."\r\n". ' </a>'."\r\n". ' </div>'."\r\n"; } }

    Hogy tudok tömböt megadni a confignak anélkül, hogy egy közvetett változót használnék? ($pages)
    A $this->szoveg = $szoveg részt ki lehet hagyni valahogy?
    Mutasd a teljes hozzászólást!
  • Ahogy érzed.

    A Config direkt azért static a példámban, hogy ne kelljen létrehozni.

    Úgy sem ezzel a programoddal fogod megváltani a világot, aztán rájössz hol érdemes.
    Mutasd a teljes hozzászólást!
  • Köszönöm!
    Ez tetszik, összehozok valami hasonlót...
    Közben feltennék még egy kérdést:

    Az objektumokat hol célszerű létrehoznom? A kód elején, vagy ahol felhasználom őket?

    $tovabb = new tovabb();
    $tovabb->create_tovabb("Tovább...");
    (Egy link a következő oldalra)

    $menu = new menu;
    $menu->create_menu($menupontok, ".php");
    Mutasd a teljes hozzászólást!
  • Ezt módosíthatod.

    Csak csinálsz egy osztályt (legyen az a lenti)

    config.php
    include('Config.class.php'); Config::write('kakaoscsiga_darab',100); Config::write('admin_email', 'david@david.hu'); Config::write('app_name','Helló világ'); ...

    Használat:
    index.php include('config.php'); echo 'Sziasztok, ez itt a(z) '.Config::read('app_name').' alkalmazásom.';

    CakePHP-ban ilyesmi van, csak ott dot syntaxxal lehet megadni:
    Configure::write('Database.Password','x1');
    Configure::write('Database.Username','x2');
    Configure::read('Database'); //tömb amiben mindkét adat benne van

    De Yii-ben pl. egy egyszerű tömbben kell átirogatni, csak most tanulgatom, de így néz ki az enyém:
    return array( 'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..', 'name'=>'Helló világ', 'defaultController' => 'Item', // preloading 'log' component 'preload'=>array('log'), // autoloading model and component classes 'import'=>array( 'application.models.*', 'application.components.*', 'application.modules.user.models.*', 'application.modules.user.components.*', ), 'modules'=>array( // uncomment the following to enable the Gii tool 'gii'=>array( 'class'=>'system.gii.GiiModule', 'password'=>'cica', // If removed, Gii defaults to localhost only. Edit carefully to taste. 'ipFilters'=>array('127.0.0.1','::1'), ), 'user' => array( 'tableUsers' => 'users', 'tableProfiles' => 'profiles', 'tableProfileFields' => 'profiles_fields', ), 'rbac' => array( 'tableUser' => 'users', 'columnUserid' => 'id', 'columnUsername' => 'username', 'columnEmail' => 'email' ), így tovább..

    Azért használtam dupla kettőspontot, hogy ne kelljen példányosítani a config osztályt (static)

    Joomlaban például a te általad is leírt, tagváltozós config van.
    Mutasd a teljes hozzászólást!
  • Szeretném a configot nem túlbonyolítani, vagyis hogy egy fájl felmásolásával módosíthassam.

    Én a Config->write elérést ismertem, a PHP 24 óra alatt c. könyvből tanultam. A dupla kettőspont az újabb verziókban van?
    Mutasd a teljes hozzászólást!
  • Legyen egy config osztály
    class Config{ private static $values; public static function write($key,$value) { Config::$values[$key] = $value; } public static function read($key) { if ( isset(Config::$values[$key])) { return Config::$values[$key]; } else throw new Exception('Nincs ilyen elem'); } } Config::write('kakaoscsiga_darab',100);
    Vagy csinálhatod a tagváltozós megoldással is, de így ha akarod akkor átrakhatod DB-be a config tárolását, stb.
    De mondjuk célszerű a DB connection adatait nem a DB-ben tárolni

    (Ezért szokott lenni külön egy DB osztály. )
    Mutasd a teljes hozzászólást!
  • Sziasztok!

    Idén kezdtem objektum orientáltan programozni PHP-ban. Most úgy döntöttem, átalakítom a honlapomat apránként, hogy a végén teljesen OO legyen.

    Pár kisebb modult már csináltam. Például menüt, aminek csak a címeket, és a hivatkozásokat kell megadni egy tömbben.
    A kérdésem az lenne, hogy hogyan alakítsam ki az oldal szerkezetét.
    Illetve erre vonatkozóan lennének konkrét kérdéseim.

    Az első: vannak globális változóim, amiket bárhonnan szeretnék tudni elérni, és fontos hogy egy helyen legyenek az egyszerű módosíthatóság érdekében. (Tudom az OO lényege, hogy a logikailag összetartozó dolgok egy helyen legyenek, de néhány globális változóra szükségem van.)
    Eddig egy config.php-ban voltak megadva.
    Most arra gondoltam csinálok a config.php-ba egy config nevű osztályt. Ennek az osztálynak nem lennének függvényei, csak tulajdonságai. A többi osztály pedig örökölné ezeket.

    Jó az elgondolás, vagy máshogy kellene nekiállnom?
    Mutasd a teljes hozzászólást!
Címkék
abcd