Welcome, Guest. Please login or register.
Did you miss your activation email?
May 25, 2012, 01:48:04 PM

Login with username, password and session length
Search:     Advanced search
Interested in joining the WebsiteBaker team?
For more Information read here or on our new website.
155504 Posts in 21710 Topics by 7736 Members
Latest Member: deenangle
* Home Help Search Login Register
Pages: [1]   Go Down
Print
Author Topic: Meine Funktion section_content  (Read 637 times)
yggdrasil

Offline Offline

Posts: 151



« on: June 20, 2009, 01:35:51 PM »

Hallo,

vielleicht gibt es sowas ja schon, aber ich habe vor einiger Zeit das Problem gehabt, dass ich statisch auf jeder Seite den Inhalt einer bestimmten versteckten Seite haben wollte. Hatte eine versteckte Page namens "Sidebar", in der ich einen Flash-Musikplayer eingebunden hatte, dann noch einige Sections an Text mit WYSIWYG usw. Habe mir dann eine Funktion geschrieben, der ich den Namen der Seite übergebe und einen Spacer, und dann gibt er mir nach der Reihe alle Sections dieser Seite aus, getrennt mit dem Spacer, vielleicht nützt die ja jemandem was. Mit einem optionalen Array $positions kann man nur spezielle Sections ausgeben, so wie sie in der Reihenfolge im Backend auf der Seite angeordnet sind. Dies geht nicht nach section_id, sondern ausschließlich nach der Position.

Funktion section_content($page_title, [$spacer], [array $positions]), einfügen in frontend.functions. php

Code:
if (!function_exists('section_content')) {
    function section_content($page_title, $spacer = '',  array $positions = null)
    {
          global $database;
          global $wb;
          
          # Get ID of the page
          $id_query = "
                      SELECT pages.page_id
                      FROM pages
                      WHERE pages.page_title = '$page_title';
          ";
          $page_id = $database->get_one($id_query);
          
          # List all sections of the page and fill array with information
          $section_query = "    
                            SELECT *
                            FROM sections
                            WHERE sections.page_id = '$page_id'
          ";
          $section_array = $database->get_all($section_query);

          
          # Kick out every content which position-number is not in the positionsarray
          if ($positions != null)
          {
              for ($i = 0; $i < count($section_array); $i++)
              {
                  $contains = false;
                  for ($j = 0; $j < count($positions); $j++)
                  {
                      if ($section_array[$j]['position'] == $positions[$i])
                      {
                          $contains = true;
                      }
                  }
                  if ($contains == false)
                  {
                      unset($section_array[$i]);
                      $section_array = array_values($section_array);
                  }
              }
          }
          
          # Reverses the array, now the it's in the correct order like it is in WB
          $section_array = array_reverse($section_array);
          
          # go through the array and execute the view.php file in the module folder
          foreach ($section_array as $section)
          {
              $section_id = $section['section_id'];
              # WB_PATH includes \, but we need / -> replace it!
              $wb_path_replaced = str_replace("'\'", '/', WB_PATH);
              include ($wb_path_replaced . "/modules/{$section['module']}/view.php");

                          # Spacer between every single section | Default is an empty string ''
                          echo $spacer;    
          }
              
    }
}

In dieser Funktion wird eine euch warscheinlich unbekannte Funktion der DB-Klasse aufgerufen, get_all($query). Diese Funktion holt Datensätze aus der Datenbank und hängt sie als Arrays an ein großes Array an, so spart man sich dieses
Code:
while ($row = mysql_fetch_assoc($this->result))
. Wäre auch cool, wenn diese oder eine ähnliche Funktion in späteren Veröffentlichungen implementiert werden würde.

Funktion get_all($statement), einfügen in class.database.php als Methode der Database-Klasse:

Code:
   
function get_all($statement)
{
    $mysql = new mysql();
    $result = $mysql->query($statement);
    if ($mysql->error())
    {
        die ($mysql->error());    
    }
    else
    {
        $array = array();
        while ($row = mysql_fetch_assoc($mysql->result))
        {
            $array[] = $row;
        }
        return $array;    
    }
}

Im Template jetzt nur noch an der bestimmten Stelle wo man die Seite ausgeben will folgendes schreiben:

Code:
echo @section_content("Seitenname");
Das @ vor der Funktion soll nur verhindern, dass Im Falle, dass die Seite nicht existiert oder kein Content vorhanden ist, eine Fehlermeldung ausspuckt. So bleibt der Bereich einfach leer.

Schon hat man auf jeder Seite den Inhalt einer speziellen Seite  cool

Wenns Fragen oder Probleme gibt, einfach melden.

Lg
« Last Edit: June 30, 2009, 01:11:12 PM by yggdrasil » Logged

Fight for animal Liberation!!!
yggdrasil

Offline Offline

Posts: 151



« Reply #1 on: June 20, 2009, 10:40:09 PM »

Wenigstens ein "Oh man, sowas gibts doch schon" wäre schon gut^^
Logged

Fight for animal Liberation!!!
ruebenwurzel
WebsiteBaker Org e.V.

Offline Offline

Posts: 7973



WWW
« Reply #2 on: June 21, 2009, 11:09:22 AM »

Hallo,

gibt es schon mehrfach  grin. Stichwort "Global Blocks", "Gleicher Inhalt auf mehreren Seiten" .... Such mal das Forum.

Kann man auch einfach ohne funktion mit include lösen, oder über einen Puffer ( ob_start ) ......

So wie ich dich verstanden habe willst du ja lediglich einen bestimmten Content (Dein Musikplayer) auf allen Seiten anzeigen lassen und diesen content auf einer versteckten Seite vom backend aus pflegen.

Matthias
Logged
yggdrasil

Offline Offline

Posts: 151



« Reply #3 on: June 21, 2009, 12:06:04 PM »

Das mit den Global Blocks fand ich etwas seltsam^^ Dachte mir auch ich verpack das schön in einer Funktion, die kann ich dann schnell anwenden ohne irgendwelche Buffer oder includes.

Lg
Logged

Fight for animal Liberation!!!
Stefek
WebsiteBaker Org e.V.

Offline Offline

Posts: 4884



« Reply #4 on: June 21, 2009, 12:35:36 PM »

Hi, sehr interessante Herangehensweise.

Es wird nicht ganz klar ersichtlich, ob es sich bei "Seitenname" um Menu_Title oder Page_Title handelt und außerdem wäre es vielleicht besser, wenn man anstatt Namen, die ID der Seite bzw. der Section verwendet?

Gruß,
Stefek
Logged

"In a time of universal deceit, telling the truth becomes a revolutionary act."
- George Orwell, Nineteen eighty-four (1984)
yggdrasil

Offline Offline

Posts: 151



« Reply #5 on: June 21, 2009, 08:12:10 PM »

page_title wird verwendet smiley Ich habe bewusst nicht die ID genommen, da falls jemand die Seite "Sidebar" löscht ausversehen, kann man einfach eine neue Seite namens "Sidebar" erstellen, und schon funktioniert es wieder. Ich habe nähmlich versteckte Seiten für E-Mail, Telefonnummer usw. die der Kunde dann einfach so bearbeiten kann. Falls er eines der Felder jetzt löscht, dann kann er einfach eine neue Page erstellen die so heißt, ohne dass ich jetzt dann erstmal die Id der neuen Page angucken muss und dann umcoden muss, kann ja sein, dass ich gerade keinen Computer habe, bzw. kein FTP-Client usw. Hab mir schon was dabei gedacht^^

Lg
Logged

Fight for animal Liberation!!!
Stefek
WebsiteBaker Org e.V.

Offline Offline

Posts: 4884



« Reply #6 on: June 21, 2009, 10:11:41 PM »

Ah ja, der page title.

Ja, das Argument macht Sinn. wink

VG,
Stefek
Logged

"In a time of universal deceit, telling the truth becomes a revolutionary act."
- George Orwell, Nineteen eighty-four (1984)
Pages: [1]   Go Up
Print
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2011, Simple Machines Valid XHTML 1.0! Valid CSS!