Arhive categorie: Uncategorized

Creeaza primul tau plugin WordPress

Plugin-urile WordPress sunt scripturi care au rolul de a modifica site-ul tau. Aceste schimbari se refera de la cele mai simple care modifica mici parti din header pana la cele mai complicate care declanseaza trimiterea email-urilor, etc.

Diferenta dintre o tema WordPress si un plugin WordPress este ca tema este folosita pentru a schimba aspectul site-ului web in timp ce plugin-urile au rolul de a schimba modul de functionare.

Primul plugin

Un prim pas in realizarea unui plugin este crearea unui folder, urmand alcatuirea unui singur fisier cu o singura linie de continut. Acest lucru il poti efectua in folderul wp-content/plugins in care vei crea un nou folder care se poate numi, de exemplu greatplugin. In acest folder, alcatuieste un fisier numit greatplugin.php. Ca si un pas urmator e necesar sa deschizi fisierul intr-un editor de text in care sa lipesti urmatoarea informatie:

<?php    
/*    
Plugin Name: Pluginul meu cool    
Plugin URI: http://pluginul-meu-cool.ro    
Description: Descriere plugin cool    
Version: 1.0    Author: Sandor Kovacs    
Author URI: https://www.sandorkovacs.ro    
License: GPL2    
*/ 
?>

Daca intentionezi sa distribui plugin-ul tau, e important de retinut ca ar fi bine sa adaugi cat mai multe date posibile, dar daca nu, numele plugin-ului este de ajuns.

Acum, iti poti activa plugin-ul din back-end, desi momentan nu face nimic.

Structura plugin-ului

In cazul in care plugin-ul tau se adreseaza in special unei clase principale, pune aceea clasa in fisierul principal al plugin-ului, iar pentru alte functionalitati adauga fisiere diferite. Daca plugin-ul tau dezvolta partea de back end a WordPress-ului avand comenzi personlizate, poti creea fisierele JavaScript si CSS pentru a stoca fisierele adecvate.

Good to know! In crearea unor functionalitati complexe, e de preferat sa iti iparti plugin-ul in fisiere si foldere mutiple. De asemenea, e important sa gasesti o balanta intre gradul de utilizare, structura layout-ului si minimalismul.

Numele si functionalitatile plugin-ului

In realizarea unui plugin, o parte importanta careia sa-i acorzi mai multa atentie, este denumirea plugin-ului, functionalitatilor si claselor. Este necesar pentru a nu avea functionalitati similare care au nume aproape identince.

Una dintre cele mai folosite solutii este folosirea anumitor prefixe, scazand mult posibilitatea de a avea aceleasi denumiri ca si altcineva.

Securitatea plugin-ului

Securitatea online este unul dintre cei mai importanti factori, iar aceasta regula se aplica si in cazul realizarii unui plugin, in special daca doresti sa il distribui.

In ceea ce priveste securitatea unui plugin, aceasta se bazeaza pe doi piloni: unul care se asigura ca plugin-ul nu raspandeste date stricate si al doilea pilon care permite utilizatorului sa efectueze anumite actiuni.

Poate pare mai complicat, dar WordPress ofera multiple functionalitati pentru a duce la bun sfarsit crearea unui plugin.

Lasa ordine in urma ta

O problema cu multe plugin-uri este ca in urma lor lasa multe date care nu sunt necesare. Astfel de date sunt utilizate doar de plugin-uri si care ajung a fi o greutate in plus, daca plugin-ul nu curata dupa el.

Pentru acest proces, WordPress ofera trei hooks:

 

  • Register_activation_hook () – Acest hook iti permite sa realizezi o functionalitate care functioneaza in timp ce plugin-ul tau este activat.
  • Register_deactivation_hook () – Functioneaza ca o replica a hook-ului mai sus mentionat, dar doar atunci cand plugin-ul este dezactivat.
  • Register_unistall_hook () – Aceasta functioneaza doar cand administratorul site-ului sterge plugin-ul tau in back end. E o metoda eficienta pentru a elimina datele in plus.

 

Documentatie si standarde de codare

In cazul in care dezvolti plugin-uri pentru comunitati mari, atunci a face documentatie codului tau este considerat ca fiind un gest de bune maniere si totodata e eficient pentru business.

A face documentatie codului tau e un obicei eficient chiar daca il folosesti in mare parte in scopuri personale. In acest fel, vei avea o evidenta rolul fiecarei functionalitati, chiar daca a fost scris cu luni in urma.

De asemenea, pe langa documentatie, respectarea standardelor de codare sunt importante, pentru a se conforma cu instructiunile WordPress-ului.

Practica e mama invataturii!

Ca dupa orice teorie, practica e modalitatea prin care poti observa daca intr-adevar ai inteles. Pentru aceasta vom realiza un plugin care atrage mai multa popularitate articolelor prin stocarea tuturor datelor de vizionare a fiecarei postare.

Planificare din timp

Inainte de scrierea propriu-zisa a codurilor, e important sa te gandesti si sa incerci sa determini fiecare functionalitate de care plugin-ul are nevoie. De exemplu:

  • O functionalitate care inregistreaza fiecare vizualizare pe care o postare o are;
  • O functionalitate care permite sa recuperezi numarul burt de vizualizari;
  • O functionalitate care restabileste o lista de postari in functie de numarul de vizualizari;
  • O functionalitate care ne arata numarul de vizualizari a fiecarui utilzator.

Pregatirea functionalitatilor

Primul pas este crearea folder-ului si structura fisierului. In folderul plugins poti alcatui un folder numit great_popular, iar dupa creaza un fisier numit great_popular.php. Dupa ce deschizi fisierul poti copia urmatoarele:

<?php    
/*    
Plugin Name: Pluginul meu cool    
Plugin URI: http://pluginul-meu-cool.ro    
Description: Descriere plugin cool    
Version: 1.0    Author: Sandor Kovacs    
Author URI: https://www.sandorkovacs.ro    
License: GPL2    
*/ 
?>

Inregistrarea numarul de vizualizari ale postarilor

Daca se poate gasi gasi o functionalitate WordPress care sa ruleze atunci cand o postare este vizualizata, mai e nevoie doar de scrierea functionalitatii care inregistreaza numarul de vizualizari si dupa se face hook.

/**
* Adds a view to the post being viewed
*
* Finds the current views of a post and adds one to it by updating
* the postmeta. The meta key used is "awepop_views".
*
* @global object $post The post object
* @return integer $new_views The number of views the post has
*
*/
function awepop_add_view() {
  if(is_single()) {
     global $post;
     $current_views = get_post_meta($post->ID, "awepop_views", true);
     if(!isset($current_views) OR empty($current_views) OR !is_numeric($current_views) ) {
        $current_views = 0;
     }
     $new_views = $current_views + 1;
     update_post_meta($post->ID, "awepop_views", $new_views);
     return $new_views;
  }
}

 

Recuperarea si dezvaluirea vizualizarilor

Folosirea unei functionalitati mai mult de o data poate crea redundanta, dar in acest caz promoveaza gandirea orientata spre obiect, care ofera si flexibilitate in dezvoltarea plugin-ului:

/**
* Retrieve the number of views for a post
*
* Finds the current views for a post, returning 0 if there are none
*
* @global object $post The post object
* @return integer $current_views The number of views the post has
*
*/
function awepop_get_view_count() {
  global $post;
  $current_views = get_post_meta($post->ID, "awepop_views", true);
  if(!isset($current_views) OR empty($current_views) OR !is_numeric($current_views) ) {
     $current_views = 0;
  }

  return $current_views;
}

 

Pentru dezvaluirea vizualizarilor se poate folosi urmatoarea functionalitate:


/**
* Shows the number of views for a post
*
* Finds the current views of a post and displays it together with some optional text
*
* @global object $post The post object
* @uses awepop_get_view_count()
*
* @param string $singular The singular term for the text
* @param string $plural The plural term for the text
* @param string $before Text to place before the counter
*
* @return string $views_text The views display
*
*/
function awepop_show_views($singular = "view", $plural = "views", $before = "This post has: ") {
  global $post;
  $current_views = awepop_get_view_count();

  $views_text = $before . $current_views . " ";

  if ($current_views == 1) {
     $views_text .= $singular;
  }
  else {
     $views_text .= $plural;
  }

  echo $views_text;

}

 

Lista cu postarile in functie de numarul de vizualizari

Pentru ca lista cu postarile in functie de numarul de vizualizari sa fie disponibila, e necesar sa dezvolti o functionalitate care poate fi plasata oriunde in tema site-ului.

/**
* Displays a list of posts ordered by popularity
*
* Shows a simple list of post titles ordered by their view count
*
* @param integer $post_count The number of posts to show
*
*/
function awepop_popularity_list($post_count = 10) {
 $args = array(
   "posts_per_page" => 10,
   "post_type" => "post",
   "post_status" => "publish",
   "meta_key" => "awepop_views",
   "orderby" => "meta_value_num",
   "order" => "DESC"
 );
 
 $awepop_list = new WP_Query($args);
 
 if($awepop_list->have_posts()) { echo "
<ul>"; }
 
 while ( $awepop_list->have_posts() ) : $awepop_list->the_post();
   echo '
<li><a href="'.get_permalink($post->ID).'">'.the_title('', '', false).'</a></li>

';
 endwhile;
 
 if($awepop_list->have_posts()) { echo "</ul>

";}
}

Pentru a adauga precautiune, poti adauga aceasta functionalitate in tema ta:

if (function_exists("awepop_popularity_list")) {
  awepop_popularity_list();
}

 

In acest fel, daca plugin-ul este dezactivat, iar functionalitatile nedefinite, PHP nu va arata o eroare a site-ului, ci doar lista nu va fi disponibila.

Daca iti doresti sa inveti cum sa dezvolti primul tau plugin, sa inveti programare de la zero, si nu numai, alaturat gasesti datele mele de contact!

Noutati in WordPress 4.6

Cunosti ultima versiune WordPress? Te intereseaza sa afli noutatile pe care WordPress 4.6 le aduce?

Ca si programator web, sau ca si om de IT e important sa fii mereu la curent cu noutatile pe care domeniul le aduce. Tehnologiile se schimba si se imbunatatesc mereu, astfel incat e important sa gasesti mereu metode prin care sa iti imbogatesti cunostintele si pentru a face fata cerintelor clientilor.

Asadar, noua versiune a WordPress-ului este inca in dezvoltare, lansarea oficiala fiind programata pe 16 August. Pana atunci, e in stadiu de testare, tocmai pentru a se asigura calitatea CMS-ului si pentru a face modificarile necesare.

Native Fonts in Admin

In versiunea 3.8 a WordPress-ului, s-a trecut la Open Sans ca si font nativ, iar avand in vedere ca necesita incarcarea lui din Google Fonts, insemna alocarea unui timp mai indelungat, ceea ce multi administratori de WordPress au gasit ca fiind ineficient.

In noua versiune 4.6, pentru a mari timpul de incarcare si pentru o experienta mai eficienta a administratorilor, se revine la system fonts. Varianta aceasta e preferata deoarece nevoia de o a treia parte este eliminata, iar timpul de incarcare este marit si in cazul lucrului offline.

Shiny Updates v2

Shiny Updates v2 ofera utilizatorilor o experienta mai fluenta in administrarea temelor si plugin-urilor din WordPress. Asadar, procesul de descarcare si actualizare va fi facut mult mai usor si rapid; intrucat e necesar un singur click.

Imbunatatiri in Editor

Noua versiune WordPress, aduce imbunatatiri si in Editor, avand un mai bun modul de recuperare – disaster recovery mode.

Acesta ofera un modul de revenire mai solid si de asemenea detecteaza URL-urile deteriorate in timp ce le tastezi.

Schimbari si pentru programatori

WordPress 4.6 aduce schimbari si imbunatatiri si pentru programatori:

  • API Widgets – Procesul a fost imbunatatit pentru a suporta inregistrarea widget-urilor pre-instantiate;
  • Resource Hints – Permite browserelor sa proceseze anumite pagini, sa le interpreteze in spate, sa efectueze DNS lookups, sau sa inceapa procesul de conectare handshake;
  • Language Packs – Traducerile sunt efectuate prin WordPress si sunt incarcate pe loc;
  • Requests – O noua biblioteca PHP pentru cererile HTTP care suporta cererile paralele.

Daca iti doresti sa inveti programare web de la zero, cum sa fii developer in WordPress, si nu numai, ma poti contacta aici!

Ce laptop sa aleg pentru web development?

In web development, pe langa toate cunostintele care le acumulezi, ai nevoie de un laptop cu care sa poti pune toate acele informatii in practica, care sa functioneze la parametrii buni pentru ca tu sa poti sa iti faci treaba.

Alegerea laptopului, la fel ca si alegerea anumitor limbaje, depinde in mare parte de web developer si de preferintele acestuia. Insa, iti recomand sa te ghidezi dupa anumite criterii pentru a-ti duce proiectele la bun sfarsit.

Laptop cu performanta ridicata

Performanta unui laptop e cheia atunci cand vorbim de business; aceasta incepe de la procesor, tehnologie SSD si memoria RAM. Un laptop cu un procesor bun inseamna i5 sau i7. Asta deoarece munca de web developer implica de multe ori proiecte mari si complicate, iar laptopul tau ar fi bine sa fie unul care poate sa iti sustina munca.

Pe langa un procesor bun, ai nevoie de un laptop cu SSD si un minim de 8 GB RAM pentru performanta si viteza ridicata. Ca si programator web ai nevoie de performanta si viteza nu doar pentru a respecta deadline-urile, dar in primul rand pentru a le putea efectua. Un laptop cu procesor mai slab, cu memorie RAM mai mica, va fi un laptop care va avea o performanta mai scazuta, ingreunandu-ti treaba.

Pe langa laptopul performant, iti recomand ca si tastatura si mouse-ul sa fie potrivite pentru tine. Vei avea multe proiecte, iar o tastatura comoda si un mouse potrivit tie, iti vor usura mult munca pe care o depui.

In cazul in care esti un programator web care calatoreste mult, recomandarea mea ar fi sa ai un laptop si cu baterie puternica, pentru a te asigura ca poti sa lucrezi de oriunde in orice moment.

Ecrane externe

Ca si web developer, pentru proiectele pe care le desfasori e indicat sa ai si unul sau doua ecrane externe sau un monitor 4k de minim 27”, deoarece un ecran normal de laptop iti va ingreuna munca, intrucat vei reusi sa ai o imagine de ansamblu a ceea ce faci.

Sunt multi programatori web care prefera un laptop de jocuri video care sa il foloseasca si pentru programare web, datorita performantei si vitezei ridicate. Dar jocurile video nu necesita atat de mult suport financiar cum necesita un business.

Daca iti doresti sa inveti programare web de la zero, si nu numai, ma poti contacta aici!

Managementul serviciilor

Structura examenului la materia Managementul Serviciilor: 

  • 10 intrebari Adevarat / Fals (2p)
  • 10 intrebari grila cu o singura varianta corecta (2p)
  • 10 intrebari grila cu mai multe variante corecte (2p)
  • + aplicatie (3puncte)

Toate tipurile de aplicatii si rezolvarile sunt puse la dispozitie. Probabil la examen veti avea probleme cu alte valori dar important este sa stiti cum se rezolva o problema20130623_204611 20130623_204621 20130623_204634 20130623_204648 20130623_204657 20130623_204710 20130623_204721

Cum sa treci examenul Finantele Intreprinderii?

Pentru Finantele Intreprinderii avem de rezolvat probleme relativ simple. Bineinteles vom primi un pic de teorie dar daca stii sa rezolvi probleme nu trebuie sa-ti faci griji.

Pentru a rezolva problemele avem de invatat formulele din urmatoarele capitole:

  • Fond de rulment
    – propriu brut si net
    – permanent brut si net
    – total brut si net
  • Criterii bazate pe actualizare au la baza calculul urmatorilor indicatori:
    – valoarea actualizata neta: diferenta dintre fluxurile de incasari actualizate generate de investitie si valoarea cheltuielilor cu investitia.
    – rata interna de randament: rata de actualizare care determina egalitatea dintre fluxurile de incasari sperate actualizate si cheltuielile de investii
    – indicele de rentabilitate: rentabilitatea relativa a investitiei pe intreaga durata normala de functionare a activelor imobilizate.
  • Amortizare liniara
  • Rata anuala de recuperat
  • Amortizare degresiva
  • Stocul maxim
  • Pragul de rentabilitate zero
  • Pragul de rentabilitate sperat

Structura examen

  • 10 intrebari de tip grila cu o singura varianta
  • 2 probleme ( de calculat VAN pentru intreprinderile A si B, de calcullat o amortizare degresiva )

Symfony 1.4 + Doctrine 1.2: Camp de tip ENUM in schema.yml

In Symfony 1.4 + Doctrine 1.2 pentru a adauga tip ENUM pentru un camp, se trece type: ENUM la campul dorit.

Exemplu:

User:
 columns:
    id:
      type: integer
      primary: true
    sex:
      type: enum
      values: [barbat, femeie]
      default: barbat

Pentru a genera SQL-ul vom folosi comanda :

./symfony doctrine:build-sql 

Dupa rularea comenzii in terminal se va genera urmatorul SQL:

CREATE TABLE user (id BIGINT, sex BIGINT) DEFAULT 'barbat', PRIMARY KEY(id)) ENGINE = INNODB;

Dupa cum vedeti si voi s-au pierdut valorile pentru campul sex, doctrine-ul nu a tinut cont de type:enum. Ca sa tina cont de type:enum trebuie sa adaugam liniile #4 si #5 din urmatorul cod in databases.yml:

...
    param:
      username: root
      attributes:
        use_native_enum: true  
...

Dupa ce am modificat fisierul databases.yml, curatam cache-ul, generam SQL-ul, si vom obtine SQL-ul dorit:

CREATE TABLE user (id BIGINT, sex ENUM('barbat', 'femeie') DEFAULT 'barbat', PRIMARY KEY(id)) ENGINE = INNODB;