Hypertext Preprocesor
3.2.1.5 PHP
PHP (acronimul de la Hypertext Preprocesor) este un limbaj de scripting folosit special pentru dezvoltarea aplicațiilor web și poate fi foarte ușor integrat în documentele de tip HTML.
Un exemplu de integrare a limbajului PHP în documentele de tip HTML:
<!DOCTYPE HTML>
<html>
<head>
<title>Example</title>
</head>
<body>
<?php
echo "Hi, I'm a PHP script!";
?>
</body>
</html>
Ceea ce deosebește limbajul PHP de cel JavaScript de pe partea de client, este ca în acest caz, codul executat pe server generează elementele de HTML care sunt trimise mai apoi către client.Clientul va primi rezultatele executării scriptului dar nu va putea indica în ce limbaj este scris codul. Se pot configura serverele web astfel încât toate documentele HTML să fie procesate în PHP.
Avantajele utilizării limbajului PHP.
Principalul avantaj în folosirea acestui limbaj de scripting este ca este foarte simplu de înțeles de către un începător dar în același timp oferă o gamă variată de caracteristici pentru un programator avansat.
PHP are o documentație foarte bine realizată cu multe segmente exemplificate și explicate. De asemeni se pot găsi foarte multe tutoriale, ceea ce oferă programatorilor începători posibilitatea învățării cât mai rapide a acestui limbaj.
Optimizat pentru a dezvolta aplicații web cât mai rapid . PHP este proiectat să funcționeze bine cu web-ul cum ar fi accesul la lucruri GET și POST și lucrul cu HTML și URL-uri sunt integrate în limbajul PHP . Acest lucru permite construirea foarte rapidă și concise a unui site Web
Deși PHP este un limbaj de server-side, există multe arii de acoperire în care este folosit, precum:
-Command line scripting
-Scrierea aplicațiilor Desktop
Un alt avantaj considerabil este ca suportă foarte multe tipuri de baze de date și totodată are suport în legătură cu alte servicii utilizând protocoale ca LDAP, IMAP, SNMP,NNTP,HTTP,COM.
Flexibilitatea configurării PHP este direct proporțională cu flexibilitatea codului. Acest limbaj poate fi folosit în dezvoltarea completă a unor aplicații de server cu toate privilegiile unui utilizator shell sau poate fi utilizat pentru aplicații simple server-side care includ un risc minim și un environment controlat pe deplin. Cum se poate construi acest mediu de lucru și cât de ridicat este nivelul de securitate sunt în totalitate deciziile dezvoltatorului PHP.
Variabile PHP.
Principalele reguli în urilizarea variabilelor php sunt:
-o variabilă începe întotdeauna cu semnul $ urmată de numele acesteia
-numele unei variabile trebuie să înceapă cu o literă sa cu caracterul underscore
-numele unei variabile nu poate începe niciodată cu un număr
-la utilizarea variabilelor trebuie știut ca numele acestra este case sensitive. De exemplu $nume și $NUME sunt variabile diferite.
Exemple de utilizare:
<?php
$txt = "Hello world!";
$x = 5;
$y = 10.5;
?>
Tipuri de variabile folosite de limbajul PHP.
Variabilele pot stoca tipuri de date diferite iar tipurile de date pot avea diferite întrebuințări.În continuare am ilustrat câteva dintre tipurile de date folosite de PHP.
Strâng //șiruri de caractere
Integer //numere
Float //numere de tip real
Boolean //variabile de tip logic
Array //mătrici sau tablouri bidimensionale
Object //obiecte
Resource //resurse
Câteva exemple de utilizare ale tipurilor de variabile:
Utilizarea variabilelor de tip integer implică următorul set de reguli:
– un întreg trebuie să aibă cel puțin o cifră
– un număr întreg nu trebuie să aibă un punct zecimal
-un întreg poate fi atât pozitiv cât și negative
-tipurile de variabile integer pot fi exprimate în 3 moduri: zecimal, hexazecimal sau octal
Exemple de utilizare a tipurilor de variabile:
-variabile de tip întreg
<?php
$x = 5985;
var_dump($x);
?>
Funcția var_dump returnează tipul și valoarea lui x.
-variabile de tip string
<?php
$x = "Lucrare de licență";
$y = 'a studentului Stoichita';
echo $x; //afișează textul “Lucrare de licență”
echo "<br>"; //inserează o pauză
echo $y; //afișează textul “a studentului Stoichita”
?>
-variabile de tip float
<?php
$x = 10.365;
var_dump($x); //afișează tipul și valoarea lui x
?>
-variabile de tip array
<?php
$mașini = array("Audi","BMW","Ford");
var_dump($mașini); //afișează conținutul și tipul variabilei mașini
?>
-variabile de tip boolean
$x = true;
$y = false;
Un obiect este un tip de variabilă care stochează informații despre modul de prelucrare a datelor.În php, un obiect trebuie declarat întotdeauna într-un mod explicit.În primul pas se declară o classa a obiectului. Clasa este o structură ce conține proprietăți și metode.
<?php
class Masina {
function Masina() {
$this->model = "VW";
}
}
// creează un obiect
$beattles= new Masina();
// afișează proprietățile obiectului
echo $herbie->model;
?>
Putem lua ca exemplu de script PHP codul de mai jos, în care se forțează autentificarea unui client pe o pagină web și care are ca scop ridicarea nivelului de securitate al site-ului:
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Textul care se trimite utilizatorului dacă apasă „cancel”;
exit;
} else {
echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>Ați introdus {$_SERVER['PHP_AUTH_PW']} ca parola domneavoastra</p>";
}
?>
4. Descrierea aplicației.
În aceasta lucrare, aplicația descrisă este un site web de prezentare a unei afaceri de tip electronic pentru o companie de imobiliare.
Tehnologiile folosite în dezvoltarea aplicației sunt Codeigniter, Bootstrap Twitter și PHP.
4.1 Codeigniter.
CodeIgniter este un cadru de dezvoltare de aplicații – un set de instrumente – pentru cei care construiesc site-uri web folosind PHP . Scopul său este de a permite dezvoltarea proiectelor mult mai repede decât în cazul scrierii codului de la 0 , prin furnizarea unui set bogat de biblioteci pentru sarcinile uzuale . CodeIgniter permite concentrarea crativa a proiectului minimizând cantitatea de cod necesar pentru implementarea anumitor funcționalități.
CodeIgniter este un sistem bazat pe conceptul Model-View-Controller ce vine cu o serie foarte vastă de caracteristici precum:
-support full pentru mai multe platforme
-securitate și XSS Filtering
-clase pentru lucrul cu poșta electronică, având suport pentru trimiterea de fișiere de orice tip, multiple protocoale utilizate (sendmail, SMTP, și Mail)
-clase pentru upload de fișiere
-clase pentru utilizarea protocolului FTP
-data encryption
CodeIgniter este bazat pe conceptul de dezvoltare Model-View -Controller . MVC este o abordare software care separă logic cererea de prezentare . În practică , aceasta permite paginilor web sa conțină scripturi minime din moment ce prezentarea este total diferită de scriptarea PHP .
-Modelul este reprezentat de structuri de date. Clasele modelului conțin funcții ce permit extragerea, adăugarea și update-ul informațiilor din baza de date.
-View este informația care este prezentată utilizatorului final. În mod normal, un View este reprezentat de o pagina Web, dar în CodeIgniter poate fi și anumite secțiuni ale paginilor ca header sau footer sau poate fi reprezentat chiar și de o pagina de tip RSS feed.
-Controllerul acționează ca și o legătură între Model, View și orice alt tip de resurse necesare pentru generarea unei pagini web.
Figura 4.1 Conceptul MVC
Avantajele folosirii framework-ului codeigniter:
-pe acest framework, debugging-ul se face foarte ușor ceea ce permite development-ul cu cât mai puține erori
-cea mai ușoară soluție de a folosi programe modulare
-compatibilitate cu celele mai multe servere web, cu numeroase sisteme de operare și platforme
-comunitate foarte mare ceea ce a sigură un suport foarte bun
-asigura o configurare și o customizare foarte ușoară
Cum se utilizează codeigniter.
Fiind un concept MVC, în dezvoltarea web bazată pe codeigniter, în mod firesc este necesară crearea fișierelor de tip:
-model
-view
-controller
Model
Modelele sunt clase de php construite sa lucreze cu informațiile din baza de date.Spre exemplu, la folosirea modelelor pentru administrarea unui blog, vom avea nevoie de o clasa model ce conține anumite funcții cum ar fi funcție de inserare, de update sau de ștergere a datelor.
Un exemplu de model poate fi următorul:
class Blogmodel extends CI_Model {
var $title = '';
var $content = '';
var $date = '';
function __construct()
{
parent::__construct(); //apelează constructorul modelului }
function get_last_ten_entries()
{ $query = $this->db->get('entries', 10);
return $query->result(); }
function insert_entry()
{
$this->title = $_POST['title']; // please read the below note
$this->content = $_POST['content'];
$this->date = time();
$this->db->insert('entries', $this);
}
function update_entry()
{
$this->title = $_POST['title'];
$this->content = $_POST['content'];
$this->date = time();
$this->db->update('entries', $this, array('id' => $_POST['id']));
}
}
View
Un view este în principiu o pagina web sau un fragment de pagina cum ar fi un header, un footer, sidebar sau orice alt tip de block.
Un view nu poate fi apelat în mod direct, ci este nevoie sa fie încărcat de un controller.De regulă, controllerul este cel care se ocupă de traficul din site și care încarcă anumite pagini la cerere.
Un exemplu simplu de view poate fi considerat următorul:
<html>
<head>
<title>My Blog</title>
</head>
<body>
<h1>Welcome to my Blog!</h1>
</body>
</html>
Încărcarea unui view particular necesită apelarea următoarei funcții:
$this->load->view('name');
Atunci când se dorește ca într-o pagina sa se încarce mai multe segmente html, cum ar fi blocurile de head și footer, încărcarea se poate face ca în exemplul:
<?php
class age extends CI_Controller {
function index()
{
$data['page_title'] = 'Titlu';
$this->load->view('header'); //se încarcă block-ul header
$this->load->view('menu'); //se încarcă block-ul de meniu
$this->load->view('content', $data); //se adaugă elemente dinamice
$this->load->view('footer'); //se încarcă footer-ul
}
}
?>
Controller
Un controller se poate defini ca un fișier de clasa ce este denumit într-un mod care poate fi asociat unui URÎ.
Având următorul uri : prostream.ro/index.php/blog/ , codeigniter caută fișierul blog.php și îl va încărca. Atunci când numele unui controller se regăsește în primul segment din URI, acesta va fi încărcat.
Un exemplu simplu de controller:
<?php
class Blog extends CI_Controller {
public function index()
{
echo 'Textul meu.';
}
}
?>
În exemplul anterior funcția folosită are denumirea index() . Funcția index () va fi încărcată în mod automat dacă al doilea segment din uri nu există. Cel de-al doilea segment, decide ce funcție va fi apelată din componența controller-ului.
Vom adăuga o nouă funcție controller-ului de mai sus:
<?php
class Blog extends CI_Controller {
public function index()
{
echo 'Textul meu.';
}
public function commentarii()
{
echo 'Comentariul meu';
}
}
?>
În acest caz, dacă vom accesa url-ul următor example.com/index.php/blog/comments , se va afișa mesajul „Comentarul meu”.
Am prezentat anterior câteva motive și principalul mod de a folosi framework-ul Codeigniter în dezvoltarea aplicației „Website pentru prezentarea unei companii de afaceri imobiliare” .
4.2 Bootstrap
Având în vedere dezvoltarea masivă a tehnologiilor smartphone și a tabletelor din ultimii ani, vizualizarea aplicațiilor web de pe aceste tipuri de device-uri s-a existins considerabil. Astfel în dezvoltarea unui website, trebuie luat în considerare și acest aspect, rezolvarea cea mai utilizată fiind folosirea framework-ului Bootstrap dezvoltat de Twitter.
Bootstrap este un framework front-end ce permite atât dezvoltarea mai rapidă a aplicațiilor web cât și adaptarea automată în funcție de rezoluția de pe care sunt vizualizate acestea.
Bootstrap include un system responsive de tip grid care scalează în mod automat paginile ce se pot extinde până la 12 coloane în funcție de dimensiunile ecranelor de pe care aplicația este vizualizată.
Bootstrap a fost dezvoltat de către Mark Otto și Jacob Thornton pentru Twitter și plasat pe Github ca un produs open source în August 2011.
Pentru folosirea acestui framework fără a fi instalat în prealabil, se pot adăuga inheader-ul aplicațiilor următoarele linii:
<linkrel="stylesheet"href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<!—libraria jQuery –>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
În dezvoltarea aplicației responsive, se ia în considerare în primul rând aspectul acesteia pe device-urile mobile. Pentru asigurarea randarii optime și scalabilate, se adaugă următoarea linie în header-ul aplicației.
<meta name="viewport" content="width=device-width, initial-scale=1">
– width=device-width reprezintă lățimea dispozitivului
– initial-scale=1 face ca la prima accesare zoom-ul sa fie de 100%
4.3 Proiectarea aplicației
Dezvoltarea site-ului s-a făcut utilizând cele două frameworkuri descrise anterior, și care pot fi descărcate de pe http://.codeigniter.com/ respectiv http://getbootstrap.com/ .
Aplicația suportă utilizarea de către mai mulți ușeri simultan, iar baza de date unică face posibilă menținerea actualizată a datelor astfel încât fiecare utilizator poate vedea în orice moment conținutul actualizat al website-ului.
Pentru dezvoltarea aplicației și plasarea acesteia în mediul online, ceea ce permite vizualizarea din orice locație fără a fi necesară instalarea anterioară de aplicații sau module, s-a achiziționat un domeniu, acesta fiind Prostream.ro.
Adițional domeniului, s-a efectuat cumpărarea serviciului de hosting pe un server dedicat cu spațiu de stocare de 10 Gb și lățime de banda netilimitata. Avantajul lățimii de banda cât mai mare este reprezentat de numărul foarte mare de utilizatori care pot viziona webstite-ul, fără încărcarea excesivă a traficului și reducerea performatelor.Desigur, aplicația poate fi vizionată și în mediul online, dar acest lucru este posibil numai după efectuarea unor pași, și anume instalarea unui simulator de server cu susținere pentru baza de date și pentru tehnologiile utilizate.
Principalul avantaj direct al companiei de afaceri imobiliare ce deține aceasta aplicație este ca poate opera modificări în apoape tot conținutul website-ului fără a apela de fiecare date la dezvoltator.
Aplicația are integrat un CMS care oferă clientului opțiunile de a adăuga pagini, de a modifica conținutul acestora, de a selecta layouturile folosite pentru fiecare subcategorie, de a introduce noi proiecte, etc.
4.4 Proiectarea bazei de date.
Baza de date a aplicației a fost proiectată pentru a acoperi o gamă largă de scenarii de utilizare și a oferi suport pentru dezvoltări ulterioare rapide. Tipul bazei de date folosit este MySQL Database.
În continuare este prezentată structura acesteia pe tabele.
Tabela pentru stocarea paginilor.
În momentul creării unei noi pagini, în tabela pages se va adăuga o nouă intrare ce va conține, câmpurile Id (id-ul paginii) , location(locul în care pagina se poate regăsi), location_en(unde se poate găsi pagina în varianta de limba engleză), layout (ce layout s-a folosit pentru crearea paginii) , published( acest câmp indică dacă pagina nou creată poate fi vizalizata de utilizator în cadrul site-ului), cache( dacă pagina se va salva în memoria cache),
date_added( data în care a fost adăugată o nouă pagina), last_modified(când s-au efectuat modificări în cadrul conținutului), last_modified_by (cine a operat modificările) .
Tabela pentru stocarea proiectelor.
Pentru stocarea datelor din cadrul secțiunii „Proiecte” a site-ului, este utilizată tabela proiecte care conține câmpurile : type_id ( typul de proiect adăugat) , titlu_ (titlul proiectului),
Slug(adresa url prin care poate fi accesat), despre_ (descrierea proiectului), orașe(orașul în care se află construcția), coordonate(coordonatele construcției pe Google maps), image (imaginea reprezentativă), contact(datele de contact pentru respectivul proiect).
Tabela în care se stochează permisiunile alocate administratorilor
Pentru administrarea cât mai corectă a website-ului, anumitor administratori le sunt date seturi de privilegii asupra datelor. În tabela ilustrată mai sus se acordă drepturi asupra anumitor secțiuni din cadrul site-ului.
Pentru a facilita căutarea unei anumite secțiuni, utilizatorul are la dispoziție un search button care ii permite găsirea informațiilor necesare într-un timp cât mai scurt.
Căutarea acestor informații va fi făcută în tabela numită search, care conține toate datele paginilor și care va returna în urma interogării, informațiile necesare.
Tabela în care se fac interogări din butonul de search
4.5 Implementarea aplicației
4.5.1 Instalarea frameworkului.
Primul pas efectuat în vederea folosirii acestui framework, este instalarea lui, mai exact copierea fișierelor sursă pe serverul web pe care se va face găzduirea site-ului.
După ce copierea este terminată, se va seta base url-ul și anume numele domeniului. Acest lucru se realizează modificând codul din fișierul config.php adăugându-se linia de cod următoare: $config['base_url'] = BASE_URL;
Având în vedere ca se folosește o baza de date pentru stocarea informațiilor, după ce aceasta a fost creată, urmează configurarea ei în felul următor:
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'prostr71_licenta'; //numele bazei de date
$db['default']['password'] = '$vxGaSggLvf.'; //parola bazei de date, care poate fi generată automat sau poate fi setată manual
$db['default']['database'] = 'prostr71_licenta'; //setează baza de date default
$db['default']['dbdriver'] = 'mysql'; //driverul pentru baza de date
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = FALSE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
4.5.2 Crearea modulelor.
După ce instalarea frameworkului a fost efectuată cu succes, următoarea etapă de parcurs a fost de a crea modulele ce vor fi utilizate de către aplicația noastră.
În continuare voi descrie crearea modulului cel mai complex din cadrul aplicației prezentate.
Crearea modulului „Proiecte”.
Pentru acest modul, a fost nevoie , în primul rând de o tabela în care s-au stocat informațiile în cadrul bazei de date. După crearea tabelei proiecte, s-au creat tabelele ce vor relaționa cu aceasta, și anume „orașe”, „țări” și „tip”, pentru a face posibilă afișarea tuturor informațiilor necesare în cadrul modulului. Acest lucru a fost realizat folosindu-se PHPMyAdmin.
Pentru adăugarea de noi module, se parcurg o serie de etape necesare și anume:
-crearea modelului;
-adaugarea acestuia în fișierul MY_fuel_modules;
-crearea fișierului view în care sunt transmise datele pentru a putea fi vizualizate de câte utilizatorul final;
-crearea unui layout nou ce va fi utilizat de către view;
Crearea modelului „proiecte”
public $record_class = 'Proiect';
public $filters = array('titlu_ro');
public $required = array();
public $foreign_keys = array('type_id' => 'type_model', 'orase_id' => 'orase_model', 'status_id' => 'status_model');
public $linked_fields = array();
public $boolean_fields = array();
public $unique_fields = array();
public $parsed_fields = array();
public $serialized_fields = array('lagatura_proiecte','contact');
Matricea definită mai sus sub forma public $foreign_keys = array('type_id' => 'type_model', 'orase_id' => 'orase_model', 'status_id' => 'status_model'); mapează cheile străine obținute din tabelele modelelor respective. Întrucât este necesară afișarea pe o singură linie, mai exact afișarea ca un vector a acestor tipuri de Arrays, s-a făcut serializarea lor astfel: public $serialized_fields = array('lagatura_proiecte','contact'); .
function form_fields($values = array(), $related = array())
{
$fields = parent::form_fields($values, $related);
$fields['image'] = array('type' => 'file', 'folder' => 'images/proiecte', 'hide_options' => true, 'overwrite' => false, 'multiple'=>true, 'img_styles' => 'width: 120px; height:120px;');
$fields['poze'] = array('order' => '17', 'value' => 'Upload images');
$fields['poze2'] = array('type' => 'hidden');
$fields['contact'] = array('display_label' => TRUE, 'add_extra' => FALSE, 'dblclick' => 'toggle', 'repeatable' => TRUE, 'type' => 'template', 'label' => 'Contact', 'title_field' => 'titlu',
'fields' => array(
'nume' => array(),
'telefon' => array()
));
$legatura = $this->db->get('proiecte');
$leg = array();
foreach ($legatura->result_array() aș $key => $value) {
if(isset($values['id']) && !empty($values['id'])){
if($value['id'] != $values['id']) $leg[$value['id']] = $value['titlu_ro'];
} else {
$leg[$value['id']] = $value['titlu_ro'];
}
}
$fields['background'] = array('type' => 'file', 'folder' => 'images/proiecte', 'hide_options' => true, 'overwrite' => false, 'multiple'=>false, 'img_styles' => 'width: 120px; height:120px;');
return $fields;
Funcția form_fields creaeaza câmpurile formularului din consola de administrare unde administratorul introduce datele ce urmează sa fie tranferate în view pentru afișarea acestora în pagina, în următorul mod:
$fields['contact'] = array('display_label' => TRUE, 'add_extra' => FALSE, 'dblclick' => 'toggle', 'repeatable' => TRUE, 'type' => 'template', 'label' => 'Contact', 'title_field' => 'titlu',
'fields' => array(
'nume' => array(),
'telefon' => array()
));
Va permite adăugarea mai multor opțiuni de inserare a datelor de contact așa cum este ilustrat în imaginea alăturată.
$fields['poze'] = array('order' => '17', 'value' => 'Upload images'); oferă posibilitatea de a adăuga fotografiile proiectului iar câmpul forularului din consola va arăta așa:
$fields['background'] = array('type' => 'file', 'folder' => 'images/proiecte', 'hide_options' => true, 'overwrite' => false, 'multiple'=>false, 'img_styles' => 'width: 120px; height:120px;');
Acest câmp oferă posibilitatea înlocuirii imaginii de fundal a proiectului în felul următor:
În pagina de proiect afișată pe website, fundalul va arăta:
function on_before_save($values)
{
$rom=array('�','î','â','ș','ț','Ă','Î','Â','�','Ț');
$eng=array('a','i','a','s','t','A','I','A','S','T');
$titlu_ro=str_replace($rom,$eng,$values['titlu_ro']);
$titlu_en=str_replace($rom,$eng,$values['titlu_en']);
if (empty($values['slug_ro'])) $values['slug_ro'] = url_title($titlu_ro, 'dash', TRUE);
if (empty($values['slug_en'])) $values['slug_en'] = url_title($titlu_en, 'dash', TRUE);
if (!intval($values['publish_date'])) $values['publish_date'] = datetime_now();
if(count($values['contact']) == 1 && empty($values['contact'][0]['nume']) && empty($values['contact'][0]['telefon']))$values['contact'] = '';
return $values;
}
Deoarece în orice url nu sunt permise folosirea caracterelor speciale cum ar fi Ă, Ä, ĂŽ, s-a adăugat o funcție, care în momentul salvării datelor din consola preia informațiile înainte ca acestea sa fie salvate și afișate și verifică dacă există în url-urile proiectelor acest tip de caractere speciale. În caz afirmativ, înainte de salvare le va înlocui cu alte caractere permise dintrecele disponibile aici $eng=array('a','i','a','s','t','A','I','A','S','T'); .
De asemeni, în cazul în care nu s-a dorit crearea unor url-uri speciale iar câmpurile pentru url au fost lăsate necompletate, aceasta funcție atribuie automat adresele în funcție de titlurile date.
Tot aici se va înregistra și data în care a fost adăugat proiectul respectiv.
După ce informațiile au fost preluate și prelucrate de funcția on_before_save, acestea sunt transmise către funcția :
function on_after_save($values)
{ parent::on_after_save($values);
return $values;} //care va face afișarea în cadrul paginii de proiect.
Adăugarea modelului în fișierul cu module create.
Adăugarea se va face în fișierul MY_fuel_modules astfel:
$config['modules']['proiecte'] = array(
'module_name' => 'Proiecte', //titlul modulului
'js' => 'proiecte.js', //plug-in pentru crearea galeriilor
'filters' => array(),
'hidden' => TRUE
);
'js' => 'proiecte.js' face trimiterea către un fișier ce conține un script compus în limbajul JavaScript ce oferă posibilitatea de a adăuga pe server mai multe fișiere în același timp așa cum este un cazul nostru, upload-ul imaginilor din galeriile foto ale proiectelor.
Crearea unui nou View.
Fișierele care fac posibilă vizualizarea paginilor în cadrul site-ului sunt fișierele de tip view. Ele vor fi stocate în directorul dedicat numit Views de unde vor fi apelate în funcție de cerințe.
Pentru modulul de Proiecte, fișierul View a fost creat în următorul mod:
<?php
$vărs['layout'] = 'proiecte';
$CI->load->model('proiecte_model'); //încarcă modelul proiecte
$CI->load->model('orase_model'); //încarcă modelul orașe
$CI->load->model('status_model'); //încarcă modelul status
$CI->load->model('type_model'); //încarcă modelul type
$vărs['tipuri'] = $CI->type_model->find_all_array(array(), 'titlu_ro asc');
$vărs['status'] = $CI->status_model->find_all_array(array(), 'titlu_ro asc');
$s1 = uri_segment(1);
$s2 = uri_segment(2);
if(!empty($s2)) {
$slug = $lang == 'en' ? 'slug_en' : 'slug_ro';
$vărs['layout'] = 'proiect'; //selectează layout-ul folosit
$vărs['proiect'] = $CI->proiecte_model->find_one(array($slug => $s2 ));
}
} else {
$vărs['proiecte'] = $CI->proiecte_model->find_all(array(), 'publish_date desc');
$vărs['orase'] = $CI->orașe_model->find_all_array(array(), 'titlu_ro asc');
}
?>
Există mai multe metode de afișare a proiectelor în funcție de dorințele utilizatorului, care are posibilitatea de a alege în mod exact tipul de proiect pe care dorește sa îl vizualizeze, orașul în care se află construcția și statusul construcției.
De asemeni, pentru vizualizarea pagini proiectului, s-a creat un alt fișier view astfel:
<?php
$vărs['layout'] = 'proiect'; //selectarea layoutului folosit
$CI->load->model('proiecte_model');
$s1 = uri_segment(1);
$s2 = uri_segment(2);
if(!empty($s2)) {
} else {
$vărs['proiecte'] = $CI->proiecte_model->find_all(array(), 'publish_date desc'); //afișează toate proiectele în ordine alfabetică
}
?>
$s1 = uri_segment(1); reprezintă primul segment din cadrul url-ului
$s2 = uri_segment(2); reprezintă segmentul doi din cadrul url-ului care este unic pentru fiecare proiect.
Crearea layout-urilor.
În funcție de paginile cuprinse în interiorul aplicației și de modul în care se dorește afișarea acestora, pentru fiecare categorie de pagina se creează un nou layout definește modul de afișare. Pentru modulul Proiecte layout-ul este selectat în fișierul view al modulului.
<div class="list-types">
<form role="form" class="form-proiecte" action="" method="POST"> //afișează datele din formularul proiecte
<div class="first-proj" id="înveșt"> //caseta pentru selectarea tipului de proiect
<div class="checkbox form-group ">
<label class="title-list-types"><?=lang('tip_investitii')?></label>
<?php foreach ($tipuri aș $tip):?>
<label class="checkbox-inline"><input name="tip[]" type="checkbox" class="checktip" value="<?=$tip['id']?>"><?=$tip['titlu_'.$lang]?></label>
<?php endforeach; ?>
</div>
</div>
<div class="first-proj" id="city-invest"> //caseta pentru selectarea orașului
<div class="form-group" >
<label class="title-list-types"><?=lang('oras')?></label>
<select class="form-control" id="sel1" name="orașe">
<option value=""><?=lang('toate')?></option>
<?php foreach($orașe aș $oraș):?>
<option value="<?=$oraș['id']?>"><?=$oraș['titlu_'.$lang] ?></option>
<?php endforeach; ?>
</select>
</div>
</div>
<div class="first-proj" id="status-project"> //caseta pentru selectarea statusului
<div class="form-group">
<label>Status</label>
<select class="form-control status" id="sel1" name="status">
<option value=""><?=lang('toate')?></option>
<?php foreach($status aș $stat):?>
<option value="<?=$stat['id']?>"><?=$stat['titlu_'.$lang]?></option>
<?php endforeach;?>
</select>
</div>
</div>
<input type="hidden" name="lang" value="<?=$lang?>">
<?php if(isset($tara_id)):?><input type="hidden" name="tara_id" value="<?=$tara_id?>"><?php endif;?>
</form>
</div>
<script type="text/javascript">
$(document).ready(function(){
$('select, .first-proj .checkbox-inline').on('click, change', function(e){
e.stopPropagation();
$('.form-proiecte').submit();
});
$('.form-proiecte').submit(function(e){
e.preventDefault();
var data = $('.form-proiecte').serialize(),
url = 'proiectecont/';
var posting = $.post( url, data );
posting.done(function( data ) {
$('.list-location .row').html(data);
});
});
});
</script>
Codul Javascript ilustrat are rolul de a face posibilă vizualizarea galeriei foto a fiecărui proiect și oferă utilizatorului opțiunea de a vedea mai multe fotografii încărcate.
Deseori, atunci când se face un request în pagina, iar utilizatorul dorește sa fie afișate anumite date de interes, pentru ca acest lucrul sa fie posibil este necesară reîmprospătarea paginii sau refresh. Pentru a returna datele cerute și a evita refresh-ul paginii, s-a folosit un AJAX ce are structura următoare:
<?php
class Proiectecont extends CI_Controller {
function __construct()
{
parent::__construct(); //construirea controllerului
}
public function index() {
$this->load->model('proiecte_model'); //încarcă modelul proiecte
$lang = $this->input->post("lang"); //selectează varianta de limba
$where = array(); //condițiile de afișare
if($this->input->post("orașe") != '') $where['orase_id'] = $this->input->post("orașe");
if($this->input->post("status")!= '') $where['status_id'] = $this->input->post("status");
if($this->input->post("tara_id")!= '') $where['tara_id'] = $this->input->post("tara_id");
$link = ($lang == 'en')? base_url().$lang.'/projects/' : base_url().'proiecte/';
$proiecte = $this->proiecte_model->find_all($where); //afișează toate proiectele
if($this->input->post("tip")){ //selectează proiectele în funcție de tip
$pro = array();
foreach ($this->input->post("tip") aș $tip){
foreach($proiecte aș $value){
if($value->type_id == $tip) $pro[] =$value;
}
}
$proiecte = $pro;
}
$pr = '';
foreach ($proiecte aș $proiect) {
$image = (count($proiect->image) == 1)? $proiect->image : $proiect->image[0];
$pr .= '<div class="about-buildings">
<div class="box-buildings">
<a href="'.$link.$proiect->slug_ro.'"> //afișează proiectul dorit în funcție de limba selectată
<p class="title-location">'.$proiect->titlu_ro.'</p> //titlul proiectului
<div class="image-front" style="background-image:url('.base_url().'assets/images/proiecte/'.$image.')"></div> //imaginea de background
</a>
<div class="details-location"><p class="details-title">'; //afișează locația clădirii
if(count($proiect->lagatura_proiecte)>0){
$pr .= 'Complex <span class="details-buildings">3 buildings</span>'; }
$pr .='<p class="details-title">City <span class="details-buildings">'.$proiect->orase->titlu_ro.'</span></p> //detalii despre proiect
<p class="details-title">Status <span class="details-buildings">'.$proiect->status->titlu_ro.'</span></p> //statusul proiectului
<p class="details-title">';
if(isset($proiect->contact) && !empty($proiect->contact)){
$pr .= 'Lease <span class="details-buildings">'.$proiect->contact[0]["telefon"].'</span>';
}; //datele de contact pentru proiectul respectiv
$pr .= '</p>
<a class="readmore" href="'.$link.$proiect->slug_ro.'">read more</a> //afișează mai multe detalii
</div></div></div>';}
echo $pr;
exit;
}
}
$this->load->model('proiecte_model'); // se încarcă modelul proiecte
$lang = $this->input->post("lang"); //se selectează limba în care este afișat site-ul în momentul curent
Modulele create și folosite în cadrul aplicației sunt:
-proiecte
-tip proiecte
-board
-articole
Anterior am descris modul de creare al unuia dintre module și anume modulul Proiecte,cel mai complex dintre ele. Pașii pentru adăugarea celorlalte modulele se parcurg în aceeași ordine și sunt asemănători.
5. Prezentarea aplicației
Harta site-ului.
Homepage.
Homepage, sau pagina principală, conține elementele:
-header
-footer
-banner principal
-utimele 5 articole adăugate
-un paralax format din 4 imagini
-date de contact
Activitatea companiei.
Aceasta pagina a fost creată pentru a expune către utilizatori activitatea companiei de când a fost înființată până în prezent. Se pot adăuga informații utile pentru cei ce vor sa încheie un parteneriat și nu au foarte multe date despre noi.
Strategie.
Scopul aceste pagini este de a prezența publicului larg din mediul online strategia de extindere cât și strategia abordată în desfășurarea activității. De asemeni aceasta pagina oferă o transparență asupra planurilor companiei, ceea ce poate oferi o încredere ridicată potențialilor parteneri.
Consiliul de conducere.
În aceasta pagina sunt prezentate date despre persoanele din managementul companiei.
Contact.
În pagina de contact se găsesc informații utile și adresele la care persoanele din cadrul management-ului se pot găsi, pentru eventuale colaborări.
Premii.
Așa cum fiecare sportiv are panoul sau cu medalii, în mediul online, pentru compania prezentată în acest proiect, pagina Premii are rolul de a arăta utilizatorilor dovezi pentru care este un partener de încredere.
Se vor adăuga cât mai multe premii obținute, iar aceasta pagina are rolul de a crește prestigiul în percepția utilizatorilor.
Proiecte.
In pagina de proiecte se afiseaza cladirile construite sau manageriate de aceasta companie. Deoarece deschiderea este internationala, s-a creat posibilitatea vizualizarii proiectelor din fiecare tara in mod separat si se pot face cautai dupa orase, dupa tipul proiectelor, dupa stadiul in care acestea se afla sau dupa tara de interes.
Aceasta sectiune este, posibil cea mai importanta sectiune a aplicatiei web, intrucat ofera utilizatorilor posibilitatea de a vizualiza proiectele finalizate de catre companie sau proiectele in curs de dezvoltare, iar astfel vor avea o imagine de ansamblu asupra unei posibile colaborari.
Știri.
În pagina de știri sau articles, sunt afișate articolele create în modulul Articles.
Aceasta pagina are scopul de a ține cititorii la curent cu tot ce se întâmplă în companie. De fiecare data când are loc un eveniment în cadrul firmei acesta va fi relatat în pagina de articole unde poate fi vizualizat de către utilizatori.
6.Posibilități de dezvoltare ale aplicației.
Un prim pas pentru a dezvolta aplicația și a-i atribui mai multe funcționalități este implementarea acesteia în fiecare limba în care compania activează. Dat fiind ca exinderea este internațională, în momentul dezvolatarii unor noi clădiri într-o tara care nu se află în momentul de față implementată în structura site-ului, se poate adăuga și limba țării respective.
Numărul de limbi în care aplicația este dezvoltată nu este limitat.
O altă posibilitate de dezvoltare ulterioară este adăugarea unei funcții care în pagina unui proiect sa afiseza și trimiteri către alte proiecte cu care acesta este în strânsă legatura. Acest lucru poate îmbunătăți experiența utilizatorului și poate face căutarea pe anumite zone de interes mult mai ușoară.
Un alt pas ce poate fi făcut în dezvoltarea ulterioară a site-ului este implementarea unui formular de contact prin intermediul căruia potențialii partneri pot lua legatura cu persoanele din conducerea companiei fără a fi necesar contactul prin telefon sau e-mail. Acest lucru poate îmbunătăți de asemenea experiență utilizatorilor și poate ușura interacțiunea acestora cu managementul companiei.
Deoarece se dorește ca oamenii sa fie tot timpul în legatura cu activitățile companiei, pe lângă pagina de știri în care utilizatorii pot fi la curent cu tot ceea ce se întâmplă, se poate implementa un formular de abonare la newsletter astfel încât, atunci când apar mesaje importante, de interes general, se poate trimite un newsletter către toate adresele abonaților stocate în baza de date.
Acestea sunt câteva dintre posibilitățile de dezvoltare ulterioară a website-ului, funcționalitățile ce pot fi implementate fiind nenumărate.
7.Concluzii.
De ce este nevoie de un website în care companiile mari sa fie prezentate?
Vizibilitatea în mediul online contează poate peste 50% din promovarea companiei întrucât internetul este o unealtă foarte puternică, iar valorificat la întregul lui potențial poate aduce un profit considerabil companiei.
Pe parcursul acestei lucrări am descris și exemplificat tehnologiile folosite în dezvoltarea aplicației web “website de prezentare a unei companii de afaceri imobiliare” cât și motivele pentru care s-au folosit acestea.
Principalul motiv pentru care am utilizat Codeigniter este ca frameworkul se află într-o continuă dezvoltare, de curând fiind lansată varianta 3.0 ce folosește tehnologia PHP 7, ultima tehnologie apărută în materie de web development.
Piața dispozitivelor mobile este în continuă expansiune, iar pentru a ține pasul cu ea, orice website trebuie dezvoltat în mod responsive astfel încât sa se plieze pe orice rezoluție șiș a permită utilizatorilor vizualizarea cât mai clară și corectă.
8.Bibliografie:
Afaceri în economia digitală, Prof.dr. Bogdan GHILIC-MICU Catedra de Informatică Economică, A.S.E. București, Revista Informatică Economică, nr. 3(23)/2002.
Revoluția comerțului electronic, Coy Barefoot, editura Amaltea, an 2004
Efectele comerțului electronic, Conf. univ. dr. Ion Botescu, articol disponibil la adresa:
http://www.amfiteatrueconomic.ase.ro/arhiva/pdf/no21/articol_fulltext_pag156.pdf
Internetul. O teorie critică a noilor media,Dominique Wolton, Editura: Comunicare.ro, anul 2012
JavaScript Bible, Danny Goodman, Michael Morrison, Paul Novitski, Tia Gustaff Rayl, Wiley 2010
HTML, XHTML, CSS și XML prin exemple, Gugoiu Teodor, Editura Teora
Programarea în PHP. Ghid practic, Traian Anghel
Surse web:
http://www.w3schools.com
https://ro.wikipedia.org/wiki/PHP
https://ro.wikipedia.org/wiki/HyperText_Markup_Language
https://ro.wikipedia.org/wiki/JavaScript
http://www.htmlcodetutorial.com/
http://php.net/
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Introduction
https://www.codeigniter.com/
http://getbootstrap.com/
https://en.wikipedia.org/wiki/Database
http://www.w3schools.com/ajax/
http://www.codeproject.com/
http://www.planet-source-code.com/
https://www.codecademy.com/
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Hypertext Preprocesor (ID: 116070)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
