CakePHP v1.2.5 ir v1.3.0 alpha greičio bei atminties palyginimas
Atlikau nedidelį testą, kaip skiriasi greitis bei atminties vartojimas CakePHP v1.2.5 ir v1.3.0 versijose:
Greitis, debug rėžimas:
v1.2.5 ~0.228s
v1.3.0 ~0.168s (35% greičiau)
Atmintis, debug rėžimas:
v1.2.5 ~8.4MB
v1.3.0 ~7.2MB (17% mažiau)
v1.2.5 ~7,1MB
v1.3.0 ~6,1MB (16% mažiau)
Rezultatai iš tiesų neblogi.
Wordpress temu antraštės CakePHP aplikacijoje
Jeigu kam prireiktų CakePHP aplikacijoje ištraukti iš Wordpress naujausias temas, sprendimas labai paprastas.
Sukuriam Modelį “Blog”:
/app/model/blog.php
-
<?php
-
class Blog extends AppModel {
-
-
var $name = 'Blog';
-
var $useDbConfig = 'blog';
-
var $useTable = 'wp_posts';
-
-
function getTitles() {
-
$filter = array(
-
'limit' => 2,
-
'conditions' => array(
-
'post_status' => 'publish',
-
'post_type' => 'post'
-
),
-
'order' => 'post_date desc'
-
);
-
return $this->find('all', $filter);
-
}
-
}
-
?>
bei duomenų bazių konfigūracijoje:
/app/config/database.php
-
var $blog = array(
-
'driver' => 'mysql',
-
'persistent' => false,
-
'encoding' => 'utf8',
-
'host' => 'localhost',
-
'login' => '',
-
'password' => '',
-
'database' => 'autoz_wp',
-
'prefix' => '',
-
);
ir belieka kontroleryje iškviesti:
-
$news = ClassRegistry::init('Blog')->getTitles();
Bandom kurti lietuvišką CakePHP bendruomenę
Senai jau norėjau kažką panašaus sukurti, bet pagalvojau, jog visai gražu kad ta bendruomenė kurtųsi CakePHP karkso pagalba. O būtent šiandien Miles Johnson pristatė forumo beta versiją Cupcake. tad nieko nelaukęs įdiegiau http://forum.webdunulis.lt adresu. Tiesa, iš karto susidūriau su keliomis klaidomis, tačiau pradėt naudot sistemą iš esmės galima.
Nežinau kiek tiksliai čia pas mus yra šio karkaso mėgėjų, bet visus kviečiu užsukti, spręsti iškilusius klausimus, ieškoti patarimų ir t.t. Manau pradžioj bendro forumo užteks, vėliau priklausomai nuo diskusijų skirstysim į atskiras kategorijas.
Nauja web aplikacija kodiniu pavadinimu – devCRM
Įmonėje atsiradus daugiau klientų, bei bendravimo su jais, atsirado poreikis visa tai kažkur užsirašinėti. Trumpai peržvelgus esamas nemokamas CRM sistemas, nei viena nepatiko. Sunkios, prigrūstos visko, grafinės sąsajos nemielos akiai.
Tuomet pagalvojau, gal ką pačiam greit pasirašyti ir tą mintį pavadinau devCRM. Po kelių valandų jau turėjau kliento, su juo susijusios veiklos bei komentarų įvedimą/redagavimą/trynimą. Iš pradžių be jokių prisijungimų, ACL taisyklių ir pan, kadangi naudosiuosi vienas darbo vietoje. Svarbiausia jau galima dirbi su klientais:
Sistema paprasta – įvedamas klientas, kuriam galima rašyti komentarus bei veiklą. Veikla – tai visas bendravimas su klientu, nutarimai ir t.t. Tai taip pat atlieka dalinai ir užduočių funkciją tiek sau, tiek klientui, kadangi turi 3 tipus:
- Laukiama
- Gauta
- Informacija
Imkim kaip pavyzdį – kuriate interneto svetainę klientui ir jis jums turi pateikti tam tikrą informaciją. Tokiu atveju prirašai jog lauki tekstų ir uždedi tipą “laukiama”, o gavus reikiama informacija pažymi “gauta”, taip aiškiai užfiksuojamas laiko tarpas. Tai padeda lengviau apskaičiuoti laiko terminus, kada laikas vilkinamas kliento kalte. Taip pat nuėjus į visų veiklų sąrašą, klientą galima paraginti, kad nėra gauta duomenų. Taip pat, kai įvedi informaciją apie sutarimus, visą bendravimą, tada nekyla klausimų po kiek laiko. Atsidarai klientą ir matai visą istoriją.
Dar kiek patobulinus ir patvarkius kodą, įdėsiu source’ą čia.
Interviu su Nate Abele apie laukiamą Cake3
Kadangi informacijos apie taip laukiamą Cake3 praktiškai nėra, šis interviu dar labiau sužadina smalsumą, kaip atrodys tas naujas, perrašytas karkasas.
Savo ruoštu aš pristatau tik keletą išsakytų teiginių:
- Cakephp 2.0 bus greitesnė ~25%
- Cake3 bus pilnai perrašytas kodas PHP 5.3 versijai
- Perėjimas nuo 1.x į 2.0 nebus skausmingas. Nebent bus kelios panaikintos funkcijos, tačiau apie tai bus parašytas perėjimo gidas.
- Cake3 eina link pilno ActiveRecord palaikymo
- Visas branduolys bus suskirstytas paketais. iš to išplaukia nemažai pliusų: jais bus galima panaudoti ir kituose karkasuose, “plugin” architektūra taps dar paprastesnė ir t.t.
- Cake3 panaudos: Closures, Namespaces
Jeigu domitės CakePHP, interviu nėra ilgas, perskaitykit. Daug ko čia dar nepaminėjau.
CakePHP karkaso ateitis trumpai

Ne per seniausiai užmačiau, kad jau išleistas viešai cake3 source’as. Kuriamas naujausios PHP v5.3 pagrindu. Iš trumpo aprašymo matyt kad bus praktiškai iš esmės perrašytas karkasas.
Bet anksčiau sulauksim CakePHP2, nuo šios versijos jau bus atsisakytas PHP4 palaikymas. Pagrindiniai uždaviniai:
- PHP 5/6 only support
- Change Model::tableId to Model::primaryKey
- Fix Bake and ACL CLI scripts, and let’s not forget to generate unit test files this time, too
- Inflector: support for custom rules
- Allow Cake apps to be independent of the Cake install directory
- Degradable Ajax, with support for Bookmarking and the Back button
- Planned ACL updates
- datasource: http://www.w3.org/TR/wsdl
- Add a PDO driver
- Change Models to return object instances instead of arrays
- Validation class, with auto length and type based on db field
- Enable field whitelist for Model::save( ) – http://groups.google.com/group/cake-php/browse_thread/thread/3ce2bc624d335b9/9ae1f14d5b74cce8?q=&rnum=6#9ae1f14d5b74cce8
- Session flashing needs some help, maybe the ability to specify layouts/parameters?
- Consider auto-generating hasMany and belongsTo relationships by comparing foreign keys to loaded models. This might also be the place to implement something db-specific, like reading InnoDB relationships.
- Query caching
- Change Component to a base class instead of a loader/singleton, and have components extend Component.
- Make Router a singleton
- Write an LDAP DataSource, and an ACL interface to it
- Create a formalized way to extend Cake at the bootstrap level, and a basics function for loading these extensions (Extensions?)
- Rewrite NeatArray and NeatString as Array and String, and actually add some handy methods/make it possible to call some stuff statically
- Enable global loading of JavaScript libraries in /cake_core/vendors/js
- Correct 2 files from Changeset [2643] (cake/config/tags.ini.php and cake/libs/view/helpers/html.php)
Žinoma, bus dar ir CakePHP v1.3, tačiau kiek teko girdėti, kažkokių kardinalių pakeitimų nebus. Tiesiog esamos 1.2 tobulinimas.
Nemokama knyga “Super Awesome Advanced CakePHP Tips” PDF formatu
Vakar Matt iš PseudoCoder išleido trumpą pdf knygą “Super Awesome Advanced CakePHP Tips” visiškai nemokamai. Trumpai peržvelgsiu, ką naudingo joje galima rasti:
- Trumpą paaiškinimą apie Containable Behavior naudingumą
- Funkcijos find perdarymą savo aplikacijos reikmėms (kaip pvz $Model->find(’latest’) ar $Model->find(’tag’, array(’php’, ‘cakephp’)), iš ties patogu!)
- Prisijungusio vartotojo informacijos gavimas bet kurioje MVC dalyje (Model, View ar Controller) per User::get(’id’)
- Automatinis vartotojo veiksmų sekimas (pvz kas ir kada sukūrė ar redagavo puslapio informaciją)
- Unit Testing
- Funkcijų add/edit sujungimas į vieną (tiek Controller, tiek View dalyse)
- Paprastas sprendimas SEO nuorodoms
- JQuery naudojimas vietoj Prototype ir script.aculo.us
- Aplikacijos optimizavimas
- Bei keletas naudingų patarimų
Šią knygą sudaro vos 64 puslapiai, viskas konkrečiai ir aiškiai aprašyta. Labai rekomenduoju perskaityt.
Rodyti/Paslėpti teksto turinį Ajax pagalba
Kartais prireikia tam tikrų informacinių blokų paslėpimo/rodymo funkcijos (kaip pvz didelės kategorizuotos registracijos formos, kur užpildyti laukus neprivaloma). Toks būdas sutaupo nemažai vietos vertikaliai.
Pirmiausia reikės prototype bibliotekos, parsiunčiam į /webroot/js/ katalogą. Toliau aplikacijos kontroleryje (Controller) nurodome JavascriptHelper’io biblioteką:
-
var $helpers = array('Html', 'Form', 'Javascript');
Belieka tik šablone (View) įterpti šį kodą:
-
<?php
-
// įterpiama prototype biblioteka
-
echo $javascript->link('prototype');
-
-
// nuoroda, kuri paslepia/parodo turinį
-
echo $html->link('Rodyti/Paslėpti','#', array('onclick' => "Element.toggle('content');")); ?>
-
?>
-
-
<div id="content" style="display: none;">
-
Tekstas
-
</div>
Užklausos į duomenų bazę cache’avimas
Lygiai su tokia problema ir man teko susidurti, kaip šio rašinio autoriui. Kada užkešuoti kontrolerio funkciją neužtenka, nes ji gražina du ar daugiau skirtingus duomenų kiekius. Šis sprendimas leidžia kešuoti kiekvieną užklausimą į duomenų bazę atskirai:
-
// Cache query to /tmp/cache/sql/model-test_sql_query
-
$results = $this->Model->find('all', array(
-
'cache' => 'test_sql_query'
-
));
-
-
// Cache query to /tmp/cache/sql/model-another_query that expires in 24 hours
-
$results = $this->Model->find('all', array(
-
'cache' => array('another_query', '+24 hours')
-
));
Visa dokumentacija bei kodas – milesj.me
Wordpress ir CakePHP draugija
Jeigu esate sukūrę aplikaciją CakePHP karkasų, tačiau reikia įdiegti ir Wordpress blogą kaip pvz www.example.com/blog/ adresu, šis sprendimas .htaccess pagalba jums padės:
-
RewriteEngine on
-
RedirectMatch temp ^/blog/wp-admin$ http://www.example.com/blog/wp-admin/
-
RewriteRule blog$ /blog/ [L]
-
RewriteRule blog/wp-admin$ /blog/wp-admin/ [L]
-
RewriteRule ^$ app/webroot/ [L]
-
RewriteRule (.*) app/webroot/$1 [L]
Šaltinis: sebgalarneau.com

2009.12.04





