Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

pomoc naprednom pocetniku,tj. preporuka neke knjige

[es] :: PHP :: pomoc naprednom pocetniku,tj. preporuka neke knjige

Strane: 1 2 3 4

[ Pregleda: 17286 | Odgovora: 65 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

iizuzetan

Član broj: 186478
Poruke: 375
*.adsl.verat.net.



+16 Profil

icon Re: pomoc naprednom pocetniku,tj. preporuka neke knjige30.03.2009. u 11:14 - pre 183 meseci
Citat:
Nikola Poša: Taj princip, odnosno, stil pisanja web aplikacije još i može da prođe na nekim manjim ili one-man projektima. A zamisli samo kad bi trebao da radiš u nekom timu ljudi, ili ne mora to, nego samo pomisli šta bi sve morao da uradiš kad bi hteo da promeniš izgled sajta, recimo da promeniš templejt... Ja ne smem ni da pomislim. :)

Danas se već uveliko koristi tkz. troslojna arhitektura pri izradi sajtova. Evo Predrag ti je spomenuo MVC (Model View Controler), na kome je zasnovana većina Framework-ova za PHP. To ne znači da ti sad moraš da koristiš neki Framework, ali bi bar trebao da imaš u vidu to razdvajanje slojeva pri kreiranju nekog sajta. U tom cilju, možda bi bilo dobro da za početak probaš Smarty, najpoznatiji (po mom mišljenju i najbolji :)) template engine za PHP. Probaj recimo da taj sajt koji si spomenuo u poruci odradiš sa Smarty-jem, i koristeći taj prinicip razdavajanja logičkog i prezentacionog sloja. Videćeš koliko će kod da ti bude mnogo "čistiji", jasniji i lakši za održavanje. A kad jednom probaš Smarty, verovatno više nikad nećeš moći bez njega. Tako je barem bilo u mom slučaju. :)

A i naravno, OOP - bez toga ništa...


Koliko znam objektno programiranje uglavnom nije korisceno do PHP 4 a mnogi sajtovi koji su nastajali do tada itekako su bili kompleksni i slozeni. E sad nemojte pogresno da me shvatite, ja ne kazem da je funkcijsko programiranje bolje. Naravno cim je izmisljeno objektno posle funkcijskog naravno da je bolje objektno. Ali kao vezbu mislim da je pocetnicima bolje da prvo naprave neki prostiji sajt pomocu funkcijskog programiranja. A jos bolje zbog dizajna i uvezbavanja mozda je najbolje da prvo naprave neki statican sajt samo u cistom HTML i CSS.

Mali sajtovi za vesti tipa blic.rs gde nema ni registracije ili obicni portali u kojima administrator unosi samo neke tekstove i slike na pojedinim polozajima na sajtu, je sasvim dovoljno i ekonomicno i funkcijsko programiranje ja bar mislim. Naravno pocetnici kad savladaju funkcijsko programiranje onda sve te male sajtove da prebace u objektno programirani sajt.

Znaci bolje je naravno koristiti objektno programiranje, ali ne verujem da pocetnik moze odma da krene sa takvim programiranjem jer nema iskustva. Kako da on pravi klase ako ne rasclani lepo objekte ?? Mozda nisam u pravu ali mislim da bi "objektni" program pravilno napravili treba dobro rasčlaniti i grupisati objekte. Kasnije je lako praviti klase i razmestati te objekte na sajtu. E sad smatram (naravno mozda nisam u pravu) da bi pocetnici naucili kako da uocavaju objekte i da ih grupisu najbolje je da prvo krenu sa funkcijskim programiranjem. Jer prakticno svaka funkcija moze da se nazove objektom. Pa ako na primer nekoliko funkcija ima iste metode i izvrsavaju slicne radnje, da ih grupisu u klase itd.

Naravno da funkcijsko programiranje i rasparcavanje html kodova u promenjljivima nije idealno, a ko zna mozda i najgori nacin, ali pocetnicima je bolje predloziti bilokakve principe da bi krenuli u konkretne stvari, a ne da im ne damo nikakve savete.

Predloziste neke programe ili sta??? Ja sam sve radio u noteped. Naravno slazem se da kad god mozes da koristis neki alat koji olaksava zivot bilo kako onda ga treba koristiti. Ali za pocetnike je mislim opet bolji noteped kako bi stekli rutinu. A kasnije da krenu sa pomagalima.

Volim da dajem savete jer sam i ja bio u takvoj situaciji kad pomoci niotkuda a moram resiti problem. U tim trenucima mi je bilo vazno da dobijem bilo kakvo resenje mog problema pa i ono najgore ali da ipak odradi poso nego ne dobiti nikakvo resenje.

A konstatacija da funkcijskim programiranjem ne mozes na jednom mestu menjati neke delove sajta vec to moras da menjas na veci broj mesta apsolutno nije tacno !!!! Sta god da pozlim da promenim sad na sajtu menjam to samo na jednom mestu u jednoj promenjljivoj koja "nosi" prikaz toga necega. Bilo to da je pozadina, dugme, neki tekst ili bilo sta.

Objektno programiranje nije nastalo iz potrebe da bi se na "jednom mestu" menjale stvari na sajtu, jer i funkcijsko programiranje to omogucava, vec je objektno programiranje nastalo iz potrebe da se program vremenom brzo, jednostavno nadogradjuje. Ali ne da se nadogradjuje tipa promena dugmeta, pozadine ili bilo kog manjeg dela, nego da se nadogradjuje program. Mozda gresim ali to je moje msljenje. Nadam se da je ovo slobodan forum na kome se mogu izneti sva razmisljenja.

[Ovu poruku je menjao iizuzetan dana 30.03.2009. u 12:57 GMT+1]
 
Odgovor na temu

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Moderator
Član broj: 31848
Poruke: 1792
91.148.77.*

Sajt: norway.dakipro.com


+190 Profil

icon Re: pomoc naprednom pocetniku,tj. preporuka neke knjige30.03.2009. u 11:45 - pre 183 meseci
Totalno je ok to sto zelis da dajes savete, samo po stazu i po iskustvu koje imas i ti si i sam pocetnik te previse cesto dajes pogresne savete umesto da radis kao i svi pocetnici, citas i skupljas fore.
Diskutabilno je da li bi neko mogao odma da krene sa oo programiranjem ili ne, nakon nekog osnovnog koda uz dobre tutore i tutorijale. Ja sam recimo odmah krenuo sa malo mesovitim stilom, odmah sa objektima i smartijem i MVC, pa sam tek posle bio prinudjen da radim u "klasicnom" kodu, tako da tvoja tvrdnja ne stoji bas.

I definitivno nije bolje pocetnicima davati bilokakav savet, a pooogotovo ne pogresan, jer ovo sto se pise na forumu stoji tu i za buduce posetioce, pa i one pasivne koji ljudi dodju i citaju i pretrazuju i citaju jos a kojih nema malo. ES forumi se odlikuju po svom kvalitetu diskusija, a ovo sto ti vec neko vreme i nekoliko puta pises je primer kako NE treba raditi.

Nacin koji ti predlazes je jedino bolji od nacina da se u .html fajlovima ubacuje php kod (cak i ovo je bolje u nekim situacijama staticnih sajtova).

Uopste ne kontam sta si tvojim prvim postom ovde hteo da kazes, jer se tema odnosi na pomoc naprednom pocetniku, i lepo se razvila u pisanje klasa i rad sa njima, i ti odjednom tu ulices sa nekim tvojim 'iskustvima' iz nijednog napisanog sajta kako treba raditi, da se razmisljam da prilikom sredjivanja tema lepo obrisem poslednjih par postova.

Tema sa predlozima editora postoji, cak je to i TOP tema, citaj malo po forumu, nemoj da si lenj. Vec sam ti jednom napisao za ovu temu.

A deo oko menjanja templejta ti je Nikola lepo objasnio, znaci to moze teoretski, ali samo u one-man-show projektima, cim sedne neki koder za tvoj kod iz ozbiljnije firme, znace koliko je sati.

Totalno ti je pogresan stav da posle 3 meseca pisanja php koda i html-a vise nisi pocetnik, a ovako neke napredno-osnovne stvari neznas. To zakljucujem na osnovu tvog texta
"Ali za pocetnike je mislim opet bolji noteped kako bi stekli rutinu. A kasnije da krenu sa pomagalima."

Opet, sve ovo su gore dobronamerni saveti (sto kazu, konstruktivna kritika), kako bi izbegao da ti teme budu obrisane pa da mislis da ljudi na forumu imaju nesto licno protiv tebe, daleko od toga, sumnjam da te neko poznaje licno ovde. A i da ti se ne bi desavali biseri kao kad si poslednji put poceo da teoretises o nicim izazvanim 'zagonentim' nizovima i problemima, pa kad si ukapirao da gresis povukao si se cutanjem umesto da lepo priznas (sebi, ne drugima) da gresis i da ne znas jos uvek dovoljno. AKo hoces da se pokazes, cinis to na pogresan nacin, u reputaciji moze da se ode i u 'minus'
Ako nemas sta pametno da kazes, nekad je bolje precutati
Znaci prati nove postove i teme, i kad vidis neki pocetnicki laksi problem, na koji sugurno znas dobar odgovor, tad se pokazi. Prihvati zajednicu da bi te prihvatila lepo.

P.S. vidim da si dodao, pa da dodam i ja: Uvek mozes iznositi svoje misljenje, normalno, ali na odgovarajucu temu.
 
Odgovor na temu

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Moderator
Član broj: 31848
Poruke: 1792
91.148.77.*

Sajt: norway.dakipro.com


+190 Profil

icon Re: pomoc naprednom pocetniku,tj. preporuka neke knjige30.03.2009. u 11:50 - pre 183 meseci
Anex posta na deo
"Jer prakticno svaka funkcija moze da se nazove objektom. Pa ako na primer nekoliko funkcija ima iste metode i izvrsavaju slicne radnje, da ih grupisu u klase itd."

Ne moze to tako, nije poenta OOP-a da sve funckije budu u jednoj klasii da su iste ili slicne, vec u mnogo drugih stvari kao sto su recimo nasledjivanje (da ne nabrajam, pisalo se o tome). OOP ne moze tek tako da se skonta iz pisanja funkcija, to je totalno drugaciji pristup problemima i resenjima, mozda je bolje za pocetak sa OOP citati recimo literaturu predvidjenu za oop, nevezano za php, recimo za Javu, ja sam odatle dosta skontao o ideji OOP-a.
Prvo pricitas znaci teoriju o metodama i funckijama, kao i razlikama izmedju njih (ne moze recimo funkcija ili nekoliko funckija da ima metode, pa i iste). Babe i zabe, postoji razlog sto se metoda ne zove funckija ili klasa...
 
Odgovor na temu

iizuzetan

Član broj: 186478
Poruke: 375
*.adsl.verat.net.



+16 Profil

icon Re: pomoc naprednom pocetniku,tj. preporuka neke knjige30.03.2009. u 12:06 - pre 183 meseci
A jeste covek je napisao napredni pocetnik. Procitao sam ali smisao "napredni" mi je na pocetku promako. Ok onda ako zna funkcijsko programiranje ili ga to ne zanima neka preskoci ova tri moja odgovora na temu.

Ok moderatore skontao sam sta je to sto ti bode oci vezano za moje pisanje, tako da u buduce neces imati vise "problema" samnom.
 
Odgovor na temu

Tudfa
Jovicevic Vladimir

Član broj: 152699
Poruke: 384
*.dynamic.sbb.rs.



+3 Profil

icon Re: pomoc naprednom pocetniku,tj. preporuka neke knjige30.03.2009. u 13:15 - pre 183 meseci
Primetio sam ovu temu ranije, i mislim da je odlična i da bi bila korisna, naročito ako bi se priključivalo više ljudi svojim savetima i idejama.
No pre nego što krenem da iskomentarišem nešto što sam primetio,
hteo bi da predložim nešto u vezi same teme, čisto da ne bude da tema ide u off.

Evo npr. možda bi mogli da napravimo i klasu Configuration za rad sa konfiguracinim parametrima tipa max_email_chars, max_username_chars itd...

Ideja bi bila sledeća :

- imamo tabelu u kojoj čuvamo konfiguracione parametre (tabela se sastoji od dva polja - config_name i config_value koji predstavljaju složen primarni ključ)
- imamo singleton klasu Configuration koja nam omogućava manipulaciju tim parametrima

Eto, to je ideja, pa ako se autor teme složi da je tako nešto potrebno(mozda je planirano da se drugačije odradi config), priložiću klasu.

A sad off

Citat:
iizuzetan:
Takodje sam reko da je bolje naravno koristiti objektno programiranje, ali ne verujem da pocetnik moze odma da krene sa takvim programiranjem jer nema iskustva.


Nešto nisam baš siguran u vezi ovoga...

Generalna razlika je stil samog programiranja plus OOP je fleksibilniji po nekim pitanjima, daje više mogućnosti, pa zbog toga treba da se nauči više pravila ,
ali nikako ne bih rekao da je problem naučiti OOP bez učenja proceduralnog programiranja. Ja sam učio prvo proceduralno, ali znam i neke ljude koji
su odmah krenuli od OOP-a.

@izuzetan

I još nešto...Mešanje logike i prezentacije je nešto najgore što možeš sebi da uradiš.
Mislim, tebi će sve raditi, ali je menjanje dizajna i razumljivost koda u tom slučaju je veoma otežano.
Cilj je da programer radi programiranje a dizajner dizajn nebitno da li si ti u ovom trenutku i jedno i drugo.
To razdvajanje mozeš da izvedeš zavisno od veličine sajta i ličnih sklonosti pomoću Smarty-a kao
što je već rečeno ili pomoću samog php-a. E sad ne može se reći koristi Smarty ili nemoj,
samo se može reći treba ti Smarty ili ne s'obzirom na obim projekta koji radiš.

Pošto ovo nije tema neću više da komentarišem a evo jedne dobre teme o ovome,
gde se govori o tome šta je Smarty, da li je potreban i koje su alternative
u razdvajanju logike od prezentacije samo pomoću php-a :

http://www.elitesecurity.org/t...0-Ovaj-Smarty-je-odlicna-stvar
 
Odgovor na temu

Tudfa
Jovicevic Vladimir

Član broj: 152699
Poruke: 384
*.dynamic.sbb.rs.



+3 Profil

icon Re: pomoc naprednom pocetniku,tj. preporuka neke knjige02.04.2009. u 14:00 - pre 183 meseci
Evo one Configuration klase u nekom osnovnom obliku, koji može posle po potrebi da se doradjuje.
U prethodnom postu sam rekao da je potrebna tabela koja sadrzi samo dva polja - config_name i config_value,
gde zapravo samo config_name treba da bude primarni ključ(a ne kako sam prvi put slučajno naveo oba polja).
Naravno ako neko od Vas ima neke sugestije,primedbe ili predloge neka kaže da bi prepravili.

Code:

<?php

class Configuration
{
    private static $instance;
    private $arrConfiguration = array();
    
    private function __construct()
    {
         //izgled ovog reda zavisi od toga kako manipulišete bazom podataka
        $rows = SingletonDatabase::getInstance()->get_rows('SELECT * FROM configuration');
        
        //ovde moze neka provera sta je povuceno iz baze tipa is_array i sizeof tj. count
        
        foreach($rows as $row)
        {
            $this->arrConfiguration[$row['config_name']] = $row['config_value'];
        }
    }
    
    private function __clone(){}
    
    public static function getInstance()
    {
        if (!self::$instance instanceof self)
        {
            self::$instance = new self;
        }
        return self::$instance;
    }
    
    public function getParameter($parameter)
    {
        return (isset($this->arrConfiguration[$parameter]) ? $this->arrConfiguration[$parameter] : false);
    }
    
    public function __destruct(){unset($this->arrConfiguration);}
    
}
?>


Eto to bi bio jedan od načina za manipulaciju konfiguracionim parametrima,
a drugi bi bili preko nekog ini fajla ili xml fajla ili možda čuvanja svih
konfiguracionih parametara u jednom nizu u .php fajlu.

Samo par komentara što se tiče samog koda...

Klasa funkcioniše tako što se pomoću Configuration::getInstance()->getParameter('ime_parametra') dobije vrednost
trazenog parametra ako takav postoji, u suprotnom vraća false. Isto tako singleton patern obezbedjuje da u okviru
jednog skripta imamo samo jednu instancu objekta klase Configuration.

Izostavio sam metodu setParameter('config_name','config_value')koja bi updejtovala vrednost postojeceg parametra,
jer bi izgled te metode zavisi od klase za upravljanje bazom podataka. Takodje mogla bi
da se doda i metoda tipa addParameter('config_name','config_value') koja dodaje novi parametar,
ako za tim ima potrebe.
 
Odgovor na temu

amitkic
student
zvechan

Član broj: 186610
Poruke: 42
82.114.95.*



Profil

icon Re: pomoc naprednom pocetniku,tj. preporuka neke knjige02.04.2009. u 20:43 - pre 183 meseci
ajde sada nastavak


P.S. Izgleda da ovde leba ima samo od borisa
 
Odgovor na temu

amitkic
student
zvechan

Član broj: 186610
Poruke: 42
82.114.95.*



Profil

icon Re: pomoc naprednom pocetniku,tj. preporuka neke knjige06.04.2009. u 17:17 - pre 183 meseci
Poslo mi čovek kako kaže "školski" primer sajta. Ajd neka ga neko (iskusniji) pogleda i da mi kaže šta misli o njemu.
Prikačeni fajlovi
 
Odgovor na temu

b0ris
Boris Vujicic
Senior PHP programer
Beograd

Član broj: 126587
Poruke: 158
*.dynamic.sbb.rs.



+2 Profil

icon Re: pomoc naprednom pocetniku,tj. preporuka neke knjige09.05.2009. u 21:28 - pre 181 meseci
Nastavljam sad. Malo sam se bio smorio jer niko nije nista postovao.
Sad cu da odradim ostatak, samo caskom da procitam ovih par postova :)
---------------------------------------------------------------------
Just do it.
 
Odgovor na temu

b0ris
Boris Vujicic
Senior PHP programer
Beograd

Član broj: 126587
Poruke: 158
*.dynamic.sbb.rs.



+2 Profil

icon Re: pomoc naprednom pocetniku,tj. preporuka neke knjige10.05.2009. u 12:54 - pre 181 meseci
Cao. Evo odradio sam frontend. Ovih dana cu da odradim backend.
Naravno ovo je sve jos uvek u startnoj fazi.
Posto budem odradio backend, pocecu da prosirujem.
@Tudfa: Config klasa je naravno dobro dosla, samo mislio sam da prvo idemo polako sa onim najosnovnijim, i onda da polako dodajemo malo interesantnije stvari :) (kao sto je config :) )
Dok sam pravio front naleteo sam na par greski u prethodnim klasama tako da cu ih ponovo postovati.
Unapred se izvinjavam na ponovnom postovanju istih klasa.

Tree construction
Code:

- base
-- class.db.php
-- class.session.php
-- class.urlhandler.php
- css
-- content.css
-- global.css
-- menu.css
- pages
-- skelet
--- footer.php
--- header.php
--- menu.php
-- gallery.php
-- home.php
-- contact.php
- uploads
-- pictures
--- test_photo_1.png
- contact.php
- gallery.php
- index.php


./base/class.db.php File
Code:

<?php
/**
* Class for DB management. In here we will create connection to our DB and execute queries. 
* This is just basic class which will be changed later. All errors will be handled later.
* @version 0.2 beta
* @author www.elitesecurity.org (written by member b0ris)
*/

class DB{
    /**
    * Connection parameter which holdes information about host account
    * @access private
    * @name host
    */
    private $db_host = "";
    
    /**
    * Connection parameter which holdes information about password
    * @access private
    * @name password
    */
    private $db_password = "";
    
    /**
    * Connection parameter which holdes information about data base to which we are going to connect.
    * @access private
    * @name database
    */
    private $db_database = "";
    
    /**
    * Connection parameter which holdes user information.
    * @access private
    * @name user
    */
    private $db_user = "";
    
    /**
    * MYSQL Link indentifier
    * @access private
    * @name linkId
    */
    private $db_linkId = 0;    
                   
    /**
    * In here we will set up inital settings for database and connect to our DB
    * @param string host host to define
    * @param string user username used to connect to database
    * @param password password used for connection
    * @param databse database name used for connection
    * @return bool|MYSQL_Link returns bool if something went wrong or MYSQL Link if everything went ok 
    */
    function DB($host, $user, $password, $database){
      /**
      * Setting up parameters
      */
      $this->db_host = $host;
      $this->db_user = $user;
      $this->db_password = $password;
      $this->db_database = $database;
      
      /**
      * Establishing connection
      */
      return $this->connect();   
    }
    
    /**
    * Creating mysql connection.
    * @return bool connection established or not
    * @version 1.01 Removed checkup for password since password can also be empty. :| Yea ppl use this sometimes also.
    */
    function connect(){
      /**
      * Checking if everything is filled up so we can establish connection.
      * We can also use empty() function in this if statment.
      */
      if(($this->db_host != "") && ($this->db_user != "")  && ($this->db_database != "")){
        $this->db_linkId = mysql_connect($this->db_host, $this->db_user, $this->db_password);
        if(!$this->db_linkId){
          /**
          * Handle error.
          */
          return false;
        }else{
          if(!@mysql_select_db($this->db_database, $this->db_linkId)){
            
            /**
            * Handle error.
            */
            return false;  
          }
        }
        return true;
      }else return false;
    }
    
    /**
    * Executing query.
    * @param string query Query for mysql
    * @return mysql_result|die_msg Return result of query or error message 
    * @version 1.01 Removed die. It was returning bool instead of mysql_result
    */
    function query($query){
        return mysql_query($query, $this->db_linkId);        
    }
    
    /**
    * Executing query.
    * @param string query Query for mysql
    * @return array Returns result of query in array
    * @version 1.01 Update in while statement. We were executing query each time we went through while (Infinite loop)
    */
    function getrows($query){
      /**
      * Query result array
      */
      $myRes = array();
      /**
      * Running thorough results and storing them in our result array
      */         
      $res = $this->query($query);
      while($row = mysql_fetch_array($res)){
        $myRes[] = $row;
      }  
      return $myRes;
    }
}  
?>


./base/class.session.php File
Code:
<?php
/**
* Class for session management. It will be used to put in and take out values from session.
* This is just basic class which will be changed later. All errors will be handled later.
* @version 0.1 beta
* @author www.elitesecurity.org (written by member b0ris)
*/

class Session{
    
    /**
    * @desc To be defined later.
    */
    function Session(){
    }
    
    /**
    * @desc Places value under desired name into session. This will be an array.
    * @param string name Name under which value will be remembered.
    * @param string|int value Value which will be saved under name.
    */
    function addValue($name, $value){
        $_SESSION[$name][] = $value;
    }
    
    /**
    * @desc Returns value or array, depending on how many values are stacked under same name.
    * If name does not exist program will be terminated.
    * @param strin name Name under which value or values are stacked.
    * @return string|int|array
    */
    function getValue($name){
        /**
        * Does given name exists?
        */
        if(isset($_SESSION[$name])){
            /**
            * If there is only one value in array we will return it. If more we will return whole array.
            */
            if(count($_SESSION[$name]) == 1) return $_SESSION[$name][0];
            else return $_SESSION[$name];
        }
        /**
        * No! We should handle an error here.
        */
        else return false;
    }
    
    /**
    * @desc This method will remove all the values under given name.
    */
    function removeValue($name){
        unset($_SESSION[$name]);
    }
    
    /**
    * @desc This method will start up session. It should only be called after all the classes are loaded, and before any output begins.
    */
    function startSession(){
        session_start();
    }
}
?>


./base/class.urlhandler.php File
Code:
<?php
/**
* Class for url management. This class will take all the parameters and give them back in one unified way.
* Functions which will process all $_SERVER data should be created here.
* This is just basic class which will be changed later. All errors will be handled later.
* @version 0.1 beta
* @author www.elitesecurity.org (written by member b0ris)
*/

class urlHandler{

    /**
    * @desc Contains all POST values in an array.
    * @access private
    * @name post_vars 
    */
    private $post_vars;
    
    /**
    * @desc Contains all GET values in an array.
    * @access private
    * @name get_vars 
    */
    private $get_vars;
    
    /**
    * @desc In here we will catch all the post and get variables and process them. 
    * We will add this checkups when we create security class.
    */
    function __construct(){
    }
    
    /**
    * @desc Will be processed upon creation of security class.
    */
    private function processGet(){
    }
    
    /**
    * @desc Will be processed upon creation of security class.
    */
    private function processPost(){
    }

    /**
    * @desc Returns value this regarding the method. 
    * If values have the same name, then second parameter can be used to define a method.
    * @param string name Takes name of the value
    * @param post|get method Type of parameter which you want to take. Can be Post or Get.
    * @return string
    */
    function getValue($name, $method=""){
        if(!$method){
          if(isset($_POST[$name])) return $_POST[$name];
          if(isset($_GET[$name])) return $_GET[$name];
        }
        else{
          $var = '_'.$method;
          if(isset($$var[$name])) return $$var[$name];
        }
    }
    
    /**
    * @desc Process domain name and returns domain name.
    * @return string Domain name
    */
    function getDomainName(){
        return $_SERVER['HTTP_HOST'];
    }
    
    /**
    * @desc Used to create url links. To be build up more later. 
    * For now it is good to use it because all links will be created through this function, so when we do some changes to url
    * we will only do it in this function.
    * @param string page_name Name of the page.
    * @return string Url 
    */
    function createUrl($page_name){
        return $page_name;
    }
}
?>


./css/content.css File
Code:
#content{
  clear:both;
  text-align:left;
}


./css/global.css File
Code:
BODY, TD {
  font-family: Verdana;
  font-size:11px;
  text-align:center;
  background-color: #F2F2F2;
}

A {
  text-decoration:none;
  color:#FFB900;
}

A:Hover {
  color:silver;
}


./css/menu.css File
Code:
#menu{
  clear:both;
  margin: 0 auto;
  text-align: left;
  width:300px;
}
#menu_option{
  float:left;
  width:100px;
}
#menu A{
  font-weight: bold;
}


./pages/skelet/footer.php File
Code:
<?php echo "\n"; ?>
<!-- We can place some code here which is needed on every page (for example google analytics code -->
</body>
</html>


./pages/skelet/header.php File
Code:
<?php
  /**
  * @desc Here we will include everything we need for any page. Attention to SEO (search engine optimization)
  * will be established latter when we move page display into data base. NOTE: Short tags are not used on purpose.
  */
  // Including all the classes we need to display a page. Instead of including this classes one by one each time
  // we could also use _autoload method which php provides
  include "./base/class.urlhandler.php";
  include "./base/class.db.php";
  include "./base/class.session.php";
  
  // Creating instance of urlHandler which we will use later.
  $url = new urlHandler();
  // Creating instance of db (connection to data base)
  if(!$db = new DB("localhost", "root", "", "elitesecurity")){ echo "Could not connect to database!";exit(1);}
  // Creating instance of session and starting up the session (note: session must start before any display happens.
  // Be sure that you dont have enter (\n) as startup char. This can create errors.) 
  $session = new Session();
  $session->startSession();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Expires" content="Fri, Jan 01 1900 00:00:00 GMT">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="content-language" content="sr">
<meta name="author" content="elitesecurity">
<!-- <meta http-equiv="Reply-to" content="@.com"> -->
<meta name="generator" content="Elitesecurity CMS <boris vujicic>">
<meta name="description" content="Home page, test page for basic CMS">
<meta name="keywords" content="">
<meta name="creation-date" content="09/20/2007">
<meta name="revisit-after" content="15 days">
<title>Home</title>
<link rel="stylesheet" type="text/css" href="./css/global.css">
<link rel="stylesheet" type="text/css" href="./css/menu.css">
<link rel="stylesheet" type="text/css" href="./css/content.css">
</head>
<body>


./pages/skelet/menu.php File
Code:
<?php
/**
* @desc Creating menu. Latter we will create dynamic page creation.
*/
?>
<div id="menu">
  <div id="menu_option"><a href="index.php">Home</a></div>
  <div id="menu_option"><a href="gallery.php">Gallery</a></div>
  <div id="menu_option"><a href="contact.php">Contact</a></div>
</div>
<br/><br/>


./pages/contact.php File
Code:
<?php
  /**
  * @desc Simple page which is using urlhandler class.
  */
  
  // Getting email and msg values which are posted and storing those values in corresponding variables.
  $email = $url->getValue("email");
  $msg = $url->getValue("msg");
  
  // Checking if values aer empty
  if($msg != "" && $email != ""){
    // Do something. For example send email
    /*
    if(mail("[email protected]", "Contact", "Email:$email<br/>\n".$msg)){
      echo "Message sent.";                                           
    }else{
      // Handle error.
    }
    */
    echo "Message sent.";
  }
?>
<div id="content">
  <form action="contact.php" method="post">
    Email: <input type="text" name="email" id="email" /><br/><br/>
    Message: <br/>
    <textarea cols="50" rows="5" name="msg"></textarea><br/><br/>
    <input type="submit" value="Ask us?" />
  </form>
</div>


./pages/gallery.php File
Code:
<?php
  /**
  * @desc Simple page which is using db class.
  */
?>
<div id="content"> 
<?php
  //  Setting up parameter which will tell us if we have any pictures in database.
  $haspictures = false;
  // Executing query
  $pictures = $db->getrows("SELECT * FROM pictures");
  // did we got something back?
  if($pictures) $haspictures = true;
  // We did. Ooo looky looky we have some photos :) Lets display them.
  if($haspictures){
    foreach($pictures as $key => $value){
      echo "<div id=\"img\"> <img src=\"./uploads/pictures/{$pictures[$key]['picture_name']}\" alt=\"{$pictures[$key]['picture_name']}\"/></div>";
    }
  }else{?>
<p> Currently there are no pictures. </p>
<?php }?>
</div>



./pages/home.php File
Code:
<?php
/**
* @desc Just some content without any php.
*/
?>
<div id="content">
  <p>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis dictum pellentesque sem. Praesent purus dui, cursus eu gravida sit amet, elementum eu justo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Suspendisse sed ante at tellus pulvinar elementum sit amet vel ante. Nulla in arcu sit amet lacus placerat pulvinar consectetur non justo. Donec risus erat, sagittis at aliquet eget, faucibus sit amet ante. Morbi ultrices purus et nunc sagittis ultrices. Vivamus auctor facilisis volutpat. Fusce vel diam massa. Vestibulum fringilla pretium rutrum. Ut eros velit, dignissim sit amet sollicitudin nec, eleifend malesuada tellus. Ut in laoreet velit. Nulla lobortis tincidunt velit, ac congue dui ullamcorper ut. Aliquam commodo urna non sapien ornare nec placerat lacus eleifend. Quisque ut velit lacus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
  </p><p>
    Nulla eget turpis a tellus porttitor ultricies. Vestibulum ut ultricies justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum urna dui, sollicitudin eu consectetur nec, posuere sit amet eros. Donec in erat ut elit euismod elementum. Pellentesque vel arcu odio. Aliquam fermentum cursus erat ac egestas. Sed vel malesuada nunc. In volutpat, sem nec dictum suscipit, tortor magna volutpat sem, nec dictum diam metus vel diam. Vestibulum fringilla nulla vitae leo euismod nec commodo libero ullamcorper. Nulla facilisi. Curabitur tempus urna at felis iaculis elementum. Praesent a metus nulla. Duis consectetur, neque ut varius venenatis, diam justo tristique nisi, et ultrices turpis lorem a ante. Quisque sit amet magna leo. Etiam vel mi diam, quis ullamcorper diam. Vestibulum vitae nisl odio.
  </p><p>
    Maecenas tellus ante, rhoncus dictum ullamcorper nec, accumsan vitae diam. Etiam vitae enim metus, id luctus eros. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse fermentum diam a est dictum sit amet commodo sapien venenatis. Duis dignissim bibendum elit, sit amet sodales est fermentum id. Aliquam scelerisque dignissim elit, sed aliquet ligula cursus vitae. Mauris lectus nulla, porttitor interdum placerat quis, lacinia ut nisl. Quisque porta consectetur velit at ornare. Etiam in enim ut sem mattis porta. Donec ac purus magna. Morbi tellus felis, convallis at placerat vitae, facilisis in nunc. In ipsum tortor, hendrerit a interdum non, facilisis mattis felis.
  </p><p>
    Donec viverra mollis nibh id convallis. In lobortis, sapien elementum pulvinar tempus, lacus nibh semper massa, congue pharetra mauris ligula quis mi. Phasellus placerat euismod sagittis. Nullam ornare, massa eleifend iaculis aliquet, lacus urna vestibulum enim, a scelerisque nisi nisl nec elit. Duis dolor nibh, volutpat eget adipiscing sed, aliquam eget sapien. Etiam in pretium purus. Morbi odio leo, lobortis et rutrum tincidunt, pharetra eget mauris. Donec lobortis turpis vel elit elementum rhoncus. Phasellus vitae arcu dolor. Aenean eget lacus nibh, eu rutrum ipsum. Pellentesque mollis leo condimentum dui commodo iaculis. Quisque rutrum lorem nec nibh mattis malesuada. In hac habitasse platea dictumst. Duis nec purus purus. Suspendisse fermentum porta nibh, quis vulputate magna pellentesque vitae. Curabitur eu tortor eu quam tincidunt egestas ac sit amet mauris.
  </p><p>
    Maecenas tempus nibh eget augue fringilla at egestas enim ultrices. In a velit gravida mi sodales vehicula. In vestibulum elementum velit sit amet luctus. Vestibulum et auctor ipsum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec et lectus eget sapien porttitor porttitor pretium sit amet ligula. Sed et erat in quam bibendum aliquet. Integer porttitor pellentesque nulla, quis vestibulum lectus ultricies sed. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Cras ut augue augue. In eget accumsan leo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec quis diam velit, non ultrices quam. Curabitur vitae urna nec lorem adipiscing tincidunt id id velit. Aliquam blandit ornare metus, sed adipiscing diam feugiat vitae. Mauris hendrerit hendrerit turpis, id feugiat mi interdum nec. 
  </p>
</div>


contact.php File
Code:
<?php
  include "./pages/skelet/header.php";
  include "./pages/skelet/menu.php";
  include "./pages/contact.php";
  include "./pages/skelet/footer.php";  
?>


gallery.php File
Code:
<?php
  include "./pages/skelet/header.php";
  include "./pages/skelet/menu.php";
  include "./pages/gallery.php";
  include "./pages/skelet/footer.php";
?>


index.php File
Code:
<?php
  include "./pages/skelet/header.php";
  include "./pages/skelet/menu.php";
  include "./pages/home.php";
  include "./pages/skelet/footer.php";
?>


SQL
Code:

pictures  CREATE TABLE `pictures` (                                                      
            `picture_id` int(10) unsigned NOT NULL auto_increment,                       
            `picture_name` varchar(255) collate utf8_unicode_ci default NULL,            
            PRIMARY KEY  (`picture_id`)                                                  
          ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci  

---------------------------------------------------------------------
Just do it.
 
Odgovor na temu

Zmaj
Predrag Krstić
web developer
Zrenjanin

Član broj: 1035
Poruke: 382

Sajt: https://pkrstic.wordpress..


+4 Profil

icon Re: pomoc naprednom pocetniku,tj. preporuka neke knjige11.05.2009. u 04:02 - pre 181 meseci
malo je off ali ovo sto se u ovoj temi sastavlja je okvir za neki osnovni framwork, a to se moze se naci vec zavrseno u CodeIgiteru, koji je krajnje jednostavan za instalaciju i upotrebu, za one koji neznaju u pitanju je MVC framework. Na sajtu se nalazi odlican video tutorijal koji za nekih 20 minuta objasni instalaciju i jedan jednostavan primer. U njemu sam odradio par projekata i vrlo sam zadovoljan, jer sve sto sam i sam godinama razvijao nasao sam u njemu. CodeIgniter je odlican za manje projekte, kojih je vecina. Nije mi zelja dapotcenjujem bilo ciji rad u ovoj temi, jednostavno sam i sam odustao od pravljenja svog framworka kad sam proba CI, jer je mnogo lakse koristiti gotovo sve i testirano od strane hiljada ljudi nego pisati sam.
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.yu.



+33 Profil

icon Re: pomoc naprednom pocetniku,tj. preporuka neke knjige11.05.2009. u 11:00 - pre 181 meseci
Slažem se... I ja sam ranije uvek pokušavao da pravim nešto svoje, da razrađujem neki svoj radni okvir, a onda sam uvideo da to u stvari sve već postoji, a plus je odrađeno na mnogo kvaliteniji, profesionalniji način. Npr. zašto bi sad ja uzeo da pravim neki svoj template engine sistem, kad postoji Smarty. Ili da pravim neki database apstraction sloj kad postoji npr. ADOdb. Ima još mnogo takvih primera, ali poenta je da ne treba izmišljati "toplu vodu". Bar ja tako mislim...

Uglavnom, u poslednje vreme se najviše oslanjam upravo na Smarty, ADOdb Lite, zatim pojedine klase iz PEAR bibilioteke (Auth, Captcha, itd.), kao i poneke iz Zend Framework paketa (npr. Zend_Form, Zend_Mail, Zend_Registry, Zend_Json, itd.). Naravno, uz sve ovo koristim još par klasa koje sam baš ja napisao...

I da me neko ne shvati pogrešno, svaka čast Borisu na ovome što radi, jer to može da bude stvarno super kurs za nekoga ko se tek upoznaje sa OOP-om i nekim iole naprednijim prinicipima programiranja u PHP-u. Samo napred.
 
Odgovor na temu

Mister_rap
SE at Viacom

Član broj: 8822
Poruke: 2540
95.155.27.*

Jabber: mister_rap@jabber.com


+21 Profil

icon Re: pomoc naprednom pocetniku,tj. preporuka neke knjige11.05.2009. u 11:28 - pre 181 meseci
Cilj ove teme jeste da se korisnicima olaksa upoznavanje sa nekim framework-om. I naravno da skapiraju neke koncepte.
Takodje mogu da pitaju sve sto im nije jasno i da ucestvuju u razvoju ako to zele. Tako da je tema kao takva po mom licnom misljenju odlicna.

Sa druge strane CI, ZF, Cake, qCodo i sl. imaju niz prednosti ali za pocetnike moze da bude jako tesko da krenu sa ucenjem istih...
Takodje cesto se desava na vecim projektima da moras koristiti inhouse projekat jer jer racionalnije i jednostavnije, a njega je o5 pisalo recimo par ljudi sto ce reci da "personal" fw-i mogu da budu jako mocni i isplativi.
Meni licno ni jedan od fw-a sam po sebi nije dovoljan vec koristim posebne fw-e za testing, externe OR mappere i sl. A to nije mali broj tehnologija i treba da prodje odredjeno vreme da bi se neko upoznao sa istima.

Zakljucak je da svakako podrzavam fw-e ali mislim da ova diskusija stvara samo dodatnu konfuziju kod pocetnika koji ovo citaju.
 
Odgovor na temu

b0ris
Boris Vujicic
Senior PHP programer
Beograd

Član broj: 126587
Poruke: 158
*.dynamic.sbb.rs.



+2 Profil

icon Re: pomoc naprednom pocetniku,tj. preporuka neke knjige11.05.2009. u 17:58 - pre 181 meseci
Slazem se u potpunosti sa mister_rep.
Poenta je da ljudi shvate o cemu se radi (naravno da svi mi znamo za frameworke i milione kalsa koje mogu da se samo implementiraju).
Mislio sam da je najlakse da krenemo od pocetka (bukvalno od 0), i onda da polako dodamo neke prednosti.
Recimo sledece sto bih uradio, posle kreiranja cms-a, je prebacivanje sadrzaja stranica u DB i prikazivanje preko jedne strane.
Zatim sam planirao da ubacim Smarty da vide ljudi koliko olaksava posao i sta je to ustvari template engine (na samom primeru), a posle toga ko zna :)

---------------------------------------------------------------------
Just do it.
 
Odgovor na temu

vatri
Banja Luka, RS

Član broj: 68697
Poruke: 1006
*.dynamic.dsl.t-2.net.



+18 Profil

icon Re: pomoc naprednom pocetniku,tj. preporuka neke knjige14.05.2009. u 20:07 - pre 181 meseci
Ljudi tema je super, svaka cast i samo naprijed! Pohvale za borisa i ostale clanove i nadam se da ce se i ostali iskusniji (ima ih dosta na ovom forumu) ukljuciti u raspravu.

Mozda bi bilo dobro da moderatori preimenuju temu i da je stave u TOP, to je moj predlog.

Pozdrav i samo naprijed
 
Odgovor na temu

vatri
Banja Luka, RS

Član broj: 68697
Poruke: 1006
*.dynamic.dsl.t-2.net.



+18 Profil

icon Re: pomoc naprednom pocetniku,tj. preporuka neke knjige16.05.2009. u 21:50 - pre 181 meseci
E ljudi mene zanimaju dve stvari kod klasa:

Code:

 /**
    * Connection parameter which holdes information about host account
    * @access private
    * @name host
    */
    private $db_host = "";
...


Gore je u pitanju db klasa sa prve strane ove teme.
1. jel ima kakvu funkciju ovo @acces privat i @name host ili je to cisto komentar?
2. zasto se pise ovo private $db_host = ""?
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.yu.



+33 Profil

icon Re: pomoc naprednom pocetniku,tj. preporuka neke knjige16.05.2009. u 21:56 - pre 181 meseci
1. Da to je običan komentar, ali pisan PHPDoc sintaksom. Na taj način se mnogo jednostavno pravi dokumentacija uz pomoć nekih parser-a, kao što je phpDocumentator.
2. Ako si pitao za ono "private", onda je odgovor da tom članu klase ne bi moglo da se pristupa spolja, odnosno, taj član će moći da se koristi samo unutar klase. Takođe, privatni članovi neke klase nisu dostupni u klasama koje se izvode iz nje.
 
Odgovor na temu

b0ris
Boris Vujicic
Senior PHP programer
Beograd

Član broj: 126587
Poruke: 158
*.dynamic.sbb.rs.



+2 Profil

icon Re: pomoc naprednom pocetniku,tj. preporuka neke knjige16.05.2009. u 23:21 - pre 181 meseci
Sutra sam na putu ceo dan ali vec sledece nedelje cu postaviti osnovni CMS.
Pozdrav
---------------------------------------------------------------------
Just do it.
 
Odgovor na temu

vatri
Banja Luka, RS

Član broj: 68697
Poruke: 1006
*.dynamic.dsl.t-2.net.



+18 Profil

icon Re: pomoc naprednom pocetniku,tj. preporuka neke knjige17.05.2009. u 16:16 - pre 181 meseci
1. Nisam znao za tu PHPdoc sintaksu, moracu to pocet koristi...

2. Da razumijem sta je private ali zasto se dodjeljuje prazna vrijednost ?
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Moderator
Član broj: 32202
Poruke: 4391
93.86.132.*

Sajt: https://avramovic.info


+46 Profil

icon Re: pomoc naprednom pocetniku,tj. preporuka neke knjige17.05.2009. u 16:27 - pre 181 meseci
Pa inicijalizuje se na prazan string, da ne bude null
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

[es] :: PHP :: pomoc naprednom pocetniku,tj. preporuka neke knjige

Strane: 1 2 3 4

[ Pregleda: 17286 | Odgovora: 65 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.