Gå til innhold

Endring av template fra feks adminpanel?


Anbefalte innlegg

Jeg er ikke så god med php enda.. Men har lyst til å prøve å lage et script hvor man velger feks fra ett admin panel hvilket template man vil bruke. Har tenkt å ha en som lister alle temaplatene som ligger i databasen (har tenkt å bruke mysql) også en sumbit knapp som ligger det valget til i databasen.. Men så er det to ting som jeg ikke er helt sikker på: Hvordan får jeg til å legge til info som feks Teamplate1 (det som står i den lista) og linken til teamplate1, feks template/template1/template1.php. og hvordan jeg skal få lagt til valget for dette i mysql? Er sikkert lett det jeg spør om, men når det kommer til php så er jeg noob!:p Håper noen kan hjelpe meg. Takk!:)

Endret av oblomsoe
Lenke til kommentar
Videoannonse
Annonse

Dette høres ut som eit greitt prosjekt.

Har gjort noko lignande sjølv.

 

For å legge til informasjon i ei database, gjer du noko som dette:

INSERT INTO templates (id, name, content) VALUES ('NULL', 'template 01', 'Innholdet i templaten')

 

Viss du vil oppdate ein av templatene, gjer du noko slikt:

UPDATE templates SET name='$name' ,content='$content' WHERE id='$id'

 

 

I tabellen templates ville eg også hatt ei kolonne som heiter current. Denne kolonna ville då henvist til kva for ei rad som er aktiv. I toppen av den sida kor du då skal finne ut kva template som er i bruk, kan du kjøre ei spørring som denne:

SELECT * FROM templates WHERE current = '1' ORDER BY id DESC LIMIT 1

Eg tek berre med LIMIT 1 for å være sikker på at den berre får med seg ei av radene, i tilfelle nokon har overstyrt current-kolonna på ei av radene.

Lenke til kommentar

Takk for svar! Men jeg er ikke helt sikker på om jeg skjønner dette.. Slik som jeg har det nå så er det sånn:

Mellom <body> og </body> så har jeg dette:

{main}

 

Og i index.php så har jeg dette for å legge desginet runt det som jeg har:

<?php include ('config.php'); 
if (!$filename)
{
$filename=''.$default_theme.''.$template.'';
}
if(!$fd = @fopen($filename, "r"))  
{
session_start();
$filename="$default_theme";;
setCookie ("filename","", time()+30240000);
}
$theme .= '<form METHOD="POST" style="word-spacing: 0; margin: 0">
<select name="list" onChange="showpage(this.form);" class="input">
<option value="x">--------------</option><br> <input type="submit" name="submit" value="Endre" />\n';
$result = mysql_query("SELECT * FROM $cms_template") or die ("Can't execute query.");
while(($row = mysql_fetch_object($result)))
 {
$theme .= '<option value="'.$row->filename.'">'.$row->name.'</option> <br> <input type="submit" name="submit" value="Endre" />\n';
 }
$theme .= '</select>

</form>';

$site_main ="ting her";
$template = fread ($fd, filesize ($filename));
fclose ($fd);
$template = stripslashes($template);
$template = eregi_replace("{theme}", "$theme", $template);
echo "$template";
?>

 

 

Den koden dær er en del av noe jeg fant på en tutorial, men som du ser dær så blir de bytten med engang du velger noe i en liste, men problemet er at det ikke blir lastet opp til databasen men blir bare lagt i cookies.. Og jeg fikk det ikke til å funke når jeg fjernet lista osv fra den dær og til en annen fil....

Lenke til kommentar

HTMLen din er altså slik:

 

<html>{main}</html>

 

Så henter du ut det valgte innholdet fra en tabell, og erstatter {main} med det du har hentet ut?

 

Gjør som Henrik Lied skriver, altså at én av radene i tabellen er satt som aktiv.

 

Litt på siden: Dette opplegget minner ikke så mye om et template-system, fordi du kontrollerer innholdet, og ikke utseendet på innholdet.

 

Et template-system kan fungere på denne måten:

 

Template 1:

 

<html>

<head>

<title>{title}</title>

inkludering av css-fil her, husker ikke HTML-koden...

</head>

<body>

<div class="left">{left}</div>

<div class="middle">{middle}</div>

<div class="right">{right}</div>

</body>

</html>

 

Template 2:

 

Samme som over, men med annen CSS-fil, og kanskje noen andre forandringer.

 

Når systemet laster inn den valgte malen (templaten), så erstatter den {title}, {left}, og så videre med det innholdet du vil ha.

 

MVH Audun

Lenke til kommentar

Templatesystemet som du bruker kan også bli litt tungvint i lengda.

 

For eksempel, kva viss du har elementer som kun skal dukke opp viss elementa eksisterer?

 

I mitt blir det noko slikt:

#if !#<p>This entry was published !#date#!</p>#! /if#

 

Altså: Teksten `This entry was published` dukkar kun opp viss den aktuelle rada har ein gyldig dato.

 

http://misinterpreted.org/archives/2005/06/05/tw3-changes

Endret av Henrik Lied
Lenke til kommentar

Om det kun skal være admin som kan velge for hele siden, kan du gjøre slik:

 

Sette inn template i databasen:

INSERT INTO templates (name,active) VALUES ('Template1')

id settes automatisk om du har auto_increment som jeg antar du har :p

 

Hente ut fra database og liste opp:

<form action="action.php" method="post">
<select name="template">
<option value="0">Default</option>
<?php
$get_templates = mysql_query("SELECT id,name FROM templates ORDER BY name");
if (mysql_num_rows($get_templates) > 0) {
   while ($temp = mysql_fetch_assoc($get_templates)) {
       echo '<option value="'.$temp['id'].'">'.$temp['name'].'</option>';
   }
}
?>
</select>
<input type="submit" value="Velg" name="template_select">
</form>

 

i action.php:

sleng dette inn i en if (isset($_POST['template_select'])) { mysql_query(...); }

UPDATE templates SET active = if(id=$_POST['template'],1,0)

 

i index.php:

<html>
<head>
<?php
$get_active = mysql_query("SELECT name FROM templates WHERE active=1");
if (mysql_num_rows($get_active) > 0) {
   echo '<link href="templates/'.mysql_result($get_active,0).'.css" type="text/css" media="screen" rel="stylesheet">';
} else {
   echo '<link href="templates/default.css" type="text/css" media="screen" rel="stylesheet">';
}
?>
<body>
...
</body>
</html>

 

Dette var veldig grovt, og jeg har ikke testet koden, men den burde funke som en fin "guide" :p

Greia her er at den sjekker etter en css-fil med navnet til den "aktive" template'n i mappen /template/. Må sørge for at navn på template og navn på fila er like. Hvis det ikke er noen som er satt, velger den default.css

Endret av HaZnO
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...