Link-urile săptămânii 5-11 septembrie

Am fost o săptămână foarte… productivă, din toate punctele de vedere, inclusiv link-urile strânse. Enjoy!

  1. Keymaster.js este o modalitate foarte simplă de a defini diverse shortcuts în JavaScript.
  2. Improving HTML5 Canvas Performance.
  3. A Developer’s Guide to HTML5 Canvas.
  4. Making the Transition to HTML5.
  5. Don’t Style Headings Using HTML5 Sections.
  6. The ridiculous case of adding a script element.
  7. Using jQuery’s Data APIs.
  8. jQuery Mobile Beta 3 released. Chiar dacă nu sunt fan (am încercat să folosesc jqm la un proiect și am constatat că este ok cât timp nu vrei să customizezi nimic), nu pot decât să mă bucur că a apărut beta3. Mai ales că se anunță chestii cool în viitorul apropiat (citește și comentariile).
  9. Mobile Design & Development.
  10. Debunking PHP’s bad reputation.
  11. Top 10 MySQL Mistakes Made By PHP Developers.
  12. MySQL caching methods and tips.
  13. Deploying node.js on Amazon EC2.
  14. The Evolution of the Web.
  15. Underscores vs. dashes in URLs. Long story short: use dashes!
  16. The Science Behind A/B Testing.
  17. How GitHub Works.
  18. Git Is Simpler Than You Think.
  19. Why work doesn’t happen at work?
  20. Getting Started With The PayPal API.
  21. Debugging with audio.
  22. Textmate to VIM. Dacă te-ai săturat să aștepți Textmate 2 și nu vrei să încerci Sublime Text, iată că poți folosi cel mai tare editor al anilor 70.

Custom fields (CF) sunt o modalitate excelentă de a realiza lucruri mărețe și de a ajunge pe nebănuite culmi ale gloriei personale. Ok, poate nici chiar așa, dar… Pe acolo.

Cu toate astea, WordPress nu oferă prea multe funcții utile pentru CF. Avem câteva funcții meta-related, dar toate funcțiile sunt prea… generice. Să zicem că faci un sistem de filtrare – cum fac eu – și pui totul în CF (pentru că vrei să faci o… filtrare un pic mai târziu). Tot ce are legătură cu filtrele respective pui la modul _custom_filters_NUME_FILTRU. (dacă primul caracter este underscore, custom field-ul nu este afișat în admin)

Cum poți lua CF ce încep cu _custom_filters?

Varianta cu funcțiile WordPress (documentate)

Luăm toate CF pentru postul curent, facem un foreach, verificăm dacă prefixul este cel dorit și ne facem treaba.

$prefix = '_custom_filters';
$custom_fields = get_post_custom($post_id);
foreach( $custom_fields as $custom_field ){
	if( substr( $custom_field, 0, strlen($prefix) ) == $prefix ){
		// do some awesome thing with my custom field code
	}
}

Varianta geek-ish

Facem un query în baza de date și luăm fix ce ne trebuie.

function get_my_post_meta( $post_id = null, $meta_prefix = '' ){
	if( !isset( $post_id ) ){ return; }
	global $wpdb;
	return $wpdb->get_results( $wpdb->prepare("
	SELECT meta_key, meta_value, meta_id, post_id
		FROM $wpdb->postmeta
		WHERE
			post_id = %d AND
			meta_key LIKE %s
		ORDER BY meta_key, meta_id", $post_id, $meta_prefix.'%') );
} // get_my_post_meta

$custom_fields = get_my_post_meta( $post_id, '_custom_filters' );
foreach( $custom_fields as $custom_field ){
		// do some awesome thing with my custom field code
}
Atenție!

Această funcție NU folosește caching. Ceea ce înseamnă că ar ptea avea efecte… nedorite în cazul unui site cu mulți utiilzatori.
Nu am prezentat o metodă de cacheing deoarece eu am avut nevoie de această funcție strict pe partea de administrare. Dacă ai nevoie de o astfel de funcție pe partea de client, caută mai multe detalii aici sau lasă un comentariu la acest post.

„Repararea” codului prea lăbărțat

Fie din cauza unei setări stupide de line ending pe care nu știu eu să o fac, fie din cauza setărilor stupide a celor ce lucrează direct pe server, fie pur și simplu din cauza unui client de ftp, codul tău frumos formatat poate ajunge să arate cam așa:

function remove_menus () {

	global $menu;

	$restricted = array( 'Posts', 'Media', 'Links', 'Comments' );

	end ( $menu );

	while ( prev($menu) ){

		$value = explode( ' ',$menu[key($menu)][0] );

		if( in_array( $value[0] != NULL?$value[0]:"" , $restricted ) ){

			unset( $menu[key($menu)] );

		}

	}

}

add_action('admin_menu', 'remove_menus');

(btw, funcția asta șterge anumite elemente din meniul de admin al WordPress)

Cum scapi de spatiile extra? Dacă ai extrem de mult timp liber, poți șterge fiecare spațiu, de mână. Dar ce faci dacă ai un fișier cu mii de linii? Chiar ești dispus să pierzi o zi pentru a formata codul?

REGEX!

Expresiile regulate (Regex) sunt o invenție super tare ce îți permit să faci operațiuni într-un text pe baza unui pattern (șablon sună mult prea… ciudat). Pattern-ul nostru este reprezentat de două „enter” (unul legitim și unul inserat abuziv de setarea tâmpă de care am pomenit mai sus).

Expresiile regulate au anumite „scurtături” pentru caractere invizibile. Căci un rând nou este reprezentat de (cel puțin) un caracter. Și, în funcție de setările editorului tău, un rând nou poate fi reprezentat fie de CR, fie de LF, fie de ambele (CRLF). Ambele denumiri venind din epoca mașinilor de scris (Cariage Return respectiv Line Feed).

În limbajul Regex, asta se traduce prin \r, \n, respectiv \r\n (sau \n\r)

Știm CE să căutăm. CUM căutăm?

Majoritatea (toate?) editoarelor de cod au o funcție ce-ți permite să cauți (și să înlocuiești) pe baza minunăției sus-numite.

Prin urmare, cauți în cod după două linii noi – \n\n – și înlocuiești cu o singură linie – \n. În funcție de line-ending-ul din editorul tău de suflet, s-ar putea să fie nevoie să înlocuiești \n fie cu \r fie cu \r\n.

Apeși pe „Replace All” (sau echivalentul din editorul tău) și… Gata. Ai un cod frumos formatat:

function remove_menus () {
	global $menu;
	$restricted = array( 'Posts', 'Media', 'Links', 'Comments' );
	end ( $menu );
	while ( prev($menu) ){
		$value = explode( ' ',$menu[key($menu)][0] );
		if( in_array( $value[0] != NULL?$value[0]:"" , $restricted ) ){
			unset( $menu[key($menu)] );
		}
	}
}
add_action('admin_menu', 'remove_menus');

Quick tip

În loc de \n\n poți folosi și \n{2,2}. În Regex, {x,y} se numește interval și poți defini câte caractere să caute (minim/maxim). Omiterea celui de-al doilea parametru înseamnă că nu există limită superioară. De exemplu, o căutare de genul \n{2,} va căuta cel puțin două rânduri noi consecutive.

Foarte util în cazul în care vrei să „cureți” un document care a fost formatat aiurea de la început.

windows apple dropbox facebook twitter