WebPillangó főoldal
Oldalak: 1 ... 27 28 [29]   Le
  Nyomtatás  
Szerző Téma: PHP  (Megtekintve 175441 alkalommal)
spier
Tag
**
Nem elérhető Nem elérhető

Hozzászólások: 125


« Válasz #560 Dátum: 2012. 05. 25. - 19:42:20 »

Lenne egy cache-el kapcsolatos kérdésem is.
Maga a cache egy nem túl bonyolult feladat. Adott a sablon fájl amit betölt és ezt lementi cache-be ha van változás vagy adott idő után újratölti a cache tartalmát és azt tölti be.
Igen ám, de mi van ha dinamikusan tudok létrehozni oldalakat adminisztrációs felületen, tehát van pl. egy default.tpl nevű sablonom és az alap odalakat ahol csak a tartalom változik - tehát dinamikusan adminból létrehozol egy sima szöveges oldalt -, akkor ez itt fog megjelenni ezen a sablon alatt, csak mindig más szöveget tölt be. De ezzel a megoldással nem tudok cache-t alkalmazni mivel a template mindig ugyan az, csak a tartalmi rész változik. mindig újratölti a cache-ben a fájlt, mert azt hiszi változott valami - változott is. De a gyorsítótárazás így nem működik.
Ötlet esetleg ennek megvalósítására?
Van pár lehetőség amiben gondolkoztam:
1. Ne legyen dinamikus lap minden betölthető oldalnak külön template (ezt azért mégse).
2. Valami egyedi azonosítót létrehozni minden oldalnak és ez hozzáfűzni a cache token-hez.
3. Az egész koncepció hibás ahogy felépítem az oldalt...
4. Generálok egy alap fájlt adott néven minden oldal létrehozáshoz (ez azért elég kucig).

Nézegettem Joomla és Wordpress motorokat, de nem sokra jutottam vele.

Köszi a segítséget. Mosolyog
Üdv.
Naplózva
Tupacko
WebPillangó

Adminisztrátor
Törzstag
*****
Nem elérhető Nem elérhető

Hozzászólások: 966


WWW
« Válasz #561 Dátum: 2012. 06. 09. - 15:57:25 »

Szia!

Az MVC routing kerdessel kapcsolatban, ez keretrendszertol fugg. Lehet, hogy a "kapcsolat" controller elfogad barmilyen hosszu parameter sorozatot, amit pl. egy tombben kap meg az alap action es akkor sajat routing rendszert hasznalhat, hogy eldontse mire van szukseg.

A cache problemaval kapcsolatosan, nem az szamit, hogy milyen template-bol van generalva, hanem hogy milyen requestre felel, mi a tartalom. Sot, lehet reszleges gyorsitotarazas is, pl. miden azonos fej- es lableces oldalnak csak 1x tarolod a kozos reszeket, a tartalmi reszt meg kulon-kulon. Cachelesre is van kismillio rendszer, ismetelten keretrendeszertol vagy weblodal motortol fuggoen.

Udv,
Tupacko
Naplózva
spier
Tag
**
Nem elérhető Nem elérhető

Hozzászólások: 125


« Válasz #562 Dátum: 2012. 06. 09. - 23:23:09 »

Szia.

Nem fogalmaztam megfelelően részletesen, kibővítem így a kérdésemet.
Routing:
Készítettem egy alap MVC keretrendszert és ehhez kapcsolódóan esetemben a controller/method/args koncepciót használom. Opcionálisan ez lehet még a language/controller/method/args felépítés is. Eddig világos és érthető is. Az első szegmens a domain után a controller. Megkeresem a megfelelő controller fájlt és osztályt a kapott paraméter alapján. Ha nincs második szegmens akkor jön az alap index metódus, ha van, akkor az lesz a kért metódus. Az args egy tömb lesz, amiben 1-től szerepelnek a kapott értékek a 3. szegmenstől felfelé, ha üres akkor null.
Ez a része teljesen egyértelmű, rengeteg tutorial található light mvc-vel.
A problémám ott van, hogy ha adminban elmentek egy új oldalt, tételezzük fel Kapcsolat néven, akkor a controller itt a KapcsolatController osztály lesz a fájl neve pedig KapcsolatController.php - természetesen névterekkel egyszerűsítünk így csak Kapcsolat osztály és Kapcsolat.php lesz. Ebben az osztályban a konstruktorban meghatározom a kapcsolódó modell és egyéb előre beállítandó dolgokat. Itt adom meg pl. milyen helpereket töltsön be. Tételezzük fel nem adtam meg neki további szegmenst így az index metódus meghívódik, és a végén a sablont kezelőnek átadom a változókat egy tömbben, meghatározva némi egyéb paraméterrel.

A gondom ott kezdődik mikor többszintű szegmens struktúrát akarok dinamikusan felépíteni.
Tételezzük fel az adminisztrációs felületen megadom hogy a Kapcsolat legyen az oldal, de további szegmenseket is meghatározok, mint pl cég a második szegmens és a harmadik pedig a dolgozól. Az url esetünkben a következő lesz www.valami.hu/kapcsolat/ceg/dolgozok.
Talán már érted is a gondomat. A controller a kapcsolat mert a koncepció adott a kapott adatok dinamikusak, de én nem a ceg metódust akarom meghívni és nem egy dolgozok paraméterrel hanem egy kapcsolat controllert de mint oldal tartalom a dolgozókhoz tartozó rekordot adja be az adatbázisból. Mivel dinamikus a dolog így ha még további 3 szegmenst megadok akkor legyen az utolsó előtti szegmens a metódus és az utolsó egy id, de a köztes szegmensekkel 2. 3. ne foglalkozzon. És ezekkel össze vissza lehessen manipulálni. Nem tudom mennyire érthető a dolog, egyáltalán kivitelezhető-e. Valahogy a joomla vagy wp-ben is megcsinálták. De nem tudok rájönni miként.

Cache:
Mivel sok jó sablon kezelő van és ki is próbáltam párat a Twig mellett tettem le a voksomat jelenleg. Egyrészt mert jónak tartom a Symfony-t és hát ezt is ők készítik továbbá jó sebesség és kezelhetőségi paraméterekkel rendelkezik.
Mindegyik sablonkezelőnél azonos volt a problémám így továbbiakban, hogy Twig vagy más nem foglalkozom.
Ahogy láttam fájlnév alapján generálódik a cache tartalma és mappaszerkezet mindenhol.
Esetemben van egy DefaultController ami olyan oldalakat klezel amit dinamikusan hoztak létre adminból, tehát nem tartozik hozzá külön controller osztály és fájl stb. Itt a betöltött tartalom a controller alapján megy tehát a kiválasztott DefaultController hozza, de az első szegmenst alapján kapom/kérem az oldalra az adatokat megjelenítésre. Tehát ha pl. /kapcsolat akkor a kapcsolat oldalt hozza, ha /szolgaltatasok akkor a Szolgáltatásokhoz felvitt tartalmat hozza be de a controller mindig a default nevű. Más ötletem nem volt, hogy a dinamizmust megtartsam és szabadon lehessen oldalakat létrehozni mindenféle névvel.
Mivel azonos a controller mindig így azonos a sablon fájl is csak $content az adatbázisból kapott tartalomtól függően változik.
És itt a probléma. Mindig ugyan az lesz a cache generált fálnév és mappaszerkezet és azt hiszi hogy változik valami. Jól is gondolja mert változott, de nem tudom megmondani neki hogy ez új oldal azért változott ne cacheld hanem ami megvan azt töltsd és mindig rátölti a default.tpl-ből létrehozott fájlra az újat. Tehát mindig frissíti a cache-t, mivel a sablon nem változik csak a lekért tartalom.
Remélem jól körül írtam a dolgot. Vagy, hogy mire nem tudok rájönni.

Előre is köszi a segítséget, útmutatást Mosolyog.
Naplózva
Tupacko
WebPillangó

Adminisztrátor
Törzstag
*****
Nem elérhető Nem elérhető

Hozzászólások: 966


WWW
« Válasz #563 Dátum: 2012. 06. 10. - 11:29:38 »

Cache: szvsz rossz az, ha csak a sablon neve alapjan keszul a gyorsitotar. Biztosan van valami beallitas/bovitesi lehetoseg a keretrendszerben, amit hasznalsz. Ha nincs, akkor vagy megprobalod kiboviteni vagy mas utan nezel. A velemenyem ugyan az, mint a legutobbi valaszomban.

Routing: a WP-nel tudott a routing szerkezet es a bejegyzesek egy bizonyos sablon szerint kerulnek kiertekelesre. A lenyeg ott csak annyi, hogy az URL minimum 1 resze legyen egyedi azonosito a posztra nezve, a tobbi dolog nem szamit. Nem is teljesen MVC rendszer, szerintem, igy kar is osszehasonlitani. Mas-mas a cel. A te esetedben az jelentene egy megoldast, hogyha az os-osztalynak lenne egy alap routing kezelese, amit felul lehetne irni/be lehetne injektalni. Tobbfele design pattern is van erre, pl. itt jol mukodne a strategy. Miert segitene ez? Azert mert igy a kontrollerek tobbsege menne az alap controller/action/args elven, ahol a controller-t a keretrendszer keresne ki, az /action/args meg menne tovabb a controller routing megoldo strategiajanak. Ez alapbol szepen kivalasztana az action-t es az argumentumokat. A kapcsolat kontrollerben lehetne egy sajatos routing kezeles, ami kivalasztana a megfelelo szegmenseket es asszerint kezelne a lekerdezest.
Naplózva
spier
Tag
**
Nem elérhető Nem elérhető

Hozzászólások: 125


« Válasz #564 Dátum: 2012. 06. 10. - 14:26:53 »

Köszi a választ, ennyi elég is volt a cache-hez. Ha esetleg valaki használná a programot:

Az Introduction szerint (http://twig.sensiolabs.org/doc/intro.html) a következő a Basic usage felépítése:
Kód:
require_once '/path/to/lib/Twig/Autoloader.php';
Twig_Autoloader::register();
$loader = new Twig_Loader_Filesystem('/path/to/templates');
$twig = new Twig_Environment($loader, array(
    'cache' => '/path/to/compilation_cache',
));

$template = $twig->loadTemplate('index.html');

echo $twig->render(array('name' => 'Fabien'));

A következő fájlok és API kiegészítéssel dinamikusan generált oldalakhoz is tudunk egyedi cache tartalmat generálni.
Beépített metódust nem találtam ennek meghatározására.

1. /path/to/lib/Twig/Environment.php fájlhoz hozzáadjuk a következőt:
Kód:
public function setKey($value)
    {
        $this->loader->setKey($value);

return $this; // Fluence interface
    }

2. /path/to/lib/Twig/Loader/Filesystem.php fájlhoz hozzáadjuk a következőket:
Kód:
protected $key;

    public function setKey($value)
    {
        $this->key = $value;
    }

3. Itt módosítjuk a már meglévő metódust erre:
Kód:
    public function getCacheKey($name)
    {
return $this->findTemplate($name).':'.$this->key;

        // return $this->findTemplate($name);
    }

4. Az Basic API a következő lesz (fluence-t használtunk az egyszerűsítéshez (return $this)):
Kód:
require_once '/path/to/lib/Twig/Autoloader.php';
Twig_Autoloader::register();
$loader = new Twig_Loader_Filesystem('/path/to/templates');
$twig = new Twig_Environment($loader, array(
    'cache' => '/path/to/compilation_cache',
));

$template = $twig->setKey('egyedi_azonosito_az_adott_oldalhoz')->loadTemplate('index.html');

echo $twig->render(array('name' => 'Fabien'));

Az egyedi azonosítót letárolhatjuk adatbázisban vagy előállíthatjuk valamelyik szegmensből vagy a teljes url-ből például, fontos, hogy adott oldalhoz mindig ugyan az a kulcs legyen, így biztosított az egyedi cache tartalom.

Mosolyog
Naplózva
Tupacko
WebPillangó

Adminisztrátor
Törzstag
*****
Nem elérhető Nem elérhető

Hozzászólások: 966


WWW
« Válasz #565 Dátum: 2012. 06. 12. - 07:15:11 »

Remek, ha tesztelt dolog es jol mukodik, akar irhatnal egy vendeg bejegyzest is a WebPillangora, roviden bemutatni a keretrendszert es leirni a te megoldasod a problemara. Biztosan sok fejtorestol megkimelned az utanad kovetkezoket Mosolyog
Naplózva
spier
Tag
**
Nem elérhető Nem elérhető

Hozzászólások: 125


« Válasz #566 Dátum: 2012. 08. 08. - 21:13:01 »

Üdv,

@Tupacko: Rendben, ha lesz időm készítek egy doksit és átküldöm.

Lehet egyszerű a probléma amivel szembe találtam magam de egy hibás variációnál anniyra leragadtam, hogy nem tudok tovább lépni.
3 táblát szeretnék összehozni.
1: arak: id, box_id, tab_id, nev, ar
2: tab: id, box_id, nev
3: box: id, nev

A célom az lenne, hogy a boxok maga az egység ami magában foglalja a többi elemet. Ezt vmi foreach szerkezettel szépen amennyi box van körbejárom, "box" tábla.
A következő cél, hogy minden box tartalmaz tabokat. jQuerys-t tab gondolom nem kell túlságosan részleteznem. Vannak fülek és az alatta lévő tartalom változik a fülre kattintva, "tab" tábla.
Eddig még alapvetően elég könnyű is. Box, benne tab és a tab-nak lehet több füle is. Tartalmat hozzárendelek az adott tab fülhöz és az jelenik meg ha átkattintok.
Viszont minden tab tartalma egy ugyan úgy foreach szerkezetes "arak", ahol egymás alá van feltüntetve a név-ár páros és mind ez a megfelelő box-on belül a megfelelő tab tartalmához rendelve.
Tehát körbe kell járnom az összes box-ot, tab-ot és árakat és mindezeket a megfelelő helyre helyezni.

Ötlet esetleg vkinek? Táblákat össze tudom így kapcsolni, hogy aztán foreach-el végigjárjam? Vagy egymásba ágyazott foreach és tömbbe vele? Esetleg külön tömbbe mind és kiíratásnál adjam a feltételek?

Üdv.
Naplózva
Tupacko
WebPillangó

Adminisztrátor
Törzstag
*****
Nem elérhető Nem elérhető

Hozzászólások: 966


WWW
« Válasz #567 Dátum: 2012. 08. 16. - 21:10:56 »

Szia!

Elso korben arra mutatnek ra, hogy itt a legegyszerubb megoldas egy kis OOP. Szepen leirtad milyen osztalyaid vannak, Box, Tab, Arak. Boxnak lehet tobb Tabja. Tabnak tobb Ara. Valahol a Boxok is vannak, pl. egy Oldalban.

Tehat:

Oldal { Box { Tab { Ar, Ar }, Tab { Ar } }, Box { Tab { Ar } } } stb.

Ami neked kell, hogy kiirasd. No mar most, akkor kell mindenikenk egy-egy metodus, hogy Render, pl. Az oldal azt csinalja, hogy elokesziti  a Boxoknak valo helyet majd vegigmegy minden Box-on es meghivja annak a Renderjet. A Box elokesziti a helyet a Taboknak es meghivja minden Tab Renderjet. Igy tovabb.

OOP nelkul is megoldhato, pl. rekurzivitassal, de OOP-vel az egysegek sokkal jobban korulvonalazodnak.

Igy minden reszlet csak magaert felel es konnyu megoldani, hogy pl. legyenek normal arak es promocios arak, az Oldal, a Box es Tab semmit sem kell tudjon, hogyan kell megmutasson egy KedvezmenyesArat, de tudja o sajat magarol es ez eppen eleg.

Nagyvonalakban:

Kód:
Oldal:
echo '<div class="oldal">'
foreach Box.Render
echo '</div>'

Box:

echo '<div class="box"><ul class="tabok">'
foreach Tab.Render
echo '</ul></div>'

Tab:

echo '<div class="tab"><ul class="arak">'
foreach Ar.Render
echo '</ul></div>'

Ar:

echo '<li class="ar">'
echo {ar tulajdonsagok}
echo '</li>'

KedvezmenyesAr:

echo '<li class="ar kedvezmenyes"><span class="kedvezmenyFigyelemFelhivo">'
echo {ar tulajdonsagok}
echo '</span></li>'

Remelem segitettem! Mosolyog
Naplózva
spier
Tag
**
Nem elérhető Nem elérhető

Hozzászólások: 125


« Válasz #568 Dátum: 2012. 10. 01. - 09:32:32 »

Köszönöm sikerült a dolog.
Kicsit szájhúzós a dolog, hogy még a kimenet előtt generálok valamilyen html szerkezetet egy változóba. Mosolyog Nem nagyon tudom letenni a voksom semminél.

Ahogy egyre több pl. mvc-t - kisebb nagyobb vagy minta, egyéb forráskód - térképezek fel egyre bővül a megoldások száma is adott feladatra. El lehet ezt valahogy dönteni melyik a célszerű? Mindegyik másféle csak a végeredmény hasonlít. Bár ahogy néztem az MVC modell nem sok helyen valósul meg ahogy a nagy könyvben le van írva, már ha van ilyen Mosolyog, mert akárhány leírás annyiféle variáció, ki mikor minek mivel honnan és kizárólag mit adhat át, léphet kapcsolatba. Ez rendben is van, de ha én a modellen kívül akarok használni vagy lekérni adatot, pl beállítások adatbázisból, pl. egy error_reporting-ra vonatkozó beállítást (persze ilyet nem láttam még), akkor azt egyből betöltésnél le kell kérnem nem várhatom meg a különböző részek példányosítását.
Úgy tűnik egy projekt nagysága is meghatározó mennyire lehet tartani különböző patterneket.
Érdekes mennyi megoldás van egy adott problémára, az erőforrások átadása, egy osztályban minden, egy statikus metódusokkal ellátott registry osztályban vagy példányosításkor átadás szépen sorban.
Kipróbáltam az adatbázis kapcsolat csak a modellekre korlátozódjon, hát igen sok fejfájás ha máshol valamit meg kell oldani adatbázisból.
Úgy vettem észre hasznos használni előre megírt minőségi dolgokat, Twig, ORM-ek, Monolog stb.
Naplózva
spier
Tag
**
Nem elérhető Nem elérhető

Hozzászólások: 125


« Válasz #569 Dátum: 2012. 11. 23. - 14:29:50 »

Üdv.

Egyszerű kérdésre nem találom a pontos meghatározást.
A ReflectionClass-ban a newInstance az azonos működést ad mint pl. ha készítek egy getInstance metódust adott osztályba és azon keresztül kommunikálok az osztály példánnyal?

Mosolyog
Naplózva
Tupacko
WebPillangó

Adminisztrátor
Törzstag
*****
Nem elérhető Nem elérhető

Hozzászólások: 966


WWW
« Válasz #570 Dátum: 2013. 01. 06. - 10:09:03 »

Szia!

Bocs a késői válaszért, gondolom eddig már került megoldás. Azért leírom, ahogy én tudom, majd aki olvassa a kérdést, választ is találjon.

A reflection osztályok nagyjábol minden nyelvben arra vannak, hogy dinamikusan, run-time, tudj példányosítani. Ez jó is, meg nem is. Vannak esetek, amikor erre szorítkozol, mert nagyon-nagy flexibilitásra van szükséged. Minden esetre érdemes alaposan megvizsgálni a használat szükségességét, mivel egyrészt nem type-safe (pl. Java-ban és C#-ban), másrészt több időt vesz fel a művelet.

A kérdésedre válaszolva, a ReflectionClass newInstance metódusa, ahogyan azt a neve is kifejezi, egy új példányt, objektumot készít a kapott argumentumok alapján. A getInstance metódust arra szokták használni, hogy megvalósítsák a Singleton pattern-t, amikor csupán egy példányt akarsz az adott osztályból az egész rendszerben.

Üdv
Naplózva
Oldalak: 1 ... 27 28 [29]   Fel
  Nyomtatás  
 
Ugrás: