PHP laborházi (Internet Explorert nem szereti.)
fejlesztés - 2006 március - 19 megfelelő bejegyzés
Jelöld be, hogy főbb mely kategóriákat akarod olvasni, vagy ha csak egyet: kattints a nevére.
Ír az olvasó egy hosszú url-t. Nem szeretjük, mert megtörik, elcseszi a designt, akármi. Szeretnénk, ha a plain text url-ből egy link lenne.
Namost amit nem láttam még máshol, persze ettől még létezhet, hogy ugyan ne az url kerüljön már az
Így fordulhat elő, hogy ha mostantól beírjátok plain textként a hozzászólásotokba pl. azt, hogy
https://blog.haszprus.hu/komment.php?k=2350, akkor erre az fog megjelenni, hogy
Haszprus überblog - Generikus konténer, objektumorientált hozzászólások
A dolog természetesen nemcsak a blogon belüli címekre működik, így pl. elő tudja állítani az alábbi linket is szimplán az url-ből:
keresek a google-ben jóóóól - Google keresés
És lássátok, hogy ez jó, mert az esetek 99%-ában még az [url] bbcode használatát is feleslegessé teszi.
Ha le akarod mérni, tedd be a lapod elejére ezt:
ob_start(); function microtime_float() { list($usec, $sec) = explode(' ', microtime()); return ((float)$usec + (float)$sec); } $time_start = microtime_float();
A végére pedig ezt:
$time_end = microtime_float(); $time = $time_end - $time_start; echo 'Lapgenerálás: ' . $time . 'mp'; ob_end_flush();
Ez a kód azért jó, mert az ob_startnak köszönhetően nem számítja bele az időbe a lap letöltődését. Enélkül amit kapnál, az függne a szabad sávszélességedtől. És az nem lenne jó.
(A kód nagyrészt innen származik, de a dolog értelmét szerintem az ob_start - ob_end_flush kiegészítés adja, anélkül a script helyett szinte a saját sávszélességedet méred.)
Nos van kommentkereső 0.01. Objektumorientáció & smarty rule. Most ezzel akár lehetne blog 2.6 is, de nem lesz
A cucc iszonyatosan prealpha egyébként, olyan értelemben hogy csak egyszavas kereséseket vesz be és nem kezeli rendesen az ékezeteket.
Hogy lehet megmondani a mysql4-nek, hogy ha a halál
szóra keresek, akkor ne adja ki pl. a hálál
-t?
Jesz, thatz true, a bejegyzések smartyból jönnek. A főoldalon, az archívumban, a komment.php-ben. Ja nemcsak ez igaz, hanem hogy bevezettem a Post objektumot, vmint a Posts konténert, persze a Containerből származtatva, de már napok óta, csak eddig békében pihentek a háttérben meghívatlanul.
Ha valami bugzik, szóljatok. Ezek megint nem kicsi változtatások, belül.
Viszont most már 115 sor az egy darab bejegyzéshez tartozó tpl… Igaz, lekezel egy csomó mindent amit eddig az index.php csinált, és kezeli a rövid valamint hosszú bejegyzésformátumot is (előbbire ld. archívum, csak címeket
).
Ismét megköszönöm mindenkinek, akik segítettek a dolgokban. Thx 2 Tamás, nrg, Hedge, mefi, sorry ha valaki kimaradt
Ma 48 komment volt a blogon az enyémeken kívül.
A főoldalon mindig annyi napon írt bejegyzés jelenik meg, ahányat kiválasztasz. Például március 21 van, 4 napot akarsz látni, de 19-20-án nem volt bejegyzés, akkor ezeket a dátumokat fogja megjeleníteni a blog: március 21, 18, 17, 16. Ez azért van, hogy ne kaphass üres főoldalt, mert az kurva hülyén néz ki.
(Ennek a megvalósítása egyébként annyiból áll hogy picit tágabb dátumhatárral hajtom végre a lekérdezést, és abbahagyom a megjelenítést ha már elértem a kellő napszámot. Szvsz nem különösebben erőforrásigényes, hiszen csak néhány plusz row sql-ből, amiknek nagyrésze nem jut el még egy mysql_fetch_array-ig sem.)
Namost ott tartok hogy smartyban már megvan a postok template-je, zsír ugyanúgy néz ki mint az onlyphp megoldás (leszámítva hogy pillanatnyilag elvetettem a kapcsolódó bejegyzések feature-t), de kezdjem a template-ben számolgatni hogy hány napi postot jelenítettem meg eddig? Ez nem a megjelenítési réteg feladata lenne szerintem…
Egyébként nem érzem a Smarty által nyújtott tiszta kódot. Pl. a bejegyzések tpl-je 50 sor, mert tele van mindenféle if-else-ekkel annak megfelelően hogy hány komment érkezett, trustedonly-e a bejegyzés, trusted-e a júzer, adminisztrátor-e a júzer, kategóriák ciklusa, van-e címe a bejegyzésnek, ki kell-e írni a dátumot (vagy már egyszer kiírtuk, amit ráadásul a megjelenítési rétegben kell assignolnom!)… És mindemellett a php-ben kőkeményen megvannak a háttérmunkálatok, smiley-konvertálás, magyar dátumformátum előállítása… Igen, a Smartyban is van valami dátumformátum stuff, de asszem az nem támogatja a hónapnevek szabad alakítását. Vagy igen? Ennek egyrészt utánanézek ha hazajöttem, másrészt ha valaki vágja akkor belökheti, ezzel időt spórolva nekem
Szóval nem érzem azt a tisztább szárazabb érzést amit egy template rendszer elvileg ígér. Túl sokat reméltem a külön megjelenítési rétegtől, vagy valami egyéb okozza a problémát?
A posts.tpl-t el lehet kérni tőlem tanulmányozásra, véleményezésre.
A kommentek (kizárólag maguk a hozzászólások) mostantól Smarty sablonból jelennek meg. Goodbye $comments->showHTML().
Asszem az utóbbi hetekben elég sokat mozdultam előre fejlesztés terén. Ezúton is thx azon személyeknek, akik ebben segítséget, vagy inspirációt nyújtottak
Ha valami bugot tapasztaltok, nyugodtan szóljatok, mert iszonyat sokmindent írtam át mostanság.
Update 14:33: ja tképpen a smarty bevezetése elég jelentős újítás, úgyhogy ez már a blog 2.5, miközben a 2.4-be kitűzött változtatásokat (oo) még be se fejeztem
Smarty megismerve. És csináltam is egy tesztlapot ahol a kommenteket már gyönyörűségesen az oo cuccaimból nyerem ki (két új getArray fv befigyelt), és smartyval formázom meg Nem publikus mert nem fejeztem be és mosmá megyek slp.
Update 12:34: hát nem tudom, vegyes érzelmeim vannak a smartyval kapcsolatban. Jobban mondva elég negatívak. Mert a kommentek megjelenítésének a kódja rondább lett, mint php-ben. Legalábbis az én szememnek. Meg a dreamweaverének is, mert egy helyen bele is zavarodott a színezésbe.
Azt jól érzékelem, hogy nem tudok olyan értéket assignolni egy változóhoz, amiben egyenlőségjel van? {assign var=...
value=...
}
class Container { var $elements var $pointer var $length function Container() function addElement($element) function length() function getElement($i) function getLastElement() function getFirstElement() function getNextElement() function removeElement() function setPointer($i) function forAll($function) } class Comments extends Container { var $picOfUser function Comments() function getCommentsByPostId($post_id, $order, $from, $to) function showHTML() } class Comment { var $row function Comment($row) function showHTML() }
A hajnal óta elkövetett változtatásokat jelöltem. Logikusan a showHTML mellé kerülni fog egy-egy showRSS function.
ha igazán OO akarsz lenni, akkor egy komment egy class, aztán csinálsz egy generikus container vagy lista class-t, és származtatsz belőle egy olyan class-t, amely csak kommenteket tartalmazhat
Tamás - Obi kérdés
Megvalósítva mindhárom (
Preview Release 1) A megjelenítést még nem írtam meg szépre, de ott már csak néhány változót kell lecserélni. Ami eddig kész:
class Container { var $elements var $pointer var $length function Container() function addElement($element) function length() function getElement($i) function getNextElement() function removeElement() function setPointer($i) } class Comments extends Container { function Comments() function getCommentsByPostId($post_id) function show() } class Comment { var $row function Comment($row) function show() }
Ez utóbbi show() még tiszta bug, értelemszerűen.
Igazából azért nincs a blogon olyan feature, hogy kiküldjük az elfelejtett jelszavadat, mert… nos ilyen nyilván nincs, mert a jelszavadat nem tároljuk, csak egy md5 hasht. Ha nem tudod mi az, de érdekel, akkor annyit elég tudnod, hogy ez egy olyan karaktersorozat amiből a jelszavad nem található ki, viszont ez bármikor származtatható a jelszavadból.
Lehetne viszont ugye új jelszót generáló cucc. Többlépcsős, hogy ne változtatgathassa mindenki mindenkinek a jelszavát. (Vagyis a kiküldött emailben még csak egy link vagy valami hasonló lenne, aminek a hatására változik meg a jelszó. Vagy amivel megváltoztathatja a júzer a jelszót. Ez részletkérdés.)
Egy dolgot nagyon utálok ezekben a dolgokban, éspedig azt, hogy lehet hogy nem emlékszem a felhasználói nevemre, lehet hogy nem emlékszem a megadott email címemre, és ez utóbbi eset elég kellemetlen tud lenni, ha azt a címet már nem is használom. Kiírni meg nem írhatjuk ki, hogy hova lett elküldve a levél, hiszen az privacy-sértő lenne.
Na mindegy, mindezen problémák ellenére valamikor csinálok egy fent vázolt, többlépcsős, elfelejtett jelszó esetén alkalmazható tréfát.
Update 20:35: Megszületett a megoldás: elfelejtetted a jelszavad?
PHP-levlistáról egy gyöngyszem:
IRCQuote fight! In the ring:
Q | Hogy lehetne előrébb kerülni a google találati listában? egyik ügyfelem ezt kéri tőlem... technikai megvalósítás érdekelne... |
A | van PHP ugye? set_google_pos($pos, $keyword); |
LOL
Milyen classt csináljak a kommentekhez? Class Comments, vagy Class Comment? Azaz minden egyes komment legyen egy class, vagy a komment.php alján
található kommentlista legyen egy class?
Ezen filózok jóideje és nem tudom eldönteni. Experts, help plz.
nemtok aludni bazer

Shamalt sajnos ehhez már túl öreg, de ha nem maradt volna le róla, akkor így indulna a Születésnapos dumagépek doboz, a szemléltetés kedvéért.
Ez a feature csak a nagyobb topicokban és a megfigyelőközpontban fog titeket rettegésben tartani.
A doboz mögött egyébként egy osztály, némi adatbázis, egy html fájl, és egy csodaszép 13 soros sql lekérdezés áll. Beágyazott lekérdezések rule! Istenem, mennyire jó hogy mysql verziót váltottunk + szglab5 rulez da world, akármekkora szopatás is!
select u_id, u_pubnick, round(fage) as age, comment_count from ( select u_id, u_pubnick, u_regged, u_lastload, (to_days(now()) - to_days(u_regged))/365 as fage, count(k_id) as comment_count from hb_users, hb_komment where to_days(now()) - to_days(u_regged) between 355 and 370 and k_uid = u_id group by k_uid ) as subquery where to_days(now()) - to_days(u_lastload) < 365 or comment_count >= 2 order by age desc
Egész biztos vagyok benne, hogy a fenti sql query több érdeklődő olvasómnak is rejteget újdonságokat, ezért remélem nem haragusztok, hogy beidéztem

Objektum-orientált PHP (I'm lovin' it), MySQL 4 (I'm lovin' it, too) és némi egyéb strukturális változtatás (which I'm also lovin') miatt: Haszprus überblog 2.4. A verzió a későbbiek folytán fog kiteljesedni mivel nyilván nem cseréltem le mindent egy hét alatt.
Egyelőre jelentkeztem (márc 18), de még erősen mérlegelési stádiumban van a dolog. (20-án ugye számelm szig, 24-én digit szig, és még ha valamit kihagyok, akkor is van elég teendőm.)
Update 16:10: nem, nem jövök, azt hiszem az egész hetemet inkább rászánom a hétfői számelm szigorlatra, mivel csak most kezdek neki.
Update 2006. már. 15. 16:05: no ezt lemondtam, nincs kedvem.
OBJEKTUMOK VAGYTOK!

Igen. Ezt egy rendkívül advanced - 15 soros, ha érdekel valakit - mysql lekérdezés valósítja meg, aminek módját néhány napja az szglab5 adatbázisok jegyzetének sql fejezetéből merítettem. Nem utolsó sorban azért csak most, mert csak most vált lehetővé ezen sql elemek használata a szerveren (tudtommal). Emeletes csúcskirály. Fejlődünk
A lekérdezés csak akkor megy végbe, ha a bejegyzés úgy tudja magáról, hogy vannak hozzá kötődő egyéb bejegyzések. Máskülönben kicsit necces lenne.
Egyébként az sql fejezetet roppant hasznosnak és jónak (!) találtam.
Update 23:44: valószínűleg valamit majd optimalizálok ezen a témán. A lekérdezés jó, de az adatbázis-hátteret kicsit átszervezem, a 15 pedig egy másik funcionbe költözik, és helyébe kevesebb fog kerülni. Vagy mindebből semmi se lesz, hiszen ilyen kapcsolódó bejegyzéses dobozkákból se lesz sok.
Update 2006. már. 04. 16:04: átírva, másképp működik.
Vannak bizonyos stílusú hozzászólások, amiket nem szívesen olvasgatok. Első fázisban megjelentek a várakoztatott kommentek. Második fázisban a film-bejegyzésekhez már nem lehetett regisztrálatlanul hozzászólni (legalábbis első ránézésre). Kénytelen vagyok azonban egy harmadik fázist is létrehozni, mert úgy látszik a Pillangóhatás tévé-beli szereplése ide vonzotta a site-omra a magyar internet sötét söpredékét, akiknek azért arra mégis futotta, hogy másik topicban írják le véleményüket
, illetve magukat.
Badwords lista
- a harmadik fázis. Működése: ha a bejelentkezetlen felhasználók hozzászólásában legalább három szalonképtelen szót talál a script, a hozzászólás nem waiting, hanem deleted státuszba megy, anélkül hogy értesülnék róla. Mert egyszerűen nem akarok ilyen szennyet olvasgatni, nem véletlenül nem lehet - látszólag - a filmekhez hozzászólni regisztrálatlanul.