verschachtelte templates

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • verschachtelte templates

    da ich nicht so richtig weiss wohin damit, hau ichs mal hier rein.

    wie der titel schon sagt, gehts um verschachtelte templates.

    folgender hintergrund:
    - es existiert eine struktur auf artikel-/templatebasis
    - bislang werden die artikel auf einer seite untereinander dargestellt
    - 1-n artikel = seiteninhalt

    soweit so gut. nun möchte ich als add-on eine möglichkeit einfügen,
    2-x artikel in einem template nebeneinader darzustellen. der aufbau der
    seite sähe dann so aus:

    *artikel1*
    *artikel2* | *artikel3*
    *tabelle*
    *artikel*

    zu diesem zweck hab ich folgendes gecodet (versuchsweise)
    PHP-Code:
    <pre>
    <?
    /*
    CREATE TABLE artikel (
      id int(11) NOT NULL auto_increment,
      menuid int(11) NOT NULL default '0',
      pos tinyint(4) NOT NULL default '0',
      typ varchar(10) NOT NULL default '',
      tpl tinyint(4) NOT NULL default '0',
      text varchar(30) NOT NULL default '',
      PRIMARY KEY  (id),
      KEY id (id)
    ) TYPE=MyISAM;

    #
    # Daten für Tabelle `artikel`
    #

    INSERT INTO artikel VALUES (1, 1, 1, 'art', 101, '1.artikel');
    INSERT INTO artikel VALUES (2, 1, 5, 'tab', 0, 'tabelle');
    INSERT INTO artikel VALUES (3, 1, 3, 'art', 102, '2.artikel');
    INSERT INTO artikel VALUES (4, 1, 4, 'art', 105, '3.artikel');
    INSERT INTO artikel VALUES (5, 2, 1, 'art', 101, '1.artikelmenu2');
    # --------------------------------------------------------

    #
    # Tabellenstruktur für Tabelle `schachtel`
    #

    CREATE TABLE schachtel (
      sid int(11) NOT NULL default '0',
      menuid int(11) NOT NULL default '0',
      artid int(11) NOT NULL default '0',
      spos tinyint(4) NOT NULL default '0',
      stpl tinyint(4) NOT NULL default '0',
      PRIMARY KEY  (sid),
      UNIQUE KEY artid (artid),
      KEY sid (sid)
    ) TYPE=MyISAM;

    #
    # Daten für Tabelle `schachtel`
    #

    INSERT INTO schachtel VALUES (1, 1, 4, 1, 127);
    INSERT INTO schachtel VALUES (2, 1, 1, 1, 127);
    */

    $conn = mysql_connect($server, $user, $pass);
    $select = mysql_select_db($dbank,$conn);

    $menuid = 1;
                                                          // artikel und schachtel sind über die artikel-id verbunden
    $result = mysql_query("select a.*, s.* 
    FROM artikel a LEFT JOIN schachtel s ON a.id = s.artid 
    WHERE a.menuid=".$menuid." ",$conn) or die(mysql_error());
    while($row = mysql_fetch_array($result,MYSQL_ASSOC))
    {
        $ausgabe[] = $row;
        if(!empty($row['spos']))                          // hilfsarray zur sortierung aufbauen
        {
            $sorter[] = array($row['id'],$row['spos'],"s");   // die position aus schachtel toppt die
        }                                                     // position aus artikel
        else
        {
            $sorter[] = array($row['id'],$row['pos'],"n");
        }
    }
    foreach($sorter as $v) {$s0[]=$v[1]; $s1[]=$v[0]; }   // sortierschlüssel erstellen

    print_r($sorter);                                     // ausgabe unsortiert
    array_multisort($s0, SORT_ASC, SORT_REGULAR, $s1, SORT_ASC, SORT_REGULAR,$sorter);
    print_r($sorter);                                     // ausgabe sortiert nach position und
                                                          // (falls doppelte spos) nach artikelid
                                                          // innerhalb von spos


    /* ab hier gehen beide arrays in eine funktion und basteln die seite
    in der reihenfolge, wie $sorter die position einzelner artikel vorgibt */
    ?>
    </pre>
    das ganze berücksichtigt im moment noch nicht, dass auf einer seite
    mehrfach verschachtelte templates auftauchen können, wäre aber auch
    kein problem.

    nun zu meinen fragen:
    - ist das generell ein schlauer ansatz, das so ^^ anzugehen?
    - lässt sich der code noch optimieren?
    Kissolino.com

  • #2
    hmm, am code hab ich nix zu meckern. da hab ich speziell in den letzten tagen ganz andere sachen gesehen

    von diesem aufbau:

    *artikel1*
    *artikel2* | *artikel3*
    *tabelle*
    *artikel*

    bin ich jedoch nicht überzeugt! male nebeneinander und mal nicht. hört sich nach kauderwelsch an

    ps wenn ich richtig lageweile hab, stelle ich auch mal ne blöde frage
    h.a.n.d.
    Schmalle

    http://impressed.by
    http://blog.schmalenberger.it



    Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
    ... nur ohne :-)

    Kommentar


    • #3
      ich versteh net ganz nach was sich das richtet obs nebeneinander oder untereinander is... kann man das wählen?!

      oder wie? *grübel*

      @code warum nicht?
      Man lernt nie aus...

      ...und wenn man's doch tut braucht man sich auch nicht schämen!

      Kommentar


      • #4
        keiner versteht mich

        sinn und zweck der übung soll folgendes sein:

        nimm z.b die startseite von spiegel.de
        - dort sind auf der seite 10 artikel als teaser eingebaut
        - wichtige artikel stehen einspaltig im zentralen bereich
        - weniger wichtige werden 2-3 spaltig im zentralen bereich eingebunden
        - das ganze wird munter durcheinandergewirbelt
        - links noch ne navi dazu, header & footer dran und raus damit

        eben so:
        *___artikel1______*
        *artikel2* | *artikel3*
        *___tabelle_______*
        *___artikel4______*
        *artikel2* | *artikel3*

        ich hoffe sinn und zweck ist klarer.

        @bloodreaver
        jeder artikel hat eine position, die die reihenfolge bestimmt.
        die tabelle schachtel nimmt nun die ids der artikel auf, die zusammen
        (=nebeneinander) dargestellt werden sollen; wiederum mit einer position.
        die schachtel-pos ist der artikel-pos übergeordnet, in den beispieldaten
        kommt erst der zweispaltige, dann die einspaltigen untereinander.
        Kissolino.com

        Kommentar


        • #5
          bin ich etz so dumm?!

          also ich seh bei spiegel online in der mitte nur artikel die untereinander stehen... und rechts sind nochma so exklusiv teile...

          meinst du vielleicht die teile rechts?!
          Man lernt nie aus...

          ...und wenn man's doch tut braucht man sich auch nicht schämen!

          Kommentar


          • #6
            arrgh ... vor ein paar jahren sah das noch anders aus

            ok, hab mal ne zeichnung gemacht


            es geht um das rote.
            Kissolino.com

            Kommentar


            • #7
              hm jo aber das find ich gibt bissl chaos... aber warum schreibst du den net einfach alle untereinander? weil das eine is nach unten länger, das andere breiter... der text wird ja deshalb net weniger...

              was hat das den für nen vorteil auser das man en extra script für braucht?
              Man lernt nie aus...

              ...und wenn man's doch tut braucht man sich auch nicht schämen!

              Kommentar


              • #8
                dann meinst du wahrscheinlich nicht templates, sondern sowas wie Container (den Begriff kenne ich dafür)!

                du teilst die seite folgendermaßen auf:

                Code:
                [                   container1                   ]
                [container2]       [container3]        [container4]
                                                      [container5]
                                                      [container6]
                [                   container7                   ]
                in die verschiedenen Container kannst du jetzt verschiedene Module reinsetzen.

                als Beispiel:
                Container1: Header (Grafik, etc.)
                Container2: Menü
                Container3: Ausführliche News, etc...
                Container4: Login
                Container5: Poll
                Container6: Aktuelle News (RSS Feed, oder was weiß ich was)
                Container7: Footer

                sowas in der art meinst du ?

                gruss

                Kommentar


                • #9
                  @MoRtAlAn
                  äh, nö ... die verteilung, die ich will/bekomme bezieht
                  sich nur auf deinen "container3" (s. mein image, der rote bereich ^^).

                  ich versuchs nochmal anhand eines beispiels

                  der inhalt meiner startseite besteht aus:
                  :: navigation [links] => unwichtig
                  :: inhalt [mitte]
                  :: shortnews, login, ... [rechts] => unwichtig

                  der inhalt setzt sich (z.B.) aus 5 artikeln/tabellen zusammen
                  (aber bleiben wir bei den artikeln)

                  ein artikel-template sieht z.B. so aus
                  Code:
                  <table><tr><td>{bild}</td><td>{titel}<br /r>{text}</td></tr></table>
                  ein "verschachtelter" artikel baut auf so einem template auf:
                  Code:
                  <table><tr><td>{art1}</td><td>& nbsp;</td><td>{art2}</td></tr></table>
                  {art1}/{art2} werden dann durch je einen artikel ersetzt. das ergebnis
                  wäre dann:
                  Code:
                  <div>
                  <!-- einzelartikel -->
                  <table width=100% border=0><tr><td>MeinBild1</td><td>Titel1<br /r>Text1</td></tr></table>
                  
                  <!-- einzelartikel -->
                  <table width=100% border=0><tr><td>MeinBild2</td><td>Titel2<br /r>Text2</td></tr></table>
                  
                  <!-- doppelartikel -->
                  <table width=100% border=0><tr><td>
                  &nbsp;&nbsp;&nbsp;<table width=100% border=0><tr><td>MeinBild3</td><td>Titel3<br /r>Text3</td></tr></table>
                  </td><td>& nbsp;</td><td>
                  &nbsp;&nbsp;&nbsp;<table width=100% border=0><tr><td>MeinBild4</td><td>Titel4<br /r>Text4</td></tr></table>
                  </td></tr></table>
                  
                  <!-- einzelartikel -->
                  <table width=100% border=0><tr><td>MeinBild5</td><td>Titel5<br /r>Text5</td></tr></table></div>
                  jetzt verständlicher?
                  Kissolino.com

                  Kommentar


                  • #10
                    und wo is problem? dann hast du doch alles? wir ham dir gesagt das wirs unübersichtlich finden und das der code so passt... frage erfüllt...
                    Man lernt nie aus...

                    ...und wenn man's doch tut braucht man sich auch nicht schämen!

                    Kommentar


                    • #11
                      wie definierst du, welche Artikel nebeneinander kommen und welche nicht ??

                      dann meinen wir trotzdem dasselbe

                      dann machst du aus meinem Container3

                      [container3-1][container3-2]
                      [container3-3]

                      oder wie du auch immer willst!

                      mußt halt für jeden Container sagen, wo er den Content herbekommt!

                      gruss

                      Kommentar


                      • #12
                        Re: verschachtelte templates

                        @blood
                        nun zu meinen fragen:
                        - ist das generell ein schlauer ansatz, das so ^^ anzugehen?
                        - lässt sich der code noch optimieren?
                        nur zur erinnerung
                        von übersichtlich oder nicht war erstmal keine rede

                        @mortalan
                        artikel, die nebeneinander stehen werden in der tabelle "schachtel"
                        definiert

                        sid | menuid | artikelid | spos | tpl
                        1 | 1 | 4 | 1 | 127
                        2 | 1 | 1 | 1 | 127
                        3 | 1 | 6 | 5 | 123
                        4 | 1 | 8 | 5 | 123
                        5 | 1 | 3 | 5 | 123

                        - hierarchie:
                        :: alle mit derselben menuid => erscheinen auf der selben seite
                        :: spos entscheidet in welcher reihenfolge sie kommen => hier an 1. & 5. position (2,3,4 wären einzelartikel)
                        :: spos entscheidet auch welche artikel zusammen in einen "container" kommen (gleiche spos => selber container)
                        :: sid ist (im moment) der sortierschlüssel für die reihenfolge quer von links nach rechts
                        => das muss ich noch ändern für ein "edit" (ist noch autoincrement)

                        mein ziel ist es eigentlich, in der ausgabe die zahl der db-abfragen zu reduzieren ... bin aber nicht sicher, wie schlau das ist?
                        Kissolino.com

                        Kommentar


                        • #13
                          sollte auch in einer Abfrage gehen!

                          die Abfrage richtet sich aber stark danach, wie dynamisch die verschachtelung sein soll!

                          kann es vorkommen, dass mal nur verschachtelte Artikel kommen, oder nur normale ?
                          Oder ist es immer das gleiche?

                          je nachdem, wird auch die Programmlogik komplexer!

                          gruss

                          Kommentar


                          • #14
                            genau da hat der frosch die locken

                            1. ja, es soll möglich sein seiten
                            - nur mit
                            - ohne
                            - kunterbund gemischt
                            aufzubauen

                            2. nein, die positionen (damit das layout) sind immer unterschiedlich aber nicht zufällig

                            3. prinzipiell sollen 2- bis n-spaltige container möglich sein (zusammenfassung über "spos")

                            *endlich versteht mich einer *
                            Kissolino.com

                            Kommentar

                            Lädt...
                            X