Jump to content
php.lv forumi

šablona klase (class for template)


FiXeD

Recommended Posts

Sveicināti esmu šeit jauniņais...

 

Lieta sekojoša, es te cīnos ar templeitiem, jo apnika jūzot funkcijas :d

 

Uztaisīju šādu klasi pašam dizainam

 

HTML

 

<html>

<head>
whatever what goes here...
</head>

<body>

<div id="left">#leftside#</left>

<div id="center">#content#</left>

<div id="right">#rightside#</left>

</body>

</html>

 

PHP Klase

 


<?php

class tmp {

  public $tmp;

  function load($filepath) {
     $this->tmp = file_get_contents($filepath);
  }

  function replace($var, $content) {
     $this->tmp = str_replace("#$var#", $content, $this->tmp);
  }

  function publish() {
     eval("?>".$this->tmp."<?");
  }
}

?>

 

PHP Kods

 

 $tmp = new tmp;
 $tmp->load("template.html");
 $tmp->replace("registered", $registered);
 $tmp->replace("title", $title);
 $tmp->replace("content", $content);
 $tmp->replace("leftside", $leftside);
 $tmp->replace("rigthtside", $rigthside);
 $tmp->replace("copyrights", $copyrights);
 $tmp->replace("time", $time);
 $tmp->publish();

 

un vēlos tagad uztaisīt klasi blokiem

 

Bloka HTML

 

<div class="block">

<div class="blocktitle">#blocktitle#</div>

<div class="blockonline">#blockcontent#</div>

</div>

 

Bloka PHP

 

<?php

$title = "Whatever";

$content = "Smthing goes here";

?>

 

Biju uztaisījis klasi, bet man sanāca kautkāds mismatch un tagad nekādīgi nevaru saprast, kas īsti jādara...!!

 

Kā man uzrakstīt klasi, lai visi bloki tiktu ņemti no datubāzes un iebāzti $leftside mainīgajā izmantojot šablona klasi??

 

Nu to db es uztaisīšu pats, bet varbūt kāds saprata, ko vēlos šeit panākt un ir ideja kā izlaižot info caur šablona klasi no php bloka uz mainīgo??!!

 

Vizuāli sanāk šādi:

 

bloks ar mainīgajiem -> Mainīgie tiek ievietoti šablonā -> šablona saturs + mainīgie no bloka -> Mainīgajā $leftside, kas ir galvenā šablona kreisā mala!

Edited by FiXeD
Link to comment
Share on other sites

 $tmp = new tmp;
 $tmp->load("template.html");
 $tmp->replace("registered", $registered);
 $tmp->replace("title", $title);
 $tmp->replace("content", $content);
 $tmp->replace("leftside", $leftside);
 $tmp->replace("rigthtside", $rigthside);
 $tmp->replace("copyrights", $copyrights);
 $tmp->replace("time", $time);
 ob_start();
 $tmp->publish();
 $leftside = ob_get_contents();
 ob_end_clean();

 

Man vienīgajam ir tāds uzskats, ka php pats par sevi ir templeitu sistēma?

Link to comment
Share on other sites

Nu varbut, tad vari ieteikt kaa to var labak izdarit vai kadu citu panemienu, metodi?

 

Un par to uzskatu... varbut veel neesi saticis sava limena meistaru? :D

 

neesmu vel sazubrijies par to ob_get_contents(), bet man vinu izmantot kaa...?

 

no kurienes vinsjh nem tos contents un ka vinjus definet?

Edited by FiXeD
Link to comment
Share on other sites

<?PHP 
class Template { 
function load($XYZ__file,$XYZ__data){   
  extract($XYZ__data);  
  ob_start(); 
  require $XYZ__file; 
  $XYZ__output = ob_get_contents(); 
  ob_end_clean(); 
  return $XYZ__output;     
}
} 

 

Izmantoju:

mans.tpl fails

<div><?php echo $name; ?></div>

<table>
<?php foreach($messages as $message){ ?>
<tr>
 <td><?php echo $message['from']; ?></td>
 <td><?php echo $message['title']; ?></td>
</tr>
<?php } ?>
</table>

 

izsauc:

$messages=array(
 "0"=>array(
   "from"=>'Ilze',
   "title"=>'čau kā iet'
 ),
 "1"=>array(
   "from"=>'Zane',
   "title"=>'ko dari?'
 )
);
echo Template::load('mans.tpl',array('name'=>'Jānis','messages'=>$messages));

Edited by codez
Link to comment
Share on other sites

Man vienīgajam ir tāds uzskats, ka php pats par sevi ir templeitu sistēma?

Nee Tevi ir pilniiga taisniiba, jo tas kods ir principaali pilniigi lieks, jo :

<html>

<head>
whatever what goes here...
</head>

<body>

<div id="left"><?php echo $leftside; ?></left>

<div id="center"><?php echo $content; ?></left>

<div id="right"><?php echo $rightside; ?></left>

</body>

</html>

izdariis to pashu ko tas samudzinaatais un pilnigi nevajadzigais kods..

Link to comment
Share on other sites

Opā pats te pamēģināju... pasakiet tā ir labi vai var vēl kā savādāk?!

 

index.php

 


<?php

include("inc.php");

$title = "Sākums";

$content .= "whalds najs\n";
$content .= "whalds najs\n";
$content .= "whalds najs\n";

page($title, $content);

?>

 

inc.php

 


<?php

function page($title, $content) {

//Piemēram vēl kādi mainīgie ir norādīti templeitā

$copyrights = "Lambada whatever...";

include("template.html");

}

?>

 

template.html

<html>

<head>
<title>WHATEVER :: <?php echo $title; ?></title>
</head>

<body>

<div id="left"><?php echo $leftside; ?></left>

<div id="center"><?php echo $content; ?></left>

<div id="right"><?php echo $rightside; ?></left>

<div id="copy"><?php echo $copyright; ?></left> <!-- Tas te no inc.php faila kur komentārs par citiem mainīgajiem -->

</body>

</html>

 

 

P.S. - Kavacky Tev no to postu skaita, 50% vai vairāk, ir pilnīgi bezjēdzīgi spama komentāri?

Edited by FiXeD
Link to comment
Share on other sites

 

es vislaik esmu pielietojis funkcijas ... piemēram...

 

<?php
function head($title) {

 include("head.html")

}

Kas tas par murgu ?? Prieks kam f-jas??

kaapec ne uzreiz vajadziigaja vietaa

<?php  
//atrodam kaadu vidu jaincluudo 
$vidus='vidus.php';
?>
bla bla htmls 

<?php include ($vidus); ?>
html turpinaas

un nevajag domaat kautkaadu nto riteni par jaunu

edit:

un skuma var arii nodefineet teiksim virsrakstu .. ( teiksim ja samais nak no DB )

Un tajaa includojamaa php failaa tikai vinju izvadiit..

Edited by Grey_Wolf
Link to comment
Share on other sites

tik daudz es saprotu, bet vnk man tas webinjsh cms style...

 

kā lai pasaka...

 

funkcijas ir dēļ tiem debīlajiem sāna blokiem...

 

ja es inklūdoju tikkai vidiņus ... Tu stādies priekšā 20 lapās rakstīt to headeri leftsaidu rightsaidu footeri ... tur tak debils var palikt...

 

izmantoju vnk 1 funkciju, kas panem contentu iemet templeitaa un tur vel ka mainigos nodefineju abus saidus

Link to comment
Share on other sites

P.S. - Kavacky Tev no to postu skaita, 50% vai vairāk, ir pilnīgi bezjēdzīgi spama komentāri?

Un kā tas attiecas uz joku par marcis; vai es būtu apgalvojis pretējo?

 

Loģika iegūst datus $dati['menu'], $dati['klucis_X'], $dati['klucis_Y'].

Templeiti savos klučos paņem pareizo X vai Y.

Kontrolieris ielasa vajadzīgos loģikas apstrādes elementus un atbilstošos templeitus.

Solved.

Link to comment
Share on other sites

Tu stādies priekšā 20 lapās rakstīt to headeri leftsaidu rightsaidu footeri ... tur tak debils var palikt...

90% gadijumos lapai ir vairak vai mazak vienaads dizains visam lapaam ..

Augsa apaksa Etc ..

taatad var izmantot 1 index failu ... kur samie jau nodefineeti ..

augsaa php dalja kas atlasa peec vajadziibas konkreto Vidu, menuu etc ...

zemaak apaksaa Html dalja kur izvadi vajadziigo vidu, malu etc ...

arii Footeri vari ievietot atsevikja faila ( ja nu katrai lapai vinsh ir savaadaks ) ..

Jo 99% gadijumos tas template ir pilniigi lieka ... , Php pats ir labu labais templetu engins ...

Link to comment
Share on other sites

ja izmanto vienu index failu, tad jau jaizmanto switch...

 

?p=lapa

 

un tik aiziet, bet mana gadijuma sanak katrs bloks nak no db(teoretiski no faila bet vnk db parbaude vai bloks ieslegts, izslegts un izvietojums) ... katrs vidinjsh nak no db...

 

apsvēru domu uztaisīt blokus mazos kkādus paziņojumus text formā iekš db... tad centu ņemtu no db un tas būtu jāiebāž bloka izskatā... ehh...

 

visi šie varianti uztaisa šausmīgu putru un nenormāli daudz jāparraksta...

 

uzmetu kakaino funkciju ... 1 rindinja katrā lapā un vso... tik krāmē tālāk htmlus, php, javascriptus....

 

iedomajos jau vien index.php?p=forums&cat=3&forums=10&topic=13 omg mod_rewrite vajag... bet uz hosta lighthttpd ... 0_o

 

Karoč apnika ... gribēju, ko jaunu nesanāca .. plinte krūmos un atpakaļ pie savām uberfunkcijām, kas kalpoja 1 gadu bez kļūdām un problēmām... :D

 

vispār mby ir kādam links uz jēdzīgu class tutoriāli... izraku daudzus, bet nekā usefulīga....

Edited by FiXeD
Link to comment
Share on other sites

ja izmanto vienu index failu, tad jau jaizmanto switch...

?p=lapa

un tik aiziet, bet mana gadijuma sanak katrs bloks nak no db(teoretiski no faila bet vnk db parbaude vai bloks ieslegts, izslegts un izvietojums) ... katrs vidinjsh nak no db...

A kaada starpiiba no kurienes taa informaacija naak ??

Kaut Telepatiski...

index failam sanak 2 pamat daljas

kontroliris un HTML ( izvade) , lai viss ir smuki adaliits

--

kontroliera dalja :

1. savacam datus no DB ( vai nu faila velju, vai pashu html .. vai tikai plain textu , nav buutiski )

2. ierakstam to visu mainiigajaa

--

Izvades dalja , izvadam mainiigo vajadiigaja vietaa

----

Tavs varjants :

 

1. Savacam datus

2. ierakstam mainigajaa

3. ielasam templetu

4. apstradajam to templeitu ( iekombinejam datus ieksh HTML )

---

Izvadam datus

--

Neskjiet ka 3 un 4 solis sanaak lieks??

---------

Driizak jau tavaa gadijumaa sanaak ntaas reizes parrakstiit...

Link to comment
Share on other sites

labi pieņemsim, ka sapratu...

 

index fails

 

 

visas php darbibas

 

iemetam visu $leftside, $content, $rightside mainigaja (+ man ir vel kadai 20 mainigie templeitaa)

 

includojam html failu, kas izvada php, jo html failā ierakstijām, tur kur vajag <?php echo $content; ?>

 

 

citas lapas fails buus?

 

visas php darbibas

 

iemetam visu $leftside, $content, $rightside mainigaja (+ man ir vel kadai 20 mainigie templeitaa)

 

includojam html failu, kas izvada php, jo html failā ierakstijām, tur kur vajag <?php echo $content; ?>

 

 

nesanak bik vairak parrakstit?

 

mana gadijuma

 

inc.php

 

head() [

html headeris lidz kontentam ar visu leftside

};

 

foot() {

viss html footeris ieskaitot rightside

};

 

index.php

 

head();

 

php html js // viss contents

 

foot();

Edited by FiXeD
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...