[ alfa-pro @ 04.04.2010. 06:10 ] @
Radim inc fajl koji ce da generise HTML kod koji cu da uvozim sa funkcijom
Code:

require ();

to ce mi sluziti kao zadani izgled koji cu samo da uvozim u sripte da ne bi pravio zasebno...

problem je to sto mi pokazuje duplirani naziv menija... znaci imam meni


POCETNA | O NAMA | USLUGE | KONTAKT

a on meni na kraju kao rezultat ovako prikaze


pocetnaPOCETNA | o namaO NAMA | uslugeUSLUGE | kontaktKONTAKT

Sve ostalo radi fenomenalno bas kako sam zamislio samo eto meni malo koci!!!


Code:

<?php
class strana
{
  // Dodela Atributa Klase (STRANA)
  
  public $sadrzaj;
  public $title = 'Ivan Stojmenovic';
  public $keywords = 'Neodredjene kljucne reci jos uvek';
  public $dugmici = array( 'pocetna'     => 'pocetna.php', 
                        'onama'  => 'onama.php', 
                        'usluge' => 'usluge.php', 
                        'kontak' => 'kontakt.php'
                      );

  // Pocetak Operacije Klase (STRANA)
  public function __set($name, $value)
  {
    $this->$name = $value;
  }

  public function Prikazi()
  {
    echo "<html>\n<head>\n";
    $this -> PrikaziTitle();
    $this -> PrikaziKeywords();
    $this -> PrikaziStyles();
    echo "</head>\n<body>\n";
    $this -> PrikaziHeader();
    $this -> PrikaziMenu($this->dugmici);
    echo $this->sadrzaj;
    $this -> PrikaziFooter();
    echo "</body>\n</html>\n";
  }

  public function PrikaziTitle()
  {
    echo '<title> '.$this->title.' </title>';
  }

  public function PrikaziKeywords()
  {
    echo "<meta name=\"keywords\" sadrzaj=\"$this->keywords\" />";
  }

  public function PrikaziStyles()
  { 
?>   
  <style>
    h1 {color:black; font-size:24pt; text-align:center; 
        font-family:arial,sans-serif}
    .menu {color:black; font-size:12pt; text-align:center; 
           font-family:arial,sans-serif; font-weight:bold}
    td {background:white}
    p {color:black; font-size:12pt; text-align:justify; 
       font-family:arial,sans-serif}
    p.foot {color:black; font-size:9pt; text-align:center; 
            font-family:arial,sans-serif; font-weight:bold}
    a:link,a:visited,a:active {color:black}
  </style>
<?php
  }

  public function PrikaziHeader()
  { 
?>   
  <table width="100%" cellpadding ="12" cellspacing ="0" border ="0">
  <tr bgcolor ="#000000">
    <td align ="left"><img src = "logo.png" width="200" height="100" /></td>
    <td>
        <h1>Content Menagment Sistem</h1>
    </td>
  </tr>
  </table>
<?php
  }

  public function PrikaziMenu($dugmici)
  {
    echo "<table width='100%' bgcolor='black' cellpadding='4' 
                cellspacing='4'\n";
    echo "  <tr>\n";

    //Izracunaj velicinu dugmeta ($dugmici)
    $width = 100/count($dugmici);

    while (list($name, $url) = each($dugmici))
    {
      $this -> PrikaziButton($width, $name, $url, !$this->IsURLCurrentpage($url));
    }
    echo "  </tr>\n";
    echo "</table>\n";
  }

  public function IsURLCurrentpage($url)
  {
    if(strpos($_SERVER['PHP_SELF'], $url )==false)
    {
      return false;
    }
    else
    {
      return true;
    }
  }

  public function PrikaziButton($width, $name, $url, $active = true)
  {
    if ($active)
    {
      echo "<td width ='$width%'>
            <a href ='$url'>
            <img src ='s-logo.gif' alt ='$name' border ='0' /></a>
            <a href ='$url'><span class='menu'>$name</span></a></td>";
    }  
    else
    {
      echo "<td width ='$width%'>
            <img src ='side-logo.gif'>
            <span class='menu'>$name</span></td>";
    }  
  }

  public function PrikaziFooter()
  {
?>
    <table width = "100%" bgcolor ="black" cellpadding ="12" border ="0">
    <tr>
      <td>
        <p class="foot">&copy; 2010. Ivan Stojmenovic</p>
      </td>
    </tr>
    </table>
<?php
  }
}
?>


[ mitke013 @ 04.04.2010. 14:05 ] @
Citat:
alfa-pro

Code:

<?php
class strana
{

  public function PrikaziMenu($dugmici)
  {
    echo "<table width='100%' bgcolor='black' cellpadding='4' 
                cellspacing='4'\n";
    echo "  <tr>\n";



<table> element nisi zatvorio, probaj to pa javi.

I btw, ako ovako zamisljas OOP, malkice si pogresio

Code:

    if(strpos($_SERVER['PHP_SELF'], $url )==false)
    {
      return false;
    }
    else
    {
      return true;
    }


se pise ovako:
Code:

return strpos($_SERVER['PHP_SELF'], $url) ;


ili ako bas moras true i false (mada nema neke potrebe):
Code:

return strpos($_SERVER['PHP_SELF'], $url) ? true : false ;
[ alfa-pro @ 06.04.2010. 07:20 ] @
dobro zatvorio table tag.,.. nije do toga bilo pokusao sam i tvoj primer isto je sve bez ikakvih promena..

pazi ovo kada sam sklonio $url posto sam ga 2x pozvao kroz funkciju sve normalno radi


Code:

  public function PrikaziButton($width, $name, $url, $active = true)
  {
    if ($active)
    {
      echo "<td width ='$width%'>

            <a href ='$url'>   <=================<<<<

            <img src ='s-logo.gif' alt ='$name' border ='0' /></a>
            <a href ='$url'><span class='menu'>$name</span></a></td>";
    }  
[ VladaSu @ 07.04.2010. 19:33 ] @
Citat:
mitke013
I btw, ako ovako zamisljas OOP, malkice si pogresio :)


Kako ti zamisljas OOP?
[ mitke013 @ 08.04.2010. 11:45 ] @
Citat:
VladaSu: Kako ti zamisljas OOP?

OOP nije gomilanje funkcija na jedno mesto pa se to mesto nazove klasom. Objekat moze nesto da uradi, a ne samo da drzi funkcije; za tako nesto moze se koristiti i include fajla koji ce ih drzati.

Najjednostavnije objasnjenje:
tvoj program je komandir kasarne. Imas klasu vojnik, zastavnik, kapetan....

Tebi kapetan treba da organizuje jedan od visoko-intelektualnih zahteva tipicnih za vojsku; ciscenje piste, skupljanje lisca ili nesto slicno.

Code:

$captain = Captain::getAvailable() ;

Nema parametara. Klasa ce naci slobodnog kapetana tj. onaj koji je trenutno tu i nema zaduzenja.

Code:

$captain->cleanEverything() ;


Opet nema parametara. Kapetan ce dalje da organizuje taj posao. On ce naci slobodne vojnike na slican nacin i podeliti naredjenja. Pritom:
Code:

$soldier_1->cleanLeaves() ;
$soldier_2->cleanRanaway() ;
//itd

Vojniku treba metla; moglo je znaci i ovako:
Code:

$broom = Broom::getAvailable() ;
$soldier_1->cleanLeaves($broom) ;

Ali sto bi kapetan vojniku davao metlu; nije debil, moze i sam da je nadje. Pritom, ako jednog dana se kasarna modernizuje i dobije onaj kompresor sto oduva lisce, komanda vise nije validna. Ako se vratimo u programske vode, to znaci da bi svuda gde kapetan daje vojniku metlu ili nesto drugo, moralo da se promeni. Lakse je nauciti vojnika da se sam snadje:
Code:

class Soldier extends BasicMilitaryUnit
{
  public function cleanLeaves()
  {
    $cleaningDevice = $this->getCleaningDevice() ;
    // ocisti lisce koristeci $cleaningDevice 
  }

  protected function getCleaningDevice()
  {
    return Broom::getAvailable() ;
  }
}

Static metode je uvek lakse prepraviti nego dinamicke. Uvek ih je manje, a ako je protected, automatski znas da se ta metoda ne poziva ni sa jednog drugog mesta i da ne treba da juris kroz ceo program da proveris pozive.

Sve ove klase nasledjuju BasicMilitaryUnit klasu jer je za svo vojnicko osoblje identicno da treba da jedu, srede ujutru, obuju se, izadju na smotru itd. Da ne bi to isto pisali za svakog, lakse je staviti na jedno mesto.

Jos jedan primer nasledjivanja; u vojsci se belezi skoro svaki obavljeni posao. Posto to programer zna od pocetka, u svakoj metodi koja zahteva izvestaj na kraju ce pozvati:
Code:
  public function cleanLeaves()
  {
    $cleaningDevice = $this->getCleaningDevice() ;
    // ocisti lisce koristeci $cleaningDevice 

    $this->writeReport('Ocistio sam lisce') ;
  }

a BasicMilitaryUnit ima metodu:
Code:

abstract class BasicMilitaryUnit 
{
  protected function writeReport($report)
  {
    $name = $this->getName() ;
    $rank = $this->getRank() ;
   // snimi izvestaj koristeci tekst raporta, za ime i cin se metoda sama snasla
  }
}

OK? Nije; na ovaj nacin klasa vojnik prosledjuje fixni tekst. Ako se taj tekst negde snima (baza) i jednog dana tekst promeni, baza ce imati razlicite tekstualne vrednosti za isti posao. Bolje je:
Code:
  public function cleanLeaves()
  {
    $cleaningDevice = $this->getCleaningDevice() ;
    // ocisti lisce koristeci $cleaningDevice 

    $this->writeReport(Report::LEAVES_CLEANED) ;
  }


Sad se koristi konstanta iz klase Report. Neka je vrednost const LEAVES_CLEANED = 1 ; Mi ce tu vrednost da snimimo u bazu; na osnovu tog broja se tekst raporta moze menjati bez problema, lokalizovati itd.

Koliki posao oko obicnog lisca



[Ovu poruku je menjao mitke013 dana 08.04.2010. u 16:58 GMT+1]

[Ovu poruku je menjao mitke013 dana 08.04.2010. u 17:16 GMT+1]
[ Milos911 @ 08.04.2010. 14:55 ] @
Znam da je offtopic ali moram da kazem:
Zeljko svaka ti cast. Ubedljivo najbolje objasnjenje OOP-a koje sa ikad procitao (a procitao sam gomilu). Samo mi je zao sto ovo nisi pre napisao, ne bih se mucio danima da shvatim koja je prednost OOP-a :)
[ mitke013 @ 08.04.2010. 16:10 ] @
Citat:
Milos911: Znam da je offtopic ali moram da kazem:
Zeljko svaka ti cast. Ubedljivo najbolje objasnjenje OOP-a koje sa ikad procitao (a procitao sam gomilu). Samo mi je zao sto ovo nisi pre napisao, ne bih se mucio danima da shvatim koja je prednost OOP-a :)


Nema na cemu, reci ako treba jos nesto ali otvori novu temu. Mada, ja sam skoro uvek off-topic; uglavnom kukam kako u Srbiji niko ne ceni dobrog programera, poslodavci mi ne odgovaraju itd... Moderatorima ne smeta, drugi ucesnici me ignorisu i svi sretni i zadovoljni. Kao komandir kasarne i kapetan iz price o OOP-u :)

Sad sam pogledao moju prethodnu poruku i ispravio par gresaka: naime, protected static zaista nema nikakve logike ali sam pisao na brzinu pa... jbg. Prepravio sam da to bude dinamicka metoda $this->getCleaningDevice() .

[ kelja @ 09.04.2010. 16:40 ] @
Ha, ha, vrlo lepo (jes da si mogao i neku drugu instituciju da uzmes za primer, al' dobro).

[ mitke013 @ 10.04.2010. 12:41 ] @
Citat:
kelja: Ha, ha, vrlo lepo (jes da si mogao i neku drugu instituciju da uzmes za primer, al' dobro).


Priznaj, nisi isao u vojsku

Mislim da je vojska zaista najbolji primer za ucenje OOP: korisnik je bog i batina, a svi ostali moraju da urade posao. Niko tebi nece dati metlu, dzoger, lopatu i ostale ratnicke rekvizite; moraces da se snadjes sam. Zato 95% mojih dinamickih public metoda nema nikakav parametar; kao i vojnik koji je dobio naredjenje, moja metoda ce se snaci sama.

Mogao sam da dam primer i sa nekom zdravstvenom institucijom, ali bi program onda izgledao ovako:
Code:

$doctor = Doctor::getAvailable() ;
$patient = Patient::getSick() ;

$money = $patient->getAllMoney() ;
$doctor->treat($patient, $money) ;

class Doctor
{
  public function treat($patient, $money=0)
  {
    if ($money==0)
      $patient->die() ;
   else{
     try{
       $this->marketYourPrivatePractise() ;
       $this->makeBadDecision() ;
       $this->askForMoreMoney($patient) ;
       $this->tellPatientToComeIn6Months($patient) ;
    } catch(Exception $e)
       $patient->die() ;
   }
  }
}


ali je za pocetnika ova real-life situacija mnogo komplikovana
[ Phikret @ 10.04.2010. 15:45 ] @
>

Hahaha. Dobar primer :)

--001485f80e7a47bb340483e2f725
Content-Type: text/html; charset=ISO-8859-1

<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div><div class="h5">esauth:396391:1f2ec94815eefadb271241ae8978d693<br>