ACF Field – MetaField

Folosesc ACF cred că de mai bine de un an. L-am descoperit accidental în site-ul unui client iar prima reacție a fost „meh, ce porcărie!” dar după doar câteva ore îmi schimbasem părerea complet. Sigur, are câteva probleme, cea mai mare fiind că poți ajunge rapid la niște monstruozități incredibil de greu de administrat (multe câmpuri, multe condiții șamd) fără a putea reutiliza elemente.

Prin urmare, am făcut următoarea chestie: un meta field ce generează field-uri ce pot fi folosite în advanced custom fields. Sună complicat, nu?

Nu este. Utilitarul este aici iar în admin arată așa:

2014-08-19@15_22

Care-i șmecheria? Care-i avantajul? Poți ajunge la rezultate de genul ăsta:

2014-08-19@19_01

Adică grupezi câteva field-uri, putând să le ordonezi lejer.

Simplu, nu? :)

DevForum.ro

Sunt, de ceva timp, activ pe Comunitatea Dezvoltatorilor Web. Dar pentru că sunt câteva neajunsuri (căutare ineficientă, lipsa unei minime organizări a conținutului, fiecare utilizator trebuie aprobat, nu există nici un fel de formatare a textului sau de a face highlight la cod șamd), am decis să instalez un forum: devforum.ro în care dezvoltatorii (web și nu numai) să poată discuta.

Am făcut câteva categorii, am încercat să pornesc câteva discuții etc.

Să vedem ce iese :)

Chestii tehnice:
Instalat pe o instanță DigitalOcean din două motive: pentru că am tot auzit de ei eram curios cum se comportă și pentru că versiunea de Ubuntu oferită de MXHost era ceva mai veche decât cerea Discourse. Nu am avut prea mult timp de pierdut pentru update & co, prin urmare am luat o instanță de test.

Instalarea Discourse este extrem, dar extrem de simplă, cu pașii foarte bine stabiliți și explicați. A durat mai mult descărcarea pachetelor decât instalarea propriu zisă.

Structura unui proiect

De când am început să scriu cod am avut probleme în a avea o structură cât de cât OK pentru toate directoarele și fișierele folosite:

Prima dată am abordat o metodă extrem de simplă: toate în rădăcina proiectului: un fișier CSS, un folder images și un folder js. Asta a mers ceva timp, dar imediat ce au început să vină proiectele ceva mai complexe am ajuns la concluzia că nu se pretează: există mai multe fișiere CSS. Există plugin-uri ce au imagini și/sau fișiere CSS, iar a le pune în rădăcină ar fi însemnat multe foldere inutile.

A doua metodă, folosită intens la câteva proiecte lucrate în echipe ceva mai mari, a fost să pun totul într-un folder numit, assets: css, js, images. Problema plugin-urilor am rezolvat-o foarte simplu, inspirându-mă din diverse frameworks: un folder vendor (e.g. vendor/lightbox).

Această metodă a funcționat foarte bine până când a trebuit să folosesc trei chestii noi: SASS, concatenare și minify pentru Javascript: unde puneam sursele SASS? Unde puneam CSS-ul generat? Unde puneam JS-ul minificat?

Prin urmare, a apărut metoda nr. 3 (folosită de aproximativ doi ani): Avem în continuare un folder assets dar în interiorul acestui director avem alte două foldere: src și dist.

  +---dist
  |   +---images
  |   +---javascripts
  |   +---stylesheets
  \---src
      +---images
      |   \---sprites
      +---javascripts
      +---stylesheets
      |   +---responsive-small
      |   +---screen
      |   |   +---components
      |   |   \---layout
      |   \---utils
      |       \---mixins
      \---vendor
          \---bower_components

Reguli:

  1. Tot ce este în directorul dist este generat de Grunt. Orice se editează manual în acest director se pierde.
  2. Nimic din ce este în directorul src nu va fi folosit în producție sau la altceva decât la generarea fișierelor cu Grunt.
  3. Prin urmare, folderul src poate fi șters (sau se poate bloca accesul prin .htaccess) în producție.
  4. Directorul vendor este ignorat în VCS, conținutul său fiind generat fie de bower, fie de submodule Git.

Pentru a începe un proiect mai rapid, am modificat baseproject astfel încât să-mi genereze fișierele cu care pot începe treaba și l-am împărțit în două:

  1. Grunt-WP
  2. Assets (ce este folosit ca submodul)

Modului Assets este un exemplu de structurare a fișierelor, cu un Gruntfile și un package.json; în cazul în care ai nevoie doar de acest modul, trebuie să editezi assets.json și să înlocuiești {%= name %} cu numele unui folder existent.