Alt 22.03.2010, 18:15:07   #1 (permalink)
R.I.P. Tobi
Benutzerbild von Gremlin

ID: 184974
Lose-Remote

Reg: 02.05.2006
Beiträge: 8.967
Gremlin genießt hohes AnsehenGremlin genießt hohes AnsehenGremlin genießt hohes AnsehenGremlin genießt hohes AnsehenGremlin genießt hohes AnsehenGremlin genießt hohes AnsehenGremlin genießt hohes AnsehenGremlin genießt hohes AnsehenGremlin genießt hohes AnsehenGremlin genießt hohes AnsehenGremlin genießt hohes Ansehen
Standard [PHP] Smarty: Eigene "Funktionen"

Habe nun die Doku durchsucht, aber nichts wirkliches gefunden wasmir hilft. Und zwar habe ich bei mir Boxen im Content.

HTML-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
<div class="cOben"></div> <div class="cBox"> <h1>Boxtitel</h1> <p> Boxcontent </p> </div> <div class="cUnten"></div>
Auf Dauer ist es ziemlich nervig das immer neu einzutippen (bzw. copy/paste). Deshalb suche ich eine Möglichkeit wie ich eine eigene "Funktion" in Smarty anlegen kann und dann in Zukunft die Boxen so (oder so ähnlich) erstelle:

Code:
1:
2:
3:
{box title="Mein Titel"} Inhalt {/box}
Gibt es sowas?
Gremlin ist offline   Mit Zitat antworten
Gesponsorte Links
Alt 22.03.2010, 18:21:53   #2 (permalink)
Fleischersatz

ID: 87633
Lose-Remote

Reg: 21.04.2006
Beiträge: 914
Kampfwurst genießt hohes AnsehenKampfwurst genießt hohes AnsehenKampfwurst genießt hohes AnsehenKampfwurst genießt hohes AnsehenKampfwurst genießt hohes AnsehenKampfwurst genießt hohes AnsehenKampfwurst genießt hohes AnsehenKampfwurst genießt hohes AnsehenKampfwurst genießt hohes AnsehenKampfwurst genießt hohes AnsehenKampfwurst genießt hohes Ansehen
Standard

Wenn du hier nach "Template Functions" suchst müsste genau das erklärt werden, was du suchst... oder ich habe dich missverstanden.

Liebe Grüße!


edit: Es ist nicht genau was du suchst. Aber du könntest Titel und Inhalt in zwei unterschiedlichen Variablen übergeben. Dann hättest du sowas wie
Code:
1:
{include file="box.tpl" title="Box1" content="Lorem Ipsum bla"}
Schwarz Blau Rot Grün Schwarz Gelb Schwarz Grün Blau Rot Gelb Blau

Grün Rot Blau Grün Rot Gelb Blau Grün Schwarz Gelb Schwarz Rot Blau
Kampfwurst ist offline   Mit Zitat antworten
Alt 22.03.2010, 19:04:25   #3 (permalink)
bekämpft die Mächte des Bösen
Benutzerbild von theHacker

ID: 69505
Lose-Remote

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über AIM schicken theHacker eine Nachricht über MSN schicken theHacker eine Nachricht über Yahoo! schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 20.471
theHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes Ansehen
Standard

So wie du dir das vorstellst, nicht möglich! ... bis jetzt

Mit Smarty3 kannst du sowas machen:
Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
There is a new {function}...{/function} block tag. This enables reuse of code sequences like a plugin function. It can call itself recursively. Example: Template file: {function name=menu level=0} <ul class="level{$level}"> {foreach $data as $entry} {if is_array($entry)} <li>{$entry@key}</li> {menu data=$entry level=$level+1} {else} <li>{$entry}</li> {/if} {/foreach} </ul> {/function} {$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' => ['item3-3-1','item3-3-2']],'item4']} {menu data=$menu} Generated output: * item1 * item2 * item3 o item3-1 o item3-2 o item3-3 + item3-3-1 + item3-3-2 * item4 The function tag itself must have the "name" attribute. This name is the tag name when calling the function. The function tag may have any number of additional attributes. These will be default settings for local variables.
Quelle: Smarty 3.0 Beta README

Wenn du nur einfache Boxen hast, d.h. keine Rekursion, bist du mit Kampfwurst's Edit bestens bedient
theHacker ist offline   Mit Zitat antworten
Alt 22.03.2010, 19:45:10   #4 (permalink)
Erfahrener Benutzer

ID: 212198
Lose-Remote

Reg: 20.04.2006
Beiträge: 711
k212198 kann auf vieles stolz seink212198 kann auf vieles stolz seink212198 kann auf vieles stolz seink212198 kann auf vieles stolz seink212198 kann auf vieles stolz seink212198 kann auf vieles stolz seink212198 kann auf vieles stolz seink212198 kann auf vieles stolz seink212198 kann auf vieles stolz sein
Standard

- http://www.smarty.net/manual/de/plug....functions.php
- http://www.smarty.net/manual/de/api.register.block.php

PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
<?php
$smarty
->register_block("translate""do_translation");

function 
do_translation ($params$content, &$smarty, &$repeat)
{
  if (isset(
$content)) {
    
$lang $params['lang'];
    
// &uuml;bersetze den Inhalt von '$content'
    
return $translation;
  }
}
?>

Wobei das Template wie folgt aussieht:

{* template *}
{translate lang="br"}
Hello, world!
{/translate}
Das?
_____.....-----^^^^^v|v|v|v|v|
k212198 ist offline   Mit Zitat antworten
Alt 22.03.2010, 19:52:57   #5 (permalink)
bekämpft die Mächte des Bösen
Benutzerbild von theHacker

ID: 69505
Lose-Remote

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über AIM schicken theHacker eine Nachricht über MSN schicken theHacker eine Nachricht über Yahoo! schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 20.471
theHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes Ansehen
Standard

Mit dieser Variante müsste aber Markup in den Quellcode, nämlich in den Plugin-Code. Das kann man also in diesem Fall nicht anwenden.
theHacker ist offline   Mit Zitat antworten
Alt 22.03.2010, 20:27:20   #6 (permalink)
Erfahrener Benutzer

ID: 212198
Lose-Remote

Reg: 20.04.2006
Beiträge: 711
k212198 kann auf vieles stolz seink212198 kann auf vieles stolz seink212198 kann auf vieles stolz seink212198 kann auf vieles stolz seink212198 kann auf vieles stolz seink212198 kann auf vieles stolz seink212198 kann auf vieles stolz seink212198 kann auf vieles stolz seink212198 kann auf vieles stolz sein
Standard

Zitat:
Zitat von theHacker Beitrag anzeigen
Mit dieser Variante müsste aber Markup in den Quellcode, nämlich in den Plugin-Code. Das kann man also in diesem Fall nicht anwenden.
Japp, oder man weist den redundanten Code per capture zu und gibt diesen über einen Block an eine Funktion weiter und ersetzt dort die Platzhalter.

PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
{capture assign=htmlBox}
<
div class="cOben"></div>

<
div class="cBox">
<
h1>#TITLE#</h1>
   
<p>
   
#CONTENT#
  
</p>
</
div>

<
div class="cUnten"></div>
{/
capture}

{
insertFromCapture title="Boxtitel" tpl=$htmlBox}
Helloworld!
{/
insertFromCapture
Ansonsten eben mit Schleife in capture zuweisen, was aber zum Overhead führen kann.
_____.....-----^^^^^v|v|v|v|v|
k212198 ist offline   Mit Zitat antworten
Alt 26.03.2010, 15:49:45   #7 (permalink)
Erfahrener Benutzer
Benutzerbild von bastie

ID: 25115
Lose-Remote

bastie eine Nachricht über ICQ schicken bastie eine Nachricht über AIM schicken bastie eine Nachricht über MSN schicken bastie eine Nachricht über Yahoo! schicken bastie eine Nachricht über Skype™ schicken
Reg: 28.04.2006
Beiträge: 1.342
bastie hat eine strahlende Zukunftbastie hat eine strahlende Zukunftbastie hat eine strahlende Zukunftbastie hat eine strahlende Zukunftbastie hat eine strahlende Zukunftbastie hat eine strahlende Zukunftbastie hat eine strahlende Zukunftbastie hat eine strahlende Zukunftbastie hat eine strahlende Zukunftbastie hat eine strahlende Zukunftbastie hat eine strahlende Zukunft
Standard

Hi,

ich habe das folgendermaßen gelöst:

plugindatei erstellen:

plugins/block.box.php

PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
<?php
/*
* Smarty plugin
* -------------------------------------------------------------
* File:     block.box.php
* Type:     block
* Name:     box
* Purpose:  ertellt ein Box
* Thanks a lot to: ostsan
* -------------------------------------------------------------
*/

function smarty_block_box ($params$content$smarty$repeat)

{
        
$title $params['title'];
        
$box file_get_contents("templates/box.tpl");
        
$box str_replace(array("{\$title}","{\$content}"),array($title$content), $box);

        return 
$box;
    
}
?>
mit box.tpl:
PHP-Code:
1:
2:
3:
4:
5:
6:
7:
<div class="box">
 <
div class="box_head">
  <
div class="box_title">{$title}</div>
 </
div>
 <
div class="box_middle"><div class="box_content">{$content}<br /></div></div>
 <
div class="box_footer">&nbsp;</div>
</
div
z.B.

Aufruf im Template:
Code:
1:
2:
3:
{box title="Titel} Inhalt {/box}
bastie ist offline   Mit Zitat antworten
Antwort

Stichworte
php, smarty, template, templatesystem

Gesponsorte Links

Anzeige


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Script "Lose Spenden" für die eigene Website? fotho Ich bin neu hier und habe eine Frage! 4 17.08.2008 15:54:40
[JavaScript] Funktionen dynamisch erstellen, aber einen Parameter fest von "außen" rein *erledigt* theHacker Programmierung 3 14.08.2008 09:02:34
[V] erkaufe eBook "Einführung in Template-System mit Smarty" theHacker Lose4Scripts 10 27.09.2007 22:26:34
Game Boy spiele "DuckTalers 2", "Super Mario Land", "Goal!" Bani Lose4Misc 1 13.03.2007 10:34:57
"kleineres Problem" - komm nicht in meine eigene Wohnung und hab kein Geld KingMarcello Das wahre Leben 63 03.10.2006 17:35:01


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01:00 Uhr.