ugrás a tartalomhoz

Kétféle design készült a PHP programomhoz, hogyan írjam meg?

chipi · 2006. Dec. 27. (Sze), 02.12
Sziasztok!

Egy olyan segítség kéne nekem, hogy a php programomat be szeretném burkolni valami design be, és ezt a templatetet hogyan kell használni? Mert 2 féle design készült az oldalra.

Köszi előre is!
 
1

nekem meg...

virág · 2006. Dec. 27. (Sze), 08.20
Ez egy nagyon jó kérdés lehetne ha jól tetted volna fel és megtisztelted volna a többi fórumozót azzal, hogy megfogalmazod, átgondolod és PONTOSAN leírod, hogy mit szeretnél kérdezni... Ezerféle template rendszer van, milliónyi "php program" létezik, sokféle "templatezési" módszerrel...Most játszunk barkóbát? Kérdezzek rá, hogy mit is szeretnél templétezni? :)
2

válasz

chipi · 2006. Dec. 27. (Sze), 14.56
Egy e boltot készitettem és ezt akarom majd design elni.
http://www.balatonisovervivoklub.hu/fenyrajz/ebolt/index.php
Csak mivel nem csináltam még ilyet ezért a kérdésemben is foggalmam sincs a template rendszerröl, mert hallotam, hogy azzal sokkal egyszerübb design-t tenni rá.
3

hát akkor is attól függ

rrd · 2006. Dec. 27. (Sze), 16.02
Ha saját fejlesztésű a motorod akkor attól függ, hogy hogyan csináltad a dolgot. Ha smartyval akkor viszonylag egyszerű lesz a dolgod. De akárhogy is első körben kétféle css-sel már elég jól tudsz különféle kinézetet produkálni. De normális esetben a motor megírása közben már figyelembe veszi az ember, hogy template-elni akar.
5

megoldás keresése

chipi · 2006. Dec. 27. (Sze), 19.38
A motor saját fejlesztésü, de azt nem tudom elképzelni, hogy hogy fog megjenni benne majd a tartalon, mert van egy index.php abban van benne a motor az köti össze az oldalakat is. De a design egy másik oldlaon van még jelenleg. De nem értem ennek a smarty felépitését. Valami példát tudtok mutatni?
7

példa

rrd · 2006. Dec. 28. (Cs), 13.54
1) ha a php filejaid így néznek ki pl, hogy
valami.php:
print '<div id="menu">';
print '<ul>';
print '<li>Menü - 1 </li>';
print '<li>Menü - 2 </li>';
print '</ul>';
print '</div>';
vagyis a php-ra van bízva a megjelenítés, akkor csak annyit tudsz csinálni, hogy különböző css-eket építesz fel ami biztosítja a különböző megjelenést. Ez bizonyos korlátok közé szorítja a két megvalósítás eltérését.

2) ha a php filejaid nem foglalkoznak a megjelenítésre, hanem csak az adatokat állítják elő, és egy másik rétegre (pl a smartyra) van bízva a megjelenés akkor ugynez így néz ki a kódodban:
valami.php:
$menu[1] = 'Menü -1';
$menu[2] = 'Menü -2';
$smarty->assign('menu',$menu);

valami.tpl:
<div id="menu">
<ul>
{{foreach from=$menu item=menupont}}
<li>{{$menupont}}</li>
{{/foreach}}
</ul>
</div>

Ebben a verzióban sokkal szabadabban és könnyedebben tudod befolyásolni, hogy mi lesz az oldal kinézete.

Persze ez csak egy elnagyolt és durva megközelítése a témának, de a lényeg remélem lejön belőle, hogy a php programodtól függ, hogy hogyan tudsz különböző kinézeteket produkálni, így nem lehet rá egy általános tanácsot adni. Keresgélj olyanra, hogy MVC.

Mellesleg ha meg azért kell a megrendelőnek, hogy két kinézet legyen, mert az egyiket majd kiválasztja, akkor ezzel szívni fogsz. Jobban jársz ha azt csinálod, hogy Gimpple/Photoshoppal összeraksz 1-2-100 design tervet és miután azt a megrendelő elfogadta akkor állsz neki leprogramozni. A fentiek akkor érvényesek ha a projectben ténylegesen szükség lesz egynél több design alkalmazására.
12

css és a korlátok?

connor · 2006. Dec. 28. (Cs), 23.55
CSS-el korlátok közé? :)
Akkor nézegessed kicsit a zengardent. ;)
13

template

krey · 2006. Dec. 29. (P), 01.04
A kérdezőnek valószínőleg teljesen megfelel a CSS megoldás, de azzal, hogy leírta a template szót megváltoztatta a hozzáállást. Amikor 2 CSS design-t csinálok valamihez azt nem hívjuk template készítésnek. Amikor egy HTML kódot készítek változó részekkel, azt már inkább.

üdv. krey
14

css és korlátok

rrd · 2006. Dec. 29. (P), 11.11
Ismerem a csszengardent, és css-sel is foglalkozom egy ideje. Css-sel kétségtelenül szabadon lehet oldalkinézetet módosítani ha a hozzá tartozó html eleve úgy van megírva (vagy ha JavaScripttel módosítjuk a DOM-ot). Nem erről beszéltem, mert nem is ez volt a kérdés.
4

minek is 2 design?

Gal Kristof · 2006. Dec. 27. (Sze), 18.29
csak egy kósza gondolat, de mi célból kellhet egy webshopnak kétféle design? csak remélni tudom, hogy nem azért, hogy a felhasználó választhasson magának a 2 közül... ez az aminek igazán nincs értelme.

(egyre többször kell ilyet írni sajnos: miért nem nézed meg mit írtál mielőtt elküldöd? helyesírás / fogalmazás.)
6

kérték

chipi · 2006. Dec. 27. (Sze), 22.03
Azétr kell 2 design mert a megrendelő ragaszkodik hozzá.
8

megrendelő...

amonrpg · 2006. Dec. 28. (Cs), 15.02
megrendelő?

Te ezért pénzt kapsz?
Ajjaj...
10

megrendelő

chipi · 2006. Dec. 28. (Cs), 22.26
Nem kapok pénzt érte. :(
Csak megkértek rá, hogy csináljak neki, mert egy kedves ismerősöm. :)
11

Akkor

janoszen · 2006. Dec. 28. (Cs), 23.39
Hát egyrészt szép dolog az igény, döntsd el Te, hogy mit szeretnél.

Ha nem nagyon különböző az elrendezése, elegendő, ha két különböző CSS-t húzol rá. Itt is ezt csináltam: http://janoszen.hu/ (még nincs kész a váltogató. white a másik neve, Firefox+webdev-el meg tudod nézni.)
19

hmm

lacy · 2006. Dec. 30. (Szo), 01.32
igényes lap szép!, az alsó linkek nem igazán IE kompatibilisek, nekem ha ráállok ugrál össze vissza mintha muszáj volna..:)
20

Hopp

janoszen · 2006. Dec. 30. (Szo), 11.10
Hoppá, igyekeztem tesztelni mindenféle böngésző alatt, egészen visszafele a 3.0-ig (tudom, hülye vagyok) és nem tapasztaltam ilyet. Milyen IE alatt történt a nevezetes eset?
9

2 design?

krey · 2006. Dec. 28. (Cs), 18.06
Én egyet sem látok ;) Vagy ha igen, akkor az is sok. Amúgy ha nem akarsz fatális változtatásokat csinálni, akkor elég lesz más css-t írni. A mi gógyi konyhánk is így gurul:

<link rel="stylesheet" type="text/css" href="<?
$styles = array("web2","starwars");
if (isset($_GET["theme"]))
	$_SESSION["style"] = $_GET["theme"];
if (!isset($_SESSION["style"])) {
	$rand = rand(0,2);
	if ($rand == 1) {
		echo($styles[($_SESSION["style"] = 1)]);
	} else {
		echo($styles[($_SESSION["style"] = 0)]);
	}
} else {
	if ($_SESSION["style"] == 1)
		echo($styles[1]);
	else
		echo($styles[0]);
}
echo(".css");
?>"/>
üdv. krey
15

Hajaj

chipi · 2006. Dec. 29. (P), 22.18
Hát megnéztem a smarty-sat, nekem bejönn, de nagyon, mert ahogy elnézem egyszerű kezelni.
De vannak gondok, de nem is picike.
Feltöltöttem egy szerverre és ezt kaptam üzenetként:

Fatal error: Cannot instantiate non-existent class: smarty in //teszt/index.php on line 2

Az index.php ez van:
<?php
$smarty = new Smarty;
$smarty->template_dir = 'template';
$smarty->compile_dir = 'template_c';
$smarty->left_delimiter = '<{';
$smarty->right_delimiter = '}>';


$menu[1] = 'Menü -1';
$menu[2] = 'Menü -2';
$smarty->assign('menu',$menu);
    $smarty->display("design.tpl");

?>
A tpl ben meg ez:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<!-- TemplateBeginEditable name="doctitle" -->
<title>Untitled Document</title>
<!-- TemplateEndEditable -->
<!-- TemplateBeginEditable name="head" -->
<!-- TemplateEndEditable -->
</head>

<body>

<ul>
{{foreach from=$menu item=menupont}}
<li>{{$menupont}}</li>
{{/foreach}}
</ul>


</body>
</html>
De valami nem koser itt. :(
16

Hiányzik a require

attlad · 2006. Dec. 29. (P), 23.12
Start itt: http://smarty.php.net/quick_start.php

A Smarty osztályt definiáló fájlt először be kéne illeszteni mielőtt használatba akarod venni, erre szolgál a fenti link példájában a require paranccsal kezdődő sor.
17

no igen

chipi · 2006. Dec. 29. (P), 23.37
No igen, de a smartyt hol találom meg, vagy azt is nekem kell létrehoznom a szerveren?
18

Letöltés

attlad · 2006. Dec. 29. (P), 23.58
Pl. le lehet tölteni: http://smarty.php.net/download.php
(És igen, a szerverre ebben az esetben nyilván fel kell töltened.)
21

megoldás keresése

chipi · 2006. Dec. 31. (V), 00.28
Sziasztok!
Kipróbáltam ezt a smartyt és nagyon tetszik, már el is kezdtem az oldal átalakitását :)
De most egy picike hibába botlottam.
Változóba szeretném tenni az includet, de nme tudom, hogy hogyan kell.
$megjelenites_tpl.='include("linkek.php")';
Így csináltam, de nem jó. :(
22

eval

Joó Ádám · 2006. Dec. 31. (V), 00.59
Nem tudom, mit akarsz ezzel, de, ha mindenképp ilyemire van szükséged, akkor nézd meg az eval() függvényt a manualban.

De inkább írd le, mit szeretnél csinálni.
23

őőőő

chipi · 2006. Dec. 31. (V), 01.09
Azt szeretném, hogy amikor érzezik az ulr ben egy érték akkor az jeleniti meg az aktuális oldal.
Azaz a designben akarom, hogy megjelenjen.
24

félreérted szvsz

erenon · 2006. Dec. 31. (V), 01.15
te szerintem félreértettél valamit. a tpl fájl nem csinál semmit különöset, a nyersanyag előállítását egy php fájl csinálja, ami pédányosít egy Smarty objektumot, és a pédányba bejegyez változókat (assign fv.). Ezután, ha minden kész lefut az értelmező, és a tpl fájlba a változók helyére bekerül a tartalom, ami utána megy a képernyőre(display fv.). Normál esetben a php-d nem változtatja futásidőben a tpl fájlt.

Ha te is így gondoltad, elnézést, amennyiben mégsem, javaslom, olvass bele a doksiba, vagy méginkább jobb, ha élőben megnézel egy smartyt használó rendszert.
25

szerintem nem

chipi · 2006. Dec. 31. (V), 01.20
Ezt tudtam, hogy a php állatja elő a nyersanyagot, de pont ezt szeretném megvalósitani.
A php kapja az értéket, és ezt egy változóba szerezném tenni és így megy ki a tpl fáljomnak.
26

assign

Gal Kristof · 2006. Dec. 31. (V), 16.51
a te barátod az assign metódus, nézz utána.
27

megtaláltam!

chipi · 2007. Jan. 1. (H), 18.43
Megtaláltam a google segitségével amit szerettem volna.
Ennyi lett volna:
{include_php file='/path/to/load_nav.php'}
28

while ciklus, de a nem jelenik meg

chipi · 2007. Jan. 1. (H), 20.21
 $query = mysql_query("SELECT * FROM kategoriak ORDER BY sorrend");
$options = array();
while ($result = mysql_fetch_assoc($query))
{
   $options[$result['kategoriak']] = $result['kategoriak'];
}
$smarty->assign ('options', $options); 
A tpl ben meg:
<a><{html_options options=$options}></a>

De a gondom az az lenne vele, hogy nem ír ki semmit, de miért?
Minden megvan nyitva pedig.
29

nem egészen

Thomas · 2007. Jan. 1. (H), 21.55
Ki kell, hogy ábrándítsalak, a html_options függvény nem erre való.

a ponto megoldás ez lenne:


$options = array();
$query = mysql_query("SELECT * FROM kategoriak ORDER BY sorrend");

while ($result = mysql_fetch_assoc($query)) {
   $options[] = $result;
}
$smarty->assign ('options', $options);
Ezek után jöhet a listázás:

<{section name=i loop=$options}>
<a href="?id=<{$options[i].id}>"><{$options[i].title}></a>
<{/section}>
Vagy valami ilyesmi. Az a gond, hogy az alapvető működéssel sem vagy tisztában. Így elvállalni egy munkát, még akkor is, ha ingyen van, hatalmas felelőtlenség.

Az is egy érdekes probléma, hogy ilyen büszkén megjeleníted az oldalon a neved, mint fejlesztő. Tudnod kell, hogy egy kereskedelmi szoftvert akarsz készíteni, így az APEH érdeklődésének középpontjába is kerülhetsz.

Sztem nem vagy szabadúszó vállalkozó, így nem veszélytelen a munka. Amúgy a kérdésedre a legegyszerűbb válasz: CSS, két különböző stíluslap, mindig csak az egyiket húzod be. Ennyi.

Valószínűleg még csúnya dolgokat fogsz az oldalon kapni és nem is érdemtelenül. Sok sikert!
30

válasz keresése

chipi · 2007. Jan. 5. (P), 23.46
Sziasztok!

Egy olyan megoldás kéne nekem, hogy nekem úgy kéne az oldalt megcsinálnom, hogy a hivatkozások egy másik lapra mutasson, de ami tartalom megjelenik az a designben jelenjen meg, és nem tudom, hogy hogyan, mind pl itt weblaboron is van, www.weblabor.hu/forumok/php/php, és a designben jelenik meg, azaz pl lehet bármi. koszonto.html és az a designben jelenik meg, láttam egy csomó helyen ilyen oldalakat. Hogyan lehet megoldani?
31

olvass el egy PHP könyvet, de...

rrd · 2007. Jan. 6. (Szo), 10.51
Hát, nem tudom, hogy erre gondoltál-e, de ha azt szeretnéd, hogy az oldal bizonyos része változzon csak és mondjuk a fejléc, oldalsó menük, lábléc pedig nem akkor azt így kell:
<?php
require('fejlec.php');
require('menu.php');
if($_GET['lap'] == 'rolam') require('rolam.php');
elseif($_GET['lap'] == 'cim') require('cim.php');
else require('nyitolap.php');
require('lablec.php');
?>
Vagyis vannak mindenféleképpen behúzott részei az oldalnak, és van olyan része ami az url-ben átadott paramétertől függően hívódik meg vagy nem. A rolam.php fogja tartalmazni azt a részt amit akkor akarsz megjeleníteni ha valaki a rólam linkre kattint, a cim.php pedig azt amit akkor akarsz megjeleníteni ha valaki az elérhetőségek linkre kattint a menüben.

Ebben az esetben a menu.php pl így néz ki:
<?php
print '<ul id="menu">';
print '<li><a href="index.php">Főoldal</a></li>';
print '<li><a href="index.php?lap=rolam">Rólam</a></li>';
print '<li><a href="index.php?lap=cim">Elérhetőség</a></li>';
print '</ul>';
?>
Persze ez csak egy durva megközelítés, ellenőrizni kell a usertől jövő adatokat, a php kódban nem ildomos keverni a php-t és a html-t, de a téma szempontjából ez egy egyszerű és működőképes példa. :P
32

hááát, nem ép ilyesmire gondoltam

chipi · 2007. Jan. 6. (Szo), 14.55
Én is írtam ehez hasonlot:

<?php
switch($_GET["menu"]) { 
case "login": 
include("login.php"); 
break;
default: 
include("center/default.php"); 
break; 
} 
?>
De nekem olyasmi kellene, hogy én nem akarom ezt a menüt állandóan írni, hogy mi jelenjen meg benne. Hanem pl van egy sima olyal amiben van egy hivatkozás, és ez a hivatkozás csak simán utal egy másik oldalra. PL lap.html akkor ez a lap az index.php töl vagy nem tudom, hogy hogyan kapjon egy hivatkozást és a tartalom az index.php ban jelenjen meg. Azaz ne kelljen kiírni mindig, hogy index.php?menu=lap hanem csak simán, hogy lap.html és akkor meg is jelenik szépen.
33

olvass el egy könyvet

rrd · 2007. Jan. 6. (Szo), 18.58
túlbonyolítod az egészet. Amit te akarsz az AJAX, de nem fog menni ha az alapokkal sem vagy tisztában.
34

Találtam valamit

chipi · 2007. Jan. 7. (V), 20.38
Sziasztok!
Egy pici gondom lenne a kóddal, ez ajax alapú. A gond az az, hogy amikor hivatkozok egy oldralra simán azaz valami.html akkor ez a script elé tesz egy linket.
Azaz ami ebben van pl. index.php?menu=lap@lap=$oldal;

De a link nem jó, mer ha egy mappába teszem akkor a mappa nevét előre teszi ki nekem, azaz index.php?menu=lap&lap=teszt/lap.html

ja és csak ie Működik rendessen, mozzila alatt nem, pedig ott is kell.
var bustcachevar=1 //bust potential caching of external pages after initial request? (1=yes, 0=no)
var loadstatustext="<img src='images/loading.gif' /> Kérem türelmét, az oldal töltődik..."

////NO NEED TO EDIT BELOW////////////////////////
var loadedobjects=""
var defaultcontentarray=new Object()
var bustcacheparameter=""

function ajaxpage(url, containerid, targetobj){
var page_request = false
if (window.XMLHttpRequest) // if Mozilla, Safari etc
page_request = new XMLHttpRequest()
else if (window.ActiveXObject){ // if IE
try {
page_request = new ActiveXObject("Msxml2.XMLHTTP")
}
catch (e){
try{
page_request = new ActiveXObject("Microsoft.XMLHTTP")
}
catch (e){}
}
}
else
return false
var ullist=targetobj.parentNode.parentNode.getElementsByTagName("div")
for (var i=0; i<ullist.length; i++)
ullist[i].className=""  //deselect all tabs
targetobj.parentNode.className="selected"  //highlight currently clicked on tab
if (url.indexOf("#default")!=-1){ //if simply show default content within container (verus fetch it via ajax)
document.getElementById(containerid).innerHTML=defaultcontentarray[containerid]
return
}
document.getElementById(containerid).innerHTML=loadstatustext
page_request.onreadystatechange=function(){
loadpage(page_request, containerid)
}
if (bustcachevar) //if bust caching of external page
bustcacheparameter=(url.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime()
page_request.open('GET', url+bustcacheparameter, true)
page_request.send(null)
}

function loadpage(page_request, containerid){
if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1))
document.getElementById(containerid).innerHTML=page_request.responseText
}

function loadobjs(revattribute){
if (revattribute!=null && revattribute!=""){ //if "rev" attribute is defined (load external .js or .css files)
var objectlist=revattribute.split(/\s*,\s*/) //split the files and store as array
for (var i=0; i<objectlist.length; i++){
var file=objectlist[i]
var fileref=""
if (loadedobjects.indexOf(file)==-1){ //Check to see if this object has not already been added to page before proceeding
if (file.indexOf(".js")!=-1){ //If object is a js file
fileref=document.createElement('script')
fileref.setAttribute("type","text/javascript");
fileref.setAttribute("src", file);
}
else if (file.indexOf(".css")!=-1){ //If object is a css file
fileref=document.createElement("link")
fileref.setAttribute("rel", "stylesheet");
fileref.setAttribute("type", "text/css");
fileref.setAttribute("href", file);
}
}
if (fileref!=""){
document.getElementsByTagName("head").item(0).appendChild(fileref)
loadedobjects+=file+" " //Remember this object as being already added to page
}
}
}
}

function expandtab(tabcontentid, tabnumber){ //interface for selecting a tab (plus expand corresponding content)
var thetab=document.getElementById(tabcontentid).getElementsByTagName("a")[tabnumber]
if (thetab.getAttribute("rel")){
ajaxpage(thetab.getAttribute("href"), thetab.getAttribute("rel"), thetab)
loadobjs(thetab.getAttribute("rev"))
}
}

function savedefaultcontent(contentid){// save default ajax tab content
if (typeof defaultcontentarray[contentid]=="undefined") //if default content hasn't already been saved
defaultcontentarray[contentid]=document.getElementById(contentid).innerHTML
}

function startajaxtabs(){
for (var i=0; i<arguments.length; i++){ //loop through passed UL ids
var ulobj=document.getElementById(arguments[i])
var ulist=ulobj.getElementsByTagName("div") //array containing the LI elements within UL
for (var x=0; x<ulist.length; x++){ //loop through each LI element
var ulistlink=ulist[x].getElementsByTagName("a")[0]
if (ulistlink.getAttribute("rel")){
var modifiedurl=ulistlink.getAttribute("href").replace(/^http:\/\/[^\/]+\//i, "http://"+window.location.hostname+"/index.php?menu=lap&lap=")
ulistlink.setAttribute("href", modifiedurl) //replace URL's root domain with dynamic root domain, for ajax security sake
savedefaultcontent(ulistlink.getAttribute("rel")) //save default ajax tab content
ulistlink.onclick=function(){
ajaxpage(this.getAttribute("href"), this.getAttribute("rel"), this)
loadobjs(this.getAttribute("rev"))
return false
}
if (ulist[x].className=="selected"){
ajaxpage(ulistlink.getAttribute("href"), ulistlink.getAttribute("rel"), ulistlink) //auto load currenly selected tab content
loadobjs(ulistlink.getAttribute("rev")) //auto load any accompanying .js and .css files
}
}
}
}
}