Antworten auf deine Fragen:
Neues Thema erstellen

Komplexe Suchfunktion - Array statt SQL DB durchsuchen?

ap1

Grafik/Web

Hallo Leute!

ich habe ein mittelschweres Problem!

Es wird Inhalt in einer SQL Datenbank gespeichert (tbl: content) und mit einem einfachen Query durchsucht!
soweit hab ichs geschafft :)

Jetzt möchte ich allerdings
(da man Textbausteine verwenden kann) folgendes Szenario auch durchsuchen!
Textbausteine befinden sich ebenfalls in der Datenbank (tbl: bausteine) haben aber bis zur endausgabe nichts mit dem Inhalt zu tun!

Inhalt ist zum Beispiel: (steht in der DB)
PHP:
Herzlich Willkommen auf der Seite!

Möchten Sie mich kontaktieren? 
{_kontaktblock_}
Und ausgegeben wird über den Templateparser bei diesem Beispiel:
PHP:
Herzlich Willkommen auf der Seite!

Möchten Sie mich kontaktieren?
Nutzen Sie das Kontaktformular (hier klicken) oder kontaktieren Sie mich per Email! 
Die Email dazu blalaaabla usw usf.,..
Warum hab ich solche "Blöcke"? (auch Textbausteine genannt)
Angenommen man möchte auf fast jeder Seite einen Anfahrtsplan haben oder sowas dann muss man nicht den Mega langen Text eingeben sondern es reicht {_XXXXXXblock_} anzugeben!

Die Seite gibt alles richtig aus - kein Problem - aber!
Wie schaffe ich es den Inhalt durchsuchen zu lassen, wie er ausgegeben wird und nicht wie er in der Datenbank steht?

Geht das irgendwie?

Ich hoffe ihr versteht mich und könnt mir helfen ;)
(PS: an eine Indizierung habe ich auch schon gedacht, möchte sie aber wenn es geht verhindern! Sollte mich jemand mit triftigen Argumenten überzeugen dass die Indizierung sinnvoll ist (warum auch immer) dann möchte ich wissen wie ich das machen soll? Wie aktualisieren lassen? Wann aktualisieren lassen?...)
 

Chriss1987

me.drinkCoffee();

AW: Komplexe Suchfunktion - Array statt SQL DB durchsuchen?

Hi,

du könntest das so machen, dass du erst alle "Wortmarken" aus der DB liest und damit ein Array füllst, anschließend den Text nach diesen Wortmarken durchsuchst und die entsprechenden Funde mit den Text der Bausteine ersetzt:
PHP:
<?php

// liest alle gespeicherten Blöcke und deren ID's aus und gibt ein Array mit den ID's als Key und den Texten als Value zurück
// $sql ist ein Objekt (aus mysql-Klasse) und muss entsprechend angepasst werden
function getBlocks ($sql)
    {
        $result = $sql->select("SELECT id, name FROM bausteine");
        
        $return = array();
        
        foreach ($result AS $baustein) 
            {
                $return[$baustein->id] = $baustein->name;
            }
        
        return $return;
    }

// durchsucht den Text nach Textbaustein-Markern und ersetzt diese mit entsprechendem Text
// auch hier: $sql ist ein Objekt (aus mysql-Klasse) und muss entsprechend angepasst werden
function replaceBlocks ($text, $bloecke, $sql)
    {
        // mit RexEx nach {_baustein_} suchen
        if ($c=preg_match_all ("/(\\{)(_)(?:[a-z][a-z]+))(_)(\\})/is", $text, $treffer))
            {
                // für alle Treffer
                foreach ($treffer[0] AS $replace)
                    {
                        // das Array mit den Bausteinen durchsuchen
                        $id = array_search($replace, $bloecke);
                        if ($id !== false)
                            {
                                // und wenns gefunden wurde, den Text der Bausteine aus den DB laden und ersetzen
                                $result = $sql->select("SELECT text FROM bausteine WHERE id = '" . $id . "'");
                                if (count($result) == 1)
                                    {
                                        $text = str_replace("{_" . $replace . "_}", $result[0]->text, $text);
                                    }
                            }
                    }
            }
        return $text;
    }
?>
Die Funktionen sind ungetestet und könnten Fehler enthalten. Ist nur als Anregung gedacht! ;-)
Hoffe, das hilft dir weiter!?

Schöne Grüße aus dem Sauerland!
Chriss
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben