Zum Inhalt springen

vordefinierte elemente auf einer webseite

Erstellt am 4. März 2007 · 8 Antworten · letzte Antwort am 8. März 2007

Tags: Frage

schnabelvieh ·

Hallo Alle,

eine Menge Zeit habe ich nun schon mit der Suche verbracht, aber da mir die Konzepte von Typo3 leider noch ziemlich fremd sind, war die Suche ergebnislos. Hier kommt also mein erstes Problem, was ich zu lösen habe.

Also:

Für meinen Fachbereich an der Universität soll eine neue Webseite erstellt werden. Die grobe Struktur ist bereits erstellt (Navigation auf der linken Seite, horizontales Menü oben, schöner Header, usw. ....) und nun muß ich die einzelnen Seiten mit Inhalt versehen.

Für die einzelnen Mitarbeiterseiten will ich einen gewissen Pfichtanteil an Informationen vorsehen, den aber jeder Mitarbeiter selber einpflegen soll.
Der Pflichtanteil besteht aus den üblichen Dingen:

Telefonnummer, email, Bild, Raumnummer, Lehrveranstaltung ....

Damit auch jeder Mitarbeiter diesen Inhalt tatsächlich eingibt, soll er auf seiner persönlichen Seite einen Haufen an vordefinierten Elementen vorfinden, die er nur noch editieren muß, damit der Inhalt denn auch stimmt.

Mmmmm, soweit mein Problem. Mir stellt sich die Frage, wie ich diese Elemente denn definieren kann. Ich hoffe, dass einer von Euch mich in die richtige Richtung stupsen kann.

Einen großes Dankeschön schonmal im Voraus

Nico

laptop24 ·

Hallo,

das Problem ist relativ leicht zu lösen, wenn man weiss, wie es gemacht wird. Es zu erklären dauert etwas länger. Hier kommt mein Versuch:

Zunächst würde ich dieses mit dem Templatekonzept von "TemplaVoila" lösen.
Dabei erstellst Du zwei Seitenvorlagen.

Eine Vorlage enthält nur das Menü, den Header, den Footer und den Bereich, in den der Inhalt rein kommt. Der Bereich für den Inhalt ist vom Typ "Container Element".

Die andere Vorlage ist im Endeffekt die gleiche Vorlage wie die erste, nur mit dem Unterschied, dass zusätzlich zu dem Inhaltscontainer die Elemente reinkommen, die der Benutzer ausfüllen MUSS. Diese Elemente werden im TemplaVoila Datensatz als einfache "Plain Inputfield" angegeben.

Nun setzt Du für die erste Webseite der Homepage die erste Vorlage als Seitenvorlage ein. Damit wird diese Vorlage auf jede Unterseite vererbt; auch auf die Mitarbeiterseiten. Für die Mitarbeiterseiten setzt Du entweder jede einzelne Mitarbeiterseite oder die Seite direkt oberhalb der ersten MA-Seite auf die zweiten Vorlage.

Damit ist muss auf jeder MA-Seite zusätzlich zu dem normalen freien Inhalt die vorgegebenen Felder ausgefüllt werden.

Mir ist klar, dass dieses Konzept gerade für einen Anfänger nicht einfach nachzuvollziehen ist. Deshalb musst Du jetzt gezielt nachfragen und Deine Probleme bei der Umsetzung beschreiben. Dann können wir Schritt für Schritt das Ganze nachvollziehen.

Gruß, L.

schnabelvieh ·

Hallo laptop24,

danke erstmal, ich hatte schon befürchtet, dass ich auf TemplaVoila umsteigen muß. Bislang habe ich alles mit css_styled_content und dem template Auto-Parser "implementiert".

Ich werde es mal versuchen ....

Bis dahin, und danke für dein Angebot weiterhin zu helfen.

Nico

schnabelvieh ·

Hallo Laptop24,

ein kleiner Statusbericht.

Mit Hilfe des "Futuristic Template Building" Tutorials habe ich den template Auto-Parser ersetzt. Meine Menüs sind wieder da, die Seitenstruktur geht auch wieder, sprich die erste Vorlage steht.

Nun bin ich gespannt auf den zweiten Teil 🙂

Nico

schnabelvieh ·

Hallo Laptop24,

nun habe ich wieder ein paar Fragen.

Zur Verdeutlichung hier das html-template der Mitarbeiterseite:

<head>
    <title>TU Berlin: Willkommen bei am Fachgebiet</title>
    <link rel="stylesheet" type="text/css" href="css/iee_style.css" />
  </head>
  <body>
    <div id="branding">
      <div id="home">
        <a href="index-hauptgebaeude_alt.html" accesskey="1"><img src="img/logo.gif" alt="Logo der TU Berlin" /></a>
      </div>
      <div id="head">
        <div class="section">
          <p><em>Institut f&uuml;r Energie- und Automatisierungstechnik</em>
          Fachgebiet Elektrische Antriebstechnik</p>
        </div>
      </div>
      <div id="nav_top" >
      </div>
      <div id="nav_whereami">
      </div>
    </div>  <!-- ende branding -->
    <div id="wrapper">
      <div id="contents">
        <div id="nav_left">
        </div>
        <div id="main">
          <table>
          <tr>
            <td>Name:</td><td>hier bitte den Namen eintragen</td>
          </tr>
          <tr>
            <td>Tel:</td><td>hier bitte Telefonnummer eintragen</td>
          </tr>
        </table>
        </div>
      </div>
    </div>
  </body>
</html>

Das html-Template der Hauptseite sieht prinzipiell genauso aus, lediglich der <table> Eintrag fehlt.

Nach dem üblichen Mappingverfahren habe ich aus dem html-Template die Datenstruktur und das Template-Object für die Hauptseite erzeugt.

Für <div id="main"> habe ich bislang eine Datenstruktur mit den folgenden Eigenschaften gesetzt:

1. Mapping Type: Element
2. Editing Tpe: RTE for body text.

um das freie Einfügen von Inhalten zu ermöglichen.

Jetzt bastele ich gerade an dem Template für die Mitarbeiterseite herum.
Jetzt stellt sich mir die Frage, welche Art von Template ich denn eigentlich erstellen muss.

1. Wird das neue Mitarbeitertemplate (bzw Templateobject) ein Subtemplate (Make this a sub-template) der Hauptseite ? Der <table>-Eintrag wird lediglich zusätzlich in die Datenstruktur übernommen.

2. Wird das neue Mitarbeitertemplate kein Subtemplate ? Benutze ich aber trotzdem die Datenstruktur der Hauptseite ?

3. Oder erzeuge ich eine komplett neue Datenstruktur und ein neues TO ?

Leider kann ich die Fragen nicht wirklich beantworten, aber ich tendiere zur dritten Variante, da ich folgendes Problem sehe:

Bei Variante eins und zwei wird ja jeweils die Datenstruktur des Hauptseitentemplates mitgeändert. Hier soll ich ja als MappingType "Container for Elements" verwenden, damit fehlt mir dann die Möglichkeit, den Benutzer sein Zeug unverfälscht in den <div id="main">-Block zuschreiben, deshalb bleibt nur noch Variante drei übrig.

Oder vielleicht doch nicht .... mappe ich <div id="wrapper"> und <div id="contents"> auf den Typen "Container for Elements", ziehe die Table-Struktur aus der <div id="main">-Box und mappe dann beide auf den Typen Element ?

Dann kann ich sicherlich variante eins oder auch zwei verwenden.

Fragen über Fragen, ich denke man merkt, daß ich die ganze Geschichte noch nicht wirklich begriffen habe 🙁

Schöne Grüße von einem grübelnden Anfänger .....

Nico

~

schnabelvieh ·

Mmmmm, ok, ich glaube allmählich mülle ich das Forum zu, vielleicht sollte ich aber auch einen neuen Thread aufmachen.

Ich habe die zuletzt von mir erwähnte Variante mal ausprobiert.

Zunächst habe ich <div id="contents"> auf den Mapping Typen "container for elements" gesetzt und den Container als Section markiert.
Innerhalb des Containers habe ich zunächst <div id="nav-left> als Element gemappt.

Im html-Preview wird dieses Element auch angezeigt. Die Seite im Browser zeigt den <div id="nav_left"> Eintrag leider nicht ? Weiß jemand warum ?

Schöne Grüße

Nico

schnabelvieh ·
schnabelvieh schrieb

Mmmmm, ok, ich glaube allmählich mülle ich das Forum zu, vielleicht sollte ich aber auch einen neuen Thread aufmachen.

Ich habe die zuletzt von mir erwähnte Variante mal ausprobiert.

Zunächst habe ich <div id="contents"> auf den Mapping Typen "container for elements" gesetzt und den Container als Section markiert.
Innerhalb des Containers habe ich zunächst <div id="nav-left> als Element gemappt.

Im html-Preview wird dieses Element auch angezeigt. Die Seite im Browser zeigt den <div id="nav_left"> Eintrag leider nicht ? Weiß jemand warum ?

Schöne Grüße

Nico

Noch eine kleine Ergänzung:

Diese Fehlermeldung läuft mir ab und an mal über den Weg:

Fatal error: Cannot use string offset as an array in /var/www/localhost/htdocs/typo3_empc15/typo3conf/ext/templavoila/class.tx_templavoila_api.php on line 1439

[/quote]

schnabelvieh ·
schnabelvieh schrieb
schnabelvieh schrieb

Mmmmm, ok, ich glaube allmählich mülle ich das Forum zu, vielleicht sollte ich aber auch einen neuen Thread aufmachen.

Ich habe die zuletzt von mir erwähnte Variante mal ausprobiert.

Zunächst habe ich <div id="contents"> auf den Mapping Typen "container for elements" gesetzt und den Container als Section markiert.
Innerhalb des Containers habe ich zunächst <div id="nav-left> als Element gemappt.

Im html-Preview wird dieses Element auch angezeigt. Die Seite im Browser zeigt den <div id="nav_left"> Eintrag leider nicht ? Weiß jemand warum ?

Schöne Grüße

Nico

Noch eine kleine Ergänzung:

Diese Fehlermeldung läuft mir ab und an mal über den Weg:

Fatal error: Cannot use string offset as an array in /var/www/localhost/htdocs/typo3_empc15/typo3conf/ext/templavoila/class.tx_templavoila_api.php on line 1439

[/quote]

Nochmal: diesmal ein anderes *.php-Script:

Fatal error: Cannot use string offset as an array in /var/www/localhost/htdocs/typo3_src-4.0.2/t3lib/class.t3lib_transferdata.php on line 594

und das immer wenn ich die "page properties" ändern will ..... 😢

laptop24 ·

Hallo,

Für <div id="main"> habe ich bislang eine Datenstruktur mit den folgenden Eigenschaften gesetzt:

1. Mapping Type: Element
2. Editing Tpe: RTE for body text.

Hier solltest Du den Editing Type als "Container Element" wählen. Denn sonst kannst Du an der Stelle nur einen normalen Text eintrage, aber keine Bilder, Plugins, Listen, etc. Das "Container Element" bewirkt, dass Du an dieser Stelle im Seitenmodul alle Inhaltstypen eintragen kannst, die Du an anderer Stelle auch hättest eintragen können.

Jetzt stellt sich mir die Frage, welche Art von Template ich denn eigentlich erstellen muss.

1. Wird das neue Mitarbeitertemplate (bzw Templateobject) ein Subtemplate (Make this a sub-template) der Hauptseite ? Der <table>-Eintrag wird lediglich zusätzlich in die Datenstruktur übernommen.

2. Wird das neue Mitarbeitertemplate kein Subtemplate ? Benutze ich aber trotzdem die Datenstruktur der Hauptseite ?

3. Oder erzeuge ich eine komplett neue Datenstruktur und ein neues TO ?

Hier ist Punkt 3 richtig, obwohl das davon abhängt, was man machen will. Ich würde das aber mal pauschal so bewerten, dass 3tens die richtige Wahl ist.

Du hättest dann zwei verschiedene DS vom Typ "Seitenvorlage" mit jeweils einem TO.

Ich will Dich nicht verwirren, aber eine weitere Möglichkeit (die ich persönlich bevorzuge) wäre:

Definiere ein DS vom Typ "Seitenvorlage", das das Layout Deiner Seite festlegt. Das wäre in dem Sinne das, was Du schon gemacht hast. Damit hättest Du das HTML von oben bis zum DIV#main, ohne die Tabelle im DIV#main.

Anschliessend nimmst Du ein neues DS vom Typ "Flexibles Inhaltselement". Dieses mappst Du nur auf die Tabelle innerhalb von DIV#main (aber ohne das DIV selbst). Damit ersparst Du Dir die doppelte HTML Vorlage.

Der Effekt für die Redakteure ist:
Ein Redakteur erstellt eine neue Seite. Diese hat das Standardlayout, weil es auf der ersten Seite so festgelgt wurde (Vererbung). Auf einer normalen Seite fügt er nun Texte, Bilder, Trallala ein. Wie üblich.

Auf einer MA-Seite fügt er ein Flexibles Inhaltselement "MA-Angaben" ein. Dort muss er die definierten Felder ausfüllen. Typo macht daraus deine Tabelle, die an der richtigen Stelle auf der Seite steht.

(Ist das verständlich geworden?)