Zur Boardunity Forenstartseite
  #1  
Alt 19.11.2005, 11:30
Benutzerbild von Bynaus
Planetenweltler
 
Registriert seit: 04.2005
Beiträge: 34

Spezialseiten-Entwicklung


Hallo!
Ich möchte für die nächste Version meiner Seite www.planeten.ch gerne das Calitrix verwenden, allerdings muss ich dazu die Spezialseitenentwicklung beherrschen. Ich hab mich mal darin versucht, eine Spezialseite zu entwickeln, die eigentlich der Sitemap entspricht, aber nur einen bestimmten Namensraum ("Lexikon") auflistet.

Das führt dazu, dass ich in der special_sitemap.php die Datenbankquery folgendermassen abgeändert habe:

PHP-Code:
$result $db->query('SELECT page_namespace, page_name FROM '.DB_PREFIX.'pages '.
        
'WHERE page_namespace="lexikon" ORDER BY page_name'); 
Darauf erhalte ich folgende Fehlermeldung:
Zitat:
Warning: Smarty error: unable to read resource: "special_lexikon.tpl" in /home/www/web52/html/pages/next/libs/tpl/Smarty.class.php on line 1083
Da ich mich mit Smarty nicht so auskenne - wie lässt sich das beheben? Muss ich ein File "special_lexikon.tpl" erstellen, damit das funktioniert? Wenn ja, wie, und was enthält "special_lexikon.tpl"?

Sollten sich während der Entwicklung der weiteren Spezialseiten noch weitere Probleme ergeben, werd ich die natürlich auch hier posten... Ich hoffe auch, dass andere von diesem Thread profitieren können, die ebenfalls weitere Spezialseiten entwickeln wollen.

Vielen Dank schon mal für die Hilfe.
Freundliche Grüsse
Bynaus

Geändert von Bynaus (21.11.2005 um 14:55 Uhr).
  #2  
Alt 20.11.2005, 12:45
Benutzerbild von Björn
Boardunity Team
 
Registriert seit: 10.2003
Ort: Rhode
Beiträge: 1.205
versuch mal so:
Code:
$result = $db->query('SELECT page_namespace, page_name FROM '.DB_PREFIX.'pages '. 
        'WHERE page_namespace=\'lexikon\' ORDER BY page_name');

__________________
Björn C. Klein
Welt-Held!
PunkRockNews.de
  #3  
Alt 20.11.2005, 12:58
Benutzerbild von Bynaus
Planetenweltler
 
Registriert seit: 04.2005
Beiträge: 34
Danke für die Antwort. Ich habe das soeben versucht, leider bleibt der Fehler derselbe.

Ich habe lediglich die sitemap-Datei abgeändert und überall "sitemap" durch "lexikon" ersetzt, auch im Titel.

  #4  
Alt 20.11.2005, 15:52
Benutzerbild von Bynaus
Planetenweltler
 
Registriert seit: 04.2005
Beiträge: 34
Ha, ich habs. Ich habe das special_sitemap.tpl-File kopiert und als special_lexikon.tpl wieder eingefügt, darin die Variable $sitemap durch $lexikon ersetzt, und jetzt klappts. Cool, dann kann ich mir jetzt meine Sitemaps für verschiedene Namensräume selbst erstellen...

Aber ich bin sicher, es werden hier noch mehr Fragen kommen...

  #5  
Alt 25.11.2005, 19:50
Benutzerbild von exe
exe exe ist offline
titellos
 
Registriert seit: 07.2003
Ort: München
Beiträge: 888
Deine Vorgehensweise war schonmal richtig. Spezialseiten werden nicht in dem Standardtemplate für Wikitexte angezeigt. Jede Spezialseite muss selber angeben, mit welchem Template sie angezeigt werden will. Das Template wird vom CalitrixWiki mit der Funktion "getTemplate()", die von jeder Spezialseite definiert werden muss, abgefragt. Wenn das Lexikontemplate das gleiche wie das Sitemaptemplate ist, kannst du auch einfach in der Funktion "getTemplate()" der special_lexikon.php das Template "special_sitemap.tpl" angeben.

Code:
        /**
         * Returns the template name for this special page.
         *
         * @author Johannes Klose <[email protected]>
         * @return string Template name
         **/
        function getTemplate()
        {
                return 'special_lexikon.tpl';
        }
ersetzen durch

Code:
        /**
         * Returns the template name for this special page.
         *
         * @author Johannes Klose <[email protected]>
         * @return string Template name
         **/
        function getTemplate()
        {
                return 'special_sitemap.tpl';
        }
Das Gleiche findet sich auch in der Doku: http://www.calitrix.de/SpezialseitenEntwicklung

__________________
Johannes Klose
Calitrix Wiki - Wiki auf Basis von PHP und MySQL
  #6  
Alt 26.11.2005, 08:36
Benutzerbild von Bynaus
Planetenweltler
 
Registriert seit: 04.2005
Beiträge: 34
Vielen Dank.

Eine Frage habe ich auch noch: Wie kann man die Darstellung des "Namensraumes" vor dem Link (z.B. in der sitemap) unterdrücken? In einigen dieser "sitemap-Abzweiger" wäre das nämlich noch recht praktisch... Ich habe danach gesucht, aber nichts gefunden.

  #7  
Alt 26.11.2005, 14:01
Benutzerbild von exe
exe exe ist offline
titellos
 
Registriert seit: 07.2003
Ort: München
Beiträge: 888
Die Überschrift steht in der header.tpl:

Code:
    <h1 class="page-title">{$pageTitle}{if $actionTitle != ''} - {$actionTitle}{/if}</h1>
    {$rBackLink}
Für deine Änderung müsstest du sie in alle anderen Templates verschieben, also action_*.tpl und special_*.tpl. In der special_sitemap.tpl kannst du dann eine andere Überschrift nehmen, beispielsweise

Code:
<h1 class="page-title">{$pageName}</h1>
{$pageTitle} enthält den Titel der Seite der unter Umständen (wenn der Namensraum vom Standardnamensraum abweicht) auch den Namensraum enthält.
{$pageName} enthält nur den Name der Seite ohne Namensraum.

__________________
Johannes Klose
Calitrix Wiki - Wiki auf Basis von PHP und MySQL
  #8  
Alt 26.11.2005, 14:11
Benutzerbild von Bynaus
Planetenweltler
 
Registriert seit: 04.2005
Beiträge: 34
Vielen Dank, das hilft mir weiter.

  #9  
Alt 01.12.2005, 22:18
Benutzerbild von Bynaus
Planetenweltler
 
Registriert seit: 04.2005
Beiträge: 34
Nun, da wäre die nächste Frage... Wie schaff ich es, einen extern eingebundenen Text zu Parsen wie einen Text in der Wiki-Text-Datenbank? Das heisst, wenn ich aus einer externen Datenbank einen Text mit einem [[Link]] importiere, wir bringe ich Calitrix dazu, diesen auch wirklich in einen Link zu verwandeln?
Das gleiche gilt für Bilder (niedrigere Priorität, Links wären wichtiger), etc. Ich habe es mit Vergleichen zum "include"-Plugin versucht, aber es will mir nicht recht gelingen. Das mag damit zusammenhängen, dass ich nicht wirklich verstehe, was da im "include"-Plugin wirklich geschieht...

Wenn jemand eine Idee oder einen Hinweis hat, wäre ich dankbar.

__________________
Besucht mich doch mal auf meinen Webseiten:
www.planeten.ch - Neun und mehr Planeten
www.final-frontier.ch - Kommentare vom Rand des Universums
  #10  
Alt 01.12.2005, 23:15
Benutzerbild von exe
exe exe ist offline
titellos
 
Registriert seit: 07.2003
Ort: München
Beiträge: 888
Den Parser des Wikis für andere Texte als Artikel zu verwenden funktioniert nicht, da er Informationen (einen Seitenname, Namensraum usw.) benötigt die nur ein Artikel besitzt. Das Problem ist mir aber auch schon bekannt und bis zur 1.0 wird der Parser noch verbessert um beliebige Texte damit zu parsen.

Als eine Art "ugly Hack" könntest du für den Parser eine leere Dummyseite erstellen, den Text dieser Seite auf den zu parsenden Text setzen und das ganze durch den Parser jagen:
PHP-Code:
<?PHP
$meinText 
'Foo [[Bar]] baz [[quux]]';
$parser = &singleton("parser"); // Instanz vom Parser holen

// Leere Dummyseite holen
$dummy $GLOBALS['wiki']->getPage("Dummy"false);
// Text der Dummyseite setzen
$dummy['page_text'] = $meinText;

// Dummy parsen
$text $parser->parseText($dummy);
?>

__________________
Johannes Klose
Calitrix Wiki - Wiki auf Basis von PHP und MySQL
  #11  
Alt 02.12.2005, 08:51
Benutzerbild von Bynaus
Planetenweltler
 
Registriert seit: 04.2005
Beiträge: 34
Funktioniert... ! Vielen Dank.

Auf wann ist der Release von 1.0 eigentlich geplant?

EDIT: Mir ist soeben etwas aufgefallen, was man noch verbessern könnte: wenn man als User auf Zufallsseite klickt, dann kommen ab und zu auch Seiten, auf die man keinen Zugang hätte - entsprechend kriegt man eine Fehlermeldung. Wäre es vielleicht möglich, das so einzustellen, dass die Spezialseite "Zufallsseite" nur Seiten aufruft, die man auch betrachten darf? Sonst bekommt man mit der Zeit recht viele "Absagen", je nach dem, wie gross der Umfang der "versteckten" bzw. "verbotenen" Seiten ist.

EDIT2: Noch einmal zu deinem "ugly hack": Könnte ich dafür nicht auch eine andere (bereits existierende) Seite nehmen? So lange ich ja unter "/Text der Dummyseite setzten" den wahren Text für den Parser "überschreibe", sollte das doch keine Rolle spielen. Oder doch? Ich ändere ja dann an der Seite selber nichts, trage nichts in die Datenbank ein, etc..

__________________
Besucht mich doch mal auf meinen Webseiten:
www.planeten.ch - Neun und mehr Planeten
www.final-frontier.ch - Kommentare vom Rand des Universums
  #12  
Alt 02.12.2005, 19:20
Benutzerbild von exe
exe exe ist offline
titellos
 
Registriert seit: 07.2003
Ort: München
Beiträge: 888
Klar, wenn du bereits eine Seite geladen hast, kannst du auch die verwenden. Nur extra eine zu laden wäre verschwendung, schliesslich kostet das eine eigene Datenbankabfrage.

Zitat:
Auf wann ist der Release von 1.0 eigentlich geplant?
Im Dezember wirds wahrscheinlich nix mehr aber im Januar dann.

__________________
Johannes Klose
Calitrix Wiki - Wiki auf Basis von PHP und MySQL
  #13  
Alt 08.12.2005, 11:35
Benutzerbild von Bynaus
Planetenweltler
 
Registriert seit: 04.2005
Beiträge: 34
Hm, ich hab wieder mal eine Frage: Angenommen, ich möchte eine Seite einrichten, mit der ich in Calitrix Änderungen in der Datenbank vornehmen kann (in gesonderten Tabellen). Wie pack ich das am besten an? Über Spezialseiten? Über Actions? Über Plugins?

Gibt es die Möglichkeit, eine php-Seite zu includen? Vielleicht könnte man ein Plugin schreiben, welches das includen von php-Seiten ermöglichen würde?

EDIT: Ich habs mal versucht... Leider funktioniert das nicht ganz so wie gewünscht: der Text, der auf der includeten Seite mit print ausgegeben wird, wird ganz zuoberst im Wiki (also noch vor der Top-Leiste, ausserhalb des Textfeldes) ausgegeben. Dazu funktionieren relative Links nicht.

Hat jemand eine Idee?

PHP-Code:
class plugin_phpinclude
{
    var 
$pageText '';
    
    function 
plugin_phpinclude(&$params$text)
    {
        
$url $params['page'];
        
        
$url "http://www.url.com/wiki/includes/include_" $url ".php";
        
        
$this->pageText = include($url);
    }
    
    function 
getContent()
    {
        return 
$this->pageText;
    }


__________________
Besucht mich doch mal auf meinen Webseiten:
www.planeten.ch - Neun und mehr Planeten
www.final-frontier.ch - Kommentare vom Rand des Universums
  #14  
Alt 08.12.2005, 13:18
Benutzerbild von exe
exe exe ist offline
titellos
 
Registriert seit: 07.2003
Ort: München
Beiträge: 888
Das kommt erstmal drauf an, wie du die Änderungen an der Datenbank durchführen willst. Wenn du eine extra Seite haben willst die Inhalte in die Datenbank einfügt und wieder anzeigt (beispielsweise ein Gästebuch oder Newsseite) bieten sich Spezialseiten an. Wenn du innerhalb eines Artikels ein Script aufrufen willst welches eine bestimmte Aktion durchführt (beispielsweise ein Hitcounter) bietet sich ein Plugin an (da muss ja keine extra Seite angezeigt werden). Actions brauchst du nur, wenn du zu den bestehenden Aktionen (Bearbeiten, History, Optionen usw.) etwas hinzufügen willst.

PHP-Includes wären prinzipiell machbar. Wenn ein via include eingebundenes Script aber eigene Daten via echo ausgibt, musst du diese abfangen da sie sonst, wie du siehst, vor allen anderen Ausgaben auftauchen. Die benötigten Funktionen dafür sind ob_start(), ob_get_contents() und ob_end_clean().

PHP-Code:
ob_start();
include 
$url;
$this->pageText ob_get_contents();
ob_end_clean(); 
Bei solchen Sachen musst du aber gut auf Sicherheit achten. Nicht das ein Benutzer ein willkürliches PHP-Script einbinden kann, welches dann böswilligen PHP-Code auf deinem Server ausführt. Nebenbei musst du includes nicht via URL sondern über das Dateisystem des Servers einbinden, wenn du PHP-Code ausführen willst. An das Wurzelverzeichnis des Wikis kommst du über die Konfiguration:

PHP-Code:
$GLOBALS['wiki']->cfg['doc_root'

__________________
Johannes Klose
Calitrix Wiki - Wiki auf Basis von PHP und MySQL
  #15  
Alt 08.12.2005, 14:52
Benutzerbild von Bynaus
Planetenweltler
 
Registriert seit: 04.2005
Beiträge: 34
Vielen Dank für die Antwort.

Das phpinclude werd ich mal so umschreiben und dann sehen, was dabei rauskommt. Was die Sicherheit angeht: wie du oben siehst, verwende ich einen speziellen Namen (der, der dem Plugin per "page=" übergeben wird und unter $url abgespeichert wird), der dann einem bestimmten Verzeichnis zugewiesen wird, in dem alle "erlaubten" php-Files liegen. Da gibt es dann keine Möglichkeit, auszubrechen, oder? Ich könnte ausserdem noch Testen, ob im übergebenen Namen nur Buchstaben vorkommen.

Für richtige Datenbank"interfaces" wären aber wohl doch Spezialseiten besser. Ich schau mal, was sich da eher anbietet.

EDIT: Cool, funktioniert! Wers kopieren will: (einen Ordner "includes" ist im Wiki-Rootverzeichnis zu erstellen, in dem alle gewünschen php-Includes unter dem Format include_irgendwas.php abgespeichert werden. Dem Plugin wird unter dem Namen Page dann "irgendwas" übergeben.)

PHP-Code:
class plugin_phpinclude
{
    var 
$pageText '';
    
    function 
plugin_phpinclude(&$params$text)
    {
        
$url $params['page'];
        
        if(
ereg("[a-zA-Z0-9]+",$url,$regs))
        {
            
$url $GLOBALS['wiki']->cfg['doc_root']  . "/includes/include_" $url ".php";
        }
        
        
ob_start();
        @include 
$url;
        
$this->pageText ob_get_contents();
        
ob_end_clean();         
    }
    
    function 
getContent()
    {
        return 
$this->pageText;
    }


__________________
Besucht mich doch mal auf meinen Webseiten:
www.planeten.ch - Neun und mehr Planeten
www.final-frontier.ch - Kommentare vom Rand des Universums
  #16  
Alt 09.12.2005, 09:06
Benutzerbild von exe
exe exe ist offline
titellos
 
Registriert seit: 07.2003
Ort: München
Beiträge: 888
Zitat:
Zitat von Bynaus
Da gibt es dann keine Möglichkeit, auszubrechen, oder? Ich könnte ausserdem noch Testen, ob im übergebenen Namen nur Buchstaben vorkommen.
Doch, bei deiner Prüfung ist das noch möglich, da du nur prüfst ob eine Folge von Buchstaben in der URL vorkommt, nicht ob die auch vom ersten bis zum letzten Zeichen geht. Man könnte eventuell immer noch mit ../../../foo aus dem include-Verzeichnis ausbrechen.

PHP-Code:
if(preg_match("/^[a-zA-Z0-9]+$/",$url)) 
Damit prüfst du, das die Buchstabenfolge auch wirklich vom ersten bis zum letzten Zeichen in der URL anhält.

__________________
Johannes Klose
Calitrix Wiki - Wiki auf Basis von PHP und MySQL
  #17  
Alt 09.12.2005, 11:30
Benutzerbild von Bynaus
Planetenweltler
 
Registriert seit: 04.2005
Beiträge: 34
Du hast recht, daran hab ich gar nicht gedacht. Vielen Dank, habe das geändert.

EDIT: Mir ist gerade aufgefallen, dass mein Skript zwar prüft, ob nur Buchstaben im übergebenen Text vorkommen - aber danach gar nichts damit macht. Korrekt sollte es also heissen:

PHP-Code:
if(ereg("[a-zA-Z0-9]+",$url,$regs))
        {
            
$url $GLOBALS['wiki']->cfg['doc_root']  . "/includes/include_" $url ".php";
        
            
ob_start();
            @include 
$url;
            
$this->pageText ob_get_contents();
            
ob_end_clean();         
        } 

__________________
Besucht mich doch mal auf meinen Webseiten:
www.planeten.ch - Neun und mehr Planeten
www.final-frontier.ch - Kommentare vom Rand des Universums

Geändert von Bynaus (09.12.2005 um 13:08 Uhr).
  #18  
Alt 10.12.2005, 12:14
Benutzerbild von exe
exe exe ist offline
titellos
 
Registriert seit: 07.2003
Ort: München
Beiträge: 888
PHP-Code:
class plugin_phpinclude
{
    var 
$pageText '';
    
    function 
plugin_phpinclude(&$params$text)
    {
        
$url $params['page'];
        
        if(
preg_match("/^[a-zA-Z0-9]+$/",$url))
        {
            
$url $GLOBALS['wiki']->cfg['doc_root']  . "/includes/include_" $url ".php";
            
            
ob_start();
            @include 
$url;
            
$this->pageText ob_get_contents();
            
ob_end_clean();         
        }
    }
    
    function 
getContent()
    {
        return 
$this->pageText;
    }

So sollte es funktionieren ..

__________________
Johannes Klose
Calitrix Wiki - Wiki auf Basis von PHP und MySQL
Antwort


Stichworte
-

Themen-Optionen
Thema bewerten
Thema bewerten:

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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Forensoftware: Früher und heute Maxboy Forensoftware 4 17.08.2005 00:12
Vergleichbare Systeme zu koobi und apexx(in Entwicklung) amroth Blog, CMS, Wiki und Sonstige 9 01.09.2004 23:30






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