Unul dintre cele mai frustrante lucruri pe care trebuie trebuia să le fac era să includ toate clasele în functions.php (sau, dacă scriam un plugin, în plugin.php). Doar că… se poate și altfel, folosind Composer.

Instalarea Composer

În funcție de cum tratezi proiectul, poți instala composer ori în directorul temei, ori în wp-content. În terminal va trebui doar să scrii composer init și să urmezi pașii. Nu este nevoie să alegi nici un pachet în acest moment, ci doar să ai un composer.json în rădăcina proiectului. După ce ai terminat toți pașii, este nevoie să rulezi și composer install.

Acum, din functions.php va trebui să incluzi vendor/autoload.php. Dacă ai ales instalarea în wp-content, va trebui să îl incluzi așa:

require_once( WP_CONTENT_DIR . '/vendor/autoload.php' );

Dacă îl incluzi din directorul temei, va trebui să-l incluzi așa:

require_once( 'vendor/autoload.php' );

Autoload

Pentru a avea un autoload funcțional, va trebui să mai adaugi ceva în composer.json:

  "autoload": {
    "psr-0": {
      "foo\\": "includes/",
      "bar\\": "includes/"
    }
  }

De asemenea, va trebui să urmezi câteva reguli foarte simple:

  1. Un fișier va conține o singură clasă, indiferent cât de mică e clasa (și ar trebui să fie mică! Ba chiar mai mică de atât!);
  2. Numele fiecărui fișier trebuie să fie același cu numele clasei;
  3. Numele clasei va trebui scris folosind CamelCase (și nu snake_case);
  4. Fiecare clasă va folosi Namespaces;
  5. Fiecare clasă va trebui să urmeze același format și în namespace și în file system
  6. După adăugarea/ștergerea unui namespace nou în composer.json va trebui să rulezi composer install

Scurt exemplu

<?php 
// includes\foo\AutoloadedClass.php
namespace foo;
class AutoloadedClass {}
?>
<?php 
// includes\bar\baz\AutoloadedClass.php
namespace bar\baz;
class AutoloadedClass {}
?>

Din functions.php (și cam de oriunde din temă de fapt), voi putea rula new foo\AutoloadedClass fără a fi nevoie să fac vreun alt require decât cel menționat mai sus.

Devforum.ro – după două luni

Wow, deja au trecut două luni de la lansare! Ce s-a întâmplat în tot acest timp? Păi, punctual, avem așa:

  • 40.000 pageviews, 5700 unici, bounce rate 3.66%;
  • Peste 200 utilizatori înregistrați, din care 150 activi
  • 440 subiecte de discuții
  • 3000 răspunsuri
  • 2000 like-uri (nu de facebook ci interne, specifice platformei)

Costuri?

Costul total este de 12$/lună (VPS la DigitalOcean + Amazon S3).

Mulțumesc tuturor celor care iau parte la discuții și îi invit și restul să participe!

O setare buclucașă

De la o vreme am observat că Chrome face niște fițe cel puțin dubioase: nu își aduce aminte ce tab-uri închid (și după un restart îmi deschide tab-uri închise în urmă cu câteva ore), TweetDeck nu se deschide uneori decât după fix două încercări șamd. Am observat acest comportament relativ recent, după ce am instalat câteva extensii: Backbone Debugger și Chrome Apps & Extensions Developer Tool. Deci clar asta este problema! Doar că nu e.

Din când în când mai umblu pe la chrome://flags. Iar una din setări este Enable fast tab/window close (Enables fast tab/window closing – runs a tab’s onunload js handler independently of the GUI). Dacă este fast sigur e de bine. Și nu are ce să meargă greșit, nu?

Ei bine, nu. Aparent, asta poate avea și efecte nedorite ce se manifestă mult după activarea acestei setări, motiv pentru care nici nu am făcut legătura decât după ce am dezactivat (și apoi șters!) toate extensiile!

Mă bucur totuși că nu sunt singurul cu problema asta.