Registrieren Hilfe Suche Mitgliederliste Wer ist online? Einloggen
Willkommen bei Tritanium Community! Falls dies Ihr erster Besuch hier ist, lesen Sie sich bitte die Hilfe mit den häufigsten Fragen und ausführlichen Erklärungen durch! Falls Sie an den Diskussionen teilnehmen wollen, sollten Sie sich registrieren oder, falls Sie das schon getan haben, sich einloggen. Wir wünschen Ihnen viel Spaß!

Tritanium Community » Suche » Suchergebnisse ansehen Seiten (23) [«   3 | 4 | 5 | 6 | 7   »]

Autor Beitrag
Thema: Neueste Beiträge - und andere Sorgen... (Forum: Andere Fragen und Probleme)
Chrissyx Re: Neueste Beiträge - und andere Sorgen...
Du musst ja nicht zwingend in den cases jeweils eine andere TPL anzeigen. Das war nur ein Beispiel. Du kannst auch einfach der MySite.tpl sagen, welche iframe-URL es nutzen soll. Das geht mittels assign(), z.B. so:
Code
1
Main::getModule('Template')->assign('iframeUrl''http://www.myiframe.tld');


Und dann im TPL sowas:
Code
1
<iframe src="{$iframeUrl}"></iframe>


So kannst Du stets die gleiche TPL verwenden, nur der Inhalt des iframes ändert sich abhängig vom mode. :)
Geposted: 26.01.2013 00:02
Thema: Suche alle Beiträge von.... (Forum: Bugs)
Chrissyx Re: Suche alle Beiträge von....
Die Änderung hat nichts bewirkt? Dann versuch mal folgendes in Zeile 17 zu schreiben:
Code
17
        error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);


Wenn das auch nicht geht, dann probier das:
Code
17
        error_reporting(0);


Und wenn selbst das nicht hilft, schreib in die nächste Zeile das:
Code
18
        @date_default_timezone_set(date_default_timezone_get());
Geposted: 25.01.2013 23:29
Thema: Neueste Beiträge - und andere Sorgen... (Forum: Andere Fragen und Probleme)
Chrissyx Re: Neueste Beiträge - und andere Sorgen...
Aaaaalso, nochmal das ganze als ausführliches Beispiel. Ich fange bei der modules/MyModule.php an und erweitere sie so:
Code
1
<?php
2
class MyModule implements Module
3
{
4
    private $mode;
5
6
    function __construct($mode)
7
    {
8
        $this->mode $mode;
9
    }
10
11
    public function execute()
12
    {
13
        Main::getModule('NavBar')->addElement(Main::getModule('Language')->getString('my_site'), INDEXFILE '?faction=mySite' SID_AMPER);
14
        switch($this->mode)
15
        {
16
            case 'myMode':
17
            Main::getModule('Template')->printPage('MySite2');
18
            break;
19
20
            default:
21
            Main::getModule('Template')->printPage('MySite');
22
            break;
23
        }
24
    }
25
}
26
?>

Erklärung dazu: Der Konstruktor __construct bekommt einen Paramter $mode übergeben, den sich das Modul als private Klassenvariable $this->mode abspeichert. Wird MyModule nun ausgeführt, kommt $this->mode in ein switch - case - default Konstrukt. Nur wenn $this->mode den Wert myMode hat, verzweigt es in den case-Block und zeigt eine MySite2 TPL an. Alle anderen Fälle landen unter default und es wird die bekannte MySite aufgerufen. Letztere habe ich so aufgebaut:
Code
1
<table class="tbl" cellpadding="{$modules.Config->getCfgVal('tpadding')}" cellspacing="{$modules.Config->getCfgVal('tspacing')}" style="width:{$modules.Config->getCfgVal('twidth')}; margin:auto;">
2
 <tr><th class="thnorm">MySite</th></tr>
3
 <tr><td class="td1" style="text-align:center; padding:1.5em;"><span class="norm"><a class="norm" href="{$smarty.const.INDEXFILE}?faction=mySite&amp;mode=myMode{$smarty.const.SID_AMPER}">Gehe zu MySite2 via myMode</a></span></td></tr>
4
</table>

Eine simple Tabelle, welche nur einen Link enthält. Genau hier wird es spannend:
Code
1
<a class="norm" href="{$smarty.const.INDEXFILE}?faction=mySite&amp;mode=myMode{$smarty.const.SID_AMPER}">Gehe zu MySite2 via myMode</a>

Hier verlinke ich das bekannte MyModule über das faction=mySite und übergebe nun zusätzlich besagten Modus mit mode=myMode . myMode ist keine Funktion oder Variable, sondern einfach nur ein Wert, den mode annimmt und damit letztendlich im Konstruktor meiner Klasse MyModule landet. Dort werte ich ihn wie oben erwähnt aus, d.h. wenn ich den Link anklicke, wird nun in MyModule anders verfahren und die MySite2.tpl angezeigt. Diese TPL ist ebenfalls unter templates/std/templates/ abgelegt und hat beliebigen Inhalt.

Wie Du siehst, gibt es keine Logik in den TPLs, die werden standesgemäß so "dumm" wie möglich gehalten. ;)
Geposted: 24.01.2013 20:25
Thema: FAQ - Installationsprobleme (Forum: Installationsprobleme)
Chrissyx Re: FAQ - Installationsprobleme
Ich nehme mal an, Du hast ein altes TBB in Version 1 und möchtest die Daten davon in das TBB2 übernehmen? Dann musst Du dort den Pfad zum alten TBB1 angeben. Absoluter Pfad bedeutet in deinem Fall, er fängt mit /kunden/homepages/etc... an und geht weiter bis zu dem Ordner, wo das TBB1 liegt, also vom höchsten Ordner an immer tiefer. Ein relativer Pfad fängt im Ordner des TBB2 an geht sowohl Ordnerebenen nach oben, also auch wieder tiefer nach unten. Wenn das TBB2 also im Ordner "tbb2_beta1" liegt und auf der gleichen Ebene auch das TBB1 im Ordner "tbb1" liegt, lautet dieser Pfad ../tbb1 - die zwei Punkte anstatt eines Ordnernamens bedeuten immer "gehe eine Verzeichnisebene nach oben". Ich hoffe, dass war jetzt einigermaßen verständlich. :D
Geposted: 24.01.2013 19:39
Thema: FAQ - Installationsprobleme (Forum: Installationsprobleme)
Chrissyx Re: FAQ - Installationsprobleme
Gar nichts. :) Der Fehler, welcher eigentlich keiner ist sondern nur ein Hinweis an den Entwickler, taucht ab PHP 5.3 auf und warnt vor dem Einsatz einer Funktion, die in noch neueren PHP Versionen nicht mehr vorhanden ist.

Auch wenn es hier um das TBB1 geht, hier eine Anleitung zur Behebung:
Öffne die core/Core.class.php und ersetze Zeile 18 durch das:
Code
18
        ini_set('magic_quotes_runtime'0);
Geposted: 24.01.2013 01:27
Thema: grundsätzliche Erweiterungen (Forum: Verbesserungsvorschläge)
Chrissyx Re: grundsätzliche Erweiterungen
Zitat von neu_und_ratlos:
Wie normale Negation funktioniert, weiß ich, aber nicht für diesen Fall. Ich hatte es inzwischen so gelöst :
public function isGuest() { return ($this->loggedIn == false); }

Joa, das geht, alternativ auch gleich so:
Code
1
public function isGuest() { return !$this->loggedIn; }


Zitat von neu_und_ratlos:
Bei mir gab es wirklich keine Fehler, wenn die 0.xbb fehlte. Vielleicht kommen die erst bei bestimmten Aufrufen ?

Das sollte passieren, wenn man nicht eingeloggt ist. Letztendlich ist das aber recht sinnbefreit sich darüber Gedanken zu machen. Ich meine, Du fängst ja auch nicht an, nach und nach jede Datei aus C:\WINDOWS zu löschen nur um zu gucken wie lange Windows noch läuft. ;)

Zitat von neu_und_ratlos:
Immerhin kann ein Gast, wenn er die 1 zugewiesen bekommt, ohne diese Ergänzung problemlos auf das Adminpanel zugreifen. Das wird nicht einfach nur angezeigt, sondern ist voll aktiv.

Das ist richtig, war aber nicht die angesprochene Änderung in der TPL. Davon ab steht auch nirgends, dass man die 0.xbb so bearbeiten muss. ;)

Zitat von neu_und_ratlos:
Ich will es nicht sehen. Meine PHP-Kenntnisse sind bisher minimal, aber ich vermute doch, daß ein Profi in der Lage ist, anhand der Quelltexte Zugriff auf die gesamte Boardstruktur zu erhalten.

Nach der Logik wäre ja jedes Open Source Projekt ein Einfallstor für feindliche Übernahmen.... :rolleyes:

Zitat von neu_und_ratlos:
Was ein normales HTML-Grundgerüst betrifft, weiß ich Bescheid, aber für den von mir erwähnten Zweck reicht die Begrenzung auf die beiden Anweisungen.

Das ändert nichts daran, dass es ungültiges HTML ist, auch wenn ein Browser es irgendwie anzeigt.

Zitat von neu_und_ratlos:
Danke. Ich muß erstmal meine Grundkenntnisse in PHP erweitern. Momentan habe ich mir das "TNTforum" und "navboard" vorgenommen. Das Erstellen deutscher Sprachdateien war relativ einfach und "TNTforum" ist insofern interessant, daß es auch "smarty" benutzt, aber die Text-DB-API zur Daten-Speicherung benutzt.

TNT Forum erscheint mir leicht veraltet. Smarty kommt da auch nur in Version 2 zum Einsatz, d.h. nicht alle gemachten Erkenntnisse lassen sich auf Smarty 3 hier im TBB übertragen.

Zitat von neu_und_ratlos:
Sobald ich mehr PHP kann, werde ich mich wieder dem mir momentan viel zu komplexen TBB zuwenden. Ich bewundere wirklich, wie jemand sowas Kompliziertes entwickeln kann und da überall durchsteigt.

Es ist immer schwieriger, sich in bestehende Systeme einzuarbeiten als etwas eigenes zu schreiben. Erging mir ähnlich mit meinem Einstieg ins TBB2. ;)
Geposted: 22.01.2013 13:01
Thema: grundsätzliche Erweiterungen (Forum: Verbesserungsvorschläge)
Chrissyx Re: grundsätzliche Erweiterungen
Zitat von neu_und_ratlos:
O.K., das mit dem Ghost bekomme ich deshalb nicht angezeigt, weil ich bei meiner Arbeitsversion die Statistiken inkl. "whoisonline" deaktiviert habe und auch später aus Gründen des Datenschutzes weglassen werde. Ausser dem Umstand, daß der User selbst nicht bereits bei Anmeldung das Unterdrücken seiner E-Mail-Anzeige bestimmen kann, sondern erst nach Aufruf seines Profils ( was sicher nicht jeder macht ) betrifft auch vCard eine mögliche Verletzung des Datenschutzes. Weil mir zu kompliziert ist, rauszusuchen, wie sich sowas gleich bei der Anmeldung optional bestimmen läßt, habe ich es erstmal ganz entfernt.

Du kannst auch einfach dein Forum komplett auf lesegeschützt setzen, so dass man ohne Anmeldung gar nicht erst reinkommt.

Zitat von neu_und_ratlos:
Ich meinte nicht "isLoggedIn" sondern "isGuestID()", das ich nicht finde.

Steht in der core/FunctionsBasic.php , Zeile 768.

Zitat von neu_und_ratlos:
Auch meinte ich nicht, daß Gäste eingeloggt wären, sondern den Aufruf der Webseite als solchen. Im Übrigen kann ich "isLoggedIn" für meine Zwecke NICHT anwenden, weil ich die Negation brauche und nicht weiß, wie ich sie herstellen kann. Die eigentlich bei Variablen üblichen Methoden funktionieren nicht.

Negation? Geht mit "!" davor:
Code
1
if(!Main::getModule('Auth')->isLoggedIn())
2
//wenn NICHT eingeloggt, dann...


Zitat von neu_und_ratlos:
Es passiert NICHTS, wenn die 0.xbb fehlt. Jedenfalls habe ich keine Fehler bemerken können.

Ohne 0.xbb hagelt es bei mir Fehler:
Zitat:
Warning: file(./members/0.xbb) [function.file]: failed to open stream: No such file or directory in core\FunctionsBasic.php on line 249

Warning: array_map() [function.array-map]: Argument #2 should be an array in core\FunctionsBasic.php on line 249

Warning: array_map() [function.array-map]: Argument #2 should be an array in core\FunctionsBasic.php on line 249


Zitat von neu_und_ratlos:
Wird allerdings die 10 durch eine 1 ersetzt, hat der Gast ohne eingeloggt zu sein, Zugriff auf die Admin-Funktionen, so daß ich bei mir in der Datei
"PageTail.tpl" ( templates\tbb2\templates\ ) die Zeile 4 von
"{if $modules.Auth->isAdmin()}" sicherheitshalber zu "{if ($modules.Auth->isAdmin()) && ($modules.Auth->isLoggedIn()) }" geändert habe.

Das sollte nicht überraschend sein, es stehen in der 0.xbb nicht ohne Grund irgendwelche Fantasiewerte die nicht mit den offiziellen Werten kollidieren. Deine Ergänzung hat übrigens wenn nur Auswirkung auf die Anzeige des Links. Der echte Zugang wird über die accessAdminPanel() abgewickelt ( core/FunctionsBasic.php , Zeile 59).

Zitat von neu_und_ratlos:
Folgende Verzeichnisse sind ohne Schutz : cache, core, images, languages, modules, templates

Die geschützten Verzeichnisse geben ( jedenfalls mit XAMPP ) allerdings eine Fehlermeldung anstelle eines Hinweises, daß sie geschützt sind.

Lediglich die index.php im Verzeichnis "uploads" ist sauber, obwohl sie keinerlei Text ausgibt.

Da machst Du es dir etwas zu einfach. Erstmal die genannten Ordner ohne Schutz sind unkritisch, dort befinden sich nur Quelldateien deren Aufruf gar nichts bewirkt. Der .htaccess Schutz ist überall dort, wo keiner etwas zu suchen hat. Wer bewusst den Pfad zu so einen Ordner eingibt, braucht auch keine schön aufbereitete Meldung mehr. Der Schutz verhindert sowohl das Auflisten der Dateien als auch das gezielte Runterladen einer bestimmten Datei, wie z.B. 1.pm oder so. Beim uploads-Ordner kommt ein anderer Schutz zum Einsatz, der nur das Auflisten verhindert. Schließlich müssen Inhalte daraus downloadbar sein und werden ggf. direkt im Forum angezeigt. .htaccess würde das nämlich verhindern (und war ein Bug bis V1.5.2). Es wird daher der HTTP Status 403 gesendet, was der Browser entsprechend anzeigen sollte. Da ist keine eigene Meldung mehr notwendig.

Zitat von neu_und_ratlos:
<?php
header('HTTP/1.1 403 Forbidden');
?>

läßt sich aber erweitern :

<?php
header('HTTP/1.1 403 Forbidden');
?>
<html>
Zugriff verboten
</html>

Ich verweise dich mal auf das minimale Grundgerüst einer Webseite:
http://de.selfhtml.org/html/allgemein/grundgeruest.htm

Zitat von neu_und_ratlos:
Wer ausreichend php-Kenntnisse hat, kann anhand der Quelltexte in den ungeschützten Verzeichnissen alles Nötige herausfinden, um quasi das Forum in Besitz zu nehmen.

DAS will ich sehen! Bitte gib mir eine Anleitung zur feindlichen Boardübernahme.

Zitat von neu_und_ratlos:
Die Kommentare in den einzelnen Dateien sind doch keine Dokumentation, wie ich sie meinte. Da muß man sich ja erst jede Datei ansehen. Ich dachte an eine Übersicht, aus der hergeht, welche Datei wofür zuständig ist und welche miteinander verknüpft sind. Ein besonderes Problem dabei stellt "smarty" dar, so daß ich mir wohl erstmal die dortigen Beispiele ansehe.

Wenn Du das mit phpDoc generiert hast, ist alle schön übersichtlich gegliedert und abrufbar. Smarty-Doku unter: http://www.smarty.net/docs/en/

Zitat von neu_und_ratlos:
Momentan ist mir das alles zu kompliziert, weil es nicht meinen Vorstellungen von Datenschutz und Programmiertechniken entspricht. Darum werde ich mir erstmal weitere php-Programme ansehen, die ohne Datenbank auskommen, aber weniger kompliziert aufgebaut sind. Wenn es sein muß, baue ich mir vielleicht sogar was aus dem Simpelsten, das ich kenne, nämlich sinapis.

Viel Erfolg!
Geposted: 16.01.2013 22:03
Thema: Neueste Beiträge - und andere Sorgen... (Forum: Andere Fragen und Probleme)
Chrissyx Re: Neueste Beiträge - und andere Sorgen...
Man merkt es schon daran, dass es kein switch-case in Smarty gibt: TPLs sollten so wenig Logik wie möglich haben und sich am besten nur auf das pure Anzeigen und Präsentieren der Inhalte konzentrieren. Alles andere bereitet der PHP-Teil vor (siehe MVC Konzept).

In deinem Fall also in der MyModule.php die Verzweigungen auswerten und jeweils andere TPLs anzeigen lassen. Ein Modul kann nämlich auch mehrere TPLs haben. Tipp: Ein Modul bekommt automatisch einen $mode im Konstruktor übergeben, sofern dieser angegeben wurde. Beispiel für einen Link:

Code
1
{$smarty.const.INDEXFILE}?faction=mySite&amp;mode=myMode{$smarty.const.SID_AMPER}


Das "myMode" kommt dann als Parameter im Konstruktor an:

Code
1
function __construct($mode)


Den $mode kannst Du dann als private Klassenvariable speichern und mittels switch-case-default auswerten. Ich hoffe das hilft erstmal weiter. :)
Geposted: 16.01.2013 21:28
Thema: grundsätzliche Erweiterungen (Forum: Verbesserungsvorschläge)
Chrissyx Re: grundsätzliche Erweiterungen
Zitat von neu_und_ratlos:
Sorry, aber in welcher Doku steht das mit dem Ghost ?

Die Doku ist in phpDoc geschrieben und steht auf Englisch immer genau über einer Funktion oder Klasse:
Code
221
    /**
222
     Returns user is logged in (if he really is!) as a ghost.
223
     *
224
     * @return bool User hides from WIO
225
     */


Zitat von neu_und_ratlos:
Was Ghost betrifft : Zwar läßt sich z.B. beim phpBB der Anmeldestatus verbergen, aber beim TBB habe ich sowas nicht entdecken können. Das von Dir erwähnte "isLoggedIn()" habe ich leider trotz intensiver Suche noch immer nicht finden können. Insofern wird mir diesbzgl. nichts weiter übrig bleiben, als die von mir erwähnte Erweiterung beizubehalten.

- Die Option ist bei der Anmeldung als Checkbox zu finden: Vor "Wer ist/war online?" verstecken (Als "Geist" einloggen)? .
- Die isLoggedIn() steht genau unter der isGhost() in Zeile 236 .

Zitat von neu_und_ratlos:
Du meinst, man solle nicht zuviel Wert auf die 0.xbb legen. Aber wenn man sich als Gast einloggt, wird sie schließlich automatisch herangezogen.

Ein Gast kann nicht eingeloggt sein.^^ Gäste sind immer ausgeloggt, sonst wären sie ja keine Gäste mehr. Betrachte die 0.xbb einfach als Dummy, weil das Auth-Modul immer auf Basis einer XBB-Datei operiert und auch im Falle von Gästen was zu fressen haben will. ;) Die Werte darin sind vermutlich so gewählt, dass sie nicht mit anderen in Konflikt stehen.

Zitat von neu_und_ratlos:
Falls die 10 keine Bewandnis hätte, würde sie nicht akzeptiert. Sicher wäre interessant, zu prüfen, was passiert, wenn man die 0.xbb löscht. Jedenfalls kann ich den Gaststatus anhand dieser 10 immer auswerten, sobald ich auch einfach nur uneingeloggt auf die Seite zugreife. Also wird auch irgendwo die Datei 0.xbb automatisch abgefragt. Oder andersrum : Welcher Wert würde denn rauskommen, wenn ich mir direkt den Inhalt von userData[4] ( in nicht eingeloggtem Zustand ) ausgeben lasse ? Wird es immer irgendein ein Zufallswert, wenn die 0.xbb fehlt ? Oder hagelt es bei Fehlen dieser Datei massenweise Fehler ? Momentan kann ich meinen XAMPP-Server nicht einsetzen, um das zu testen.

Wenn die 0.xbb fehlt, wird es Fehler hageln. Ich kann dir nachwievor nur empfehlen, mit isLoggedIn() zu arbeiten anstatt mit der 10.

Zitat von neu_und_ratlos:
Das ist mir aber insgesamt alls mangels wirklicher Dokumentation doch noch immer viel zu unübersichtlich.

Zwar läßt sich mitunter ( aber nicht immer ) anhand der Dateinamen erahnen, was sich dahinter verbirgt, aber um z.B. rauszufinden, wo sich die ganzen visuellen Elemente befinden und wo dann wiederum welche Funktionen versteckt sind, fehlt mir der Überblick.

Du kannst ja mal mittels phpDocumentor die technische Doku generieren lassen.

Zitat von neu_und_ratlos:
Um TBB im gegenwärtigen Zustand praktisch einzusetzen, ist mir außerdem standardmässig nicht genug Datenschutz enthalten. Jeder sollte selbst entscheiden können, welche Angaben er über sich selbst preisgeben will. Folglich ist es nicht mal damit getan - wie ich es eigentlich vorhatte - alle kritischen Elemente zu entfernen, denn dann würden sich solche Leute aufregen, die allen alles mitteilen wollen. Außerdem möchte ich als Admin dennoch immer einen Überblick bekommen können, falls es mal nötig sein sollte. Insofern ist die Zersplittung der Daten in viele Elemente wenig hilfreich. Unter Delphi würde ich einfach ein Formular nehmen und je nach Anwendungszweck und Rechtevergaben einzelne Bereiche sichtbar machen oder sperren.

Wenn ein Nutzer keine Angaben machen möchte, kann er die Felder einfach frei lassen? :confused: Pflicht ist eigentlich nur die E-Mail-Adresse, aber auch davon kann man die Anzeige abschalten.
Geposted: 12.01.2013 20:21
Thema: Profil erweitern (Forum: Andere Fragen und Probleme)
Chrissyx Re: Profil erweitern
Bei einem assoziativen Array sind die Positionen der Felder erstmal egal, das stimmt so weit. Aber es muss ja festgelegt sein, in welcher Reihenfolge diese Werte nachher in der Datei landen. Kann ja nicht sein, dass die eine Funktion den Nick in Zeile 3 und eine andere Methode den an Stelle 7 packt. ;) Zumindest hier im TBB ist das so der Fall. Man könnte ein assoziatives Array auch per serialize() in eine Datei packen und später per unserialize() genau so wiederherstellen. Das dürfte deinen Records noch am ehesten entsprechen, ist hier aber keine Option. Zumindest nicht bei den vorgegebenen Datenstrukturen des TBBs.
Geposted: 11.01.2013 20:55
Thema: grundsätzliche Erweiterungen (Forum: Verbesserungsvorschläge)
Chrissyx Re: grundsätzliche Erweiterungen
Ich würde nicht allzu viel in die 0.xbb geben. Dort steht auch "Gast" als E-Mail-Adresse drin oder zwei angeblich vorhandene Beiträge. ;) Daher ist auch die "10" kein Status, den das Forum offiziell kennen würde.

Was es mit isGhost() auf sich hat, steht eigentlich in der Doku oben drüber: Eingeloggter Nutzer, der sich vor der WIO versteckt und dort nicht angezeigt wird.

isGuestID() kommt bei Auswertung von Beiträgen zum Tragen, ich hab sie nur der Vollständigkeit halber erwähnt. Wegen isLoggedIn() :
  • false: Gast
  • true: Mitglied ( Status "3" ) oder höher ( "2", "6" oder "1" ) bzw. tiefer ("4" oder "5", wobei die "5" ein Überbleibsel aus alten Jahren ist)
Geposted: 11.01.2013 20:47
Thema: Profil erweitern (Forum: Andere Fragen und Probleme)
Chrissyx Re: Profil erweitern
Zitat von neu_und_ratlos:
Wenn man die Felder über Namen anspricht, wäre im Grunde doch auch egal, ob man sie nicht doch in das offizielle Userprofil einbaut. Man kann es doch so sehr vergrößern, daß die Hacks dann relativ weit hinten liegen.

Auch die benannten Felder im Array haben eine feste Position X in der .xbb-Datei. Das spielt also keine Rolle, wohl aber wenn die XBBs mehr Zeilen bekommen, auch wenn da nach erstmal nur Leerzeilen folgen. Schau z.B. mal in Zeilen 55, 548 und 559 der modules/Forum.php , dann kannst Du dir denken was da und weiss der Chrissyx noch sonst wo auf dich zu kommt. ;)

Zitat von neu_und_ratlos:
Dazu eine Frage : Kann ich Testuser, von denen noch keinerlei Texte geschrieben wurden, einfach wieder entfernen, indem ich die nummerierten Dateien lösche und die Datei mit dem Zählerstand zurücksetze ? Oder wird das noch irgendwo anders abgelegt ?

Anpassen der vars/last_user_id.var und entfernen der XBB, PM und ggf. ACH sowie CBB Dateien sollte reichen.

Zitat von neu_und_ratlos:
So, ich habe es probiert und doch nicht selbst hinbekommen, mir also Deine genaue Beschreibung angesehen und integriert. Allerdings habe ich mich dabei gefragt, ob diese neue Struktur nicht auch bei der ursprünglichen Array-Lösung eingesetzt werden kann, damit eigentlich identische Anwendungsbereiche auch mit den gleichen Mitteln und Methoden gehandhabt werden können.

Können schon, nur ist es wesentlich einfacher die Datei als nummeriertes Array via file() einzulesen ohne sich noch um extra benannte Key kümmern zu müssen. Vorteil speziell beim Anlegen von Usern via Administration ist, dass es dort noch keine XBB-Datei gibt und die Namen direkt aus dem Template stammen.

Zitat von neu_und_ratlos:
Ich finde es jedenfalls ganz toll, wie Du hier die Leute unterstützt. Und überhaupt kann man die ganze Entwicklungs-Arbeit gar nicht genug loben. Das ist wenigstens ein offenes Projekt, bei dem sich die Einarbeitung lohnt.

Vielen, vielen Dank für die großartige Leistung !

Danke sehr. =)
Geposted: 07.01.2013 02:19
Thema: grundsätzliche Erweiterungen (Forum: Verbesserungsvorschläge)
Chrissyx Re: grundsätzliche Erweiterungen
Deine isGuest() ergibt keinen Sinn, es gibt offiziell nur Status von 1 bis 6. Den Zustand 10 kennt ein unmodifiziertes TBB jedenfalls nicht. ;) Stattdessen wird mit isLoggedIn() geprüft, ob es ein Gast oder ein angemeldetes Mitglied ist.

Davon ab, bringen die Functions einen Gästecheck mit: isGuestID() . Warum dort und nicht in der Auth? Im Extremfall sind selbst Nicks für Gäste optional. Daher werden Gäste anhand der jeweiligen ID aus geschriebenen Beiträgen identifiziert, während das Auth-Modul mit .xbb-Dateien arbeitet.

Eine isMember() gibt es deswegen nicht, weil wie zuvor erwähnt isLoggedIn() zum Einsatz kommt. Ist ein Benutzer eingeloggt, muss er zwangsweise schon mal ein Member sein. Daher gibt es nur Funktionen für einen evtl. höheren Status zur Abfrage. ;)

Falls Du mit eigenen Bereichen Foren meinst, so ist das mit Spezialrechten dieser möglich. Die werden aber nicht in den XBB-Dateien hinterlegt, sondern in den jeweiligen Forumdateien. User-ID und Nick bekommst Du ja so schon über Auth: getUserID() und getUserNick() .
Geposted: 07.01.2013 01:55
Thema: Profil erweitern (Forum: Andere Fragen und Probleme)
Chrissyx Re: Profil erweitern
Zitat von neu_und_ratlos:
So ist mir beispielsweise völlig unklar, wieso der Firefox dieses Durchschnittszeichen nicht richtig anzeigt. Der Pfeil hingegen wird korrekt dargestellt.

Das finde ich auch seltsam. Bei mir wird's mit Fx 17.0.1 angezeigt.

Zitat von neu_und_ratlos:
Bitte vernachlässige bei der Weiterentwicklung der TBB2-Version nicht die alte Version ohne Datenbank. Ist es nicht vielleicht sogar machbar, die Nutzung mit oder ohne Datenbank optional durch den User bestimmen zu lassen, indem dann unterschiedliche Module eingebunden werden ?

Würde ich das 1.6 vernachlässigen, gäbe es vor ein paar Tagen kein neues Update und meinen Support hier. ;) Das TBB2 hingegen wird umungänglich eine DB voraussetzen, aber gleichzeitig habe ich keine große Hoffnung, dass in absehbarer Zeit eine finale Version davon erscheinen wird. Auch deshalb werde ich die 1er Linie weiter betreuen.

Zitat von neu_und_ratlos:
Edit : Mittlerweile bin ich dabei, die neuen Erkenntnisse dahingehend einzuarbeiten, die gesamten Userdaten zu vereinheitlichen. Dazu sollen die Ergänzungen auch bei Neuregistrierungen und wenn der Admin eine User anlegt, sichtbar werden. Ausserdem möchte ich, daß gleich bei der Registrierung bzw. beim Anlegen eines Users durch den Admin gleich weitere Felder editiert werden können, die sonst der User nur selbst nachträglich beim Ändern seines Profils beeinflussen kann. Letztlich möchte ich dann auch die Zusatzdaten aus dem Hack in die reguläre User-xbb-Datei übernehmen.

Uh, also ich kann nur davon abraten, die erweiterten Profildaten mit in die .xbb zu setzen. Sollte es z.B. im Rahmen eines TBB 1.7 oder so von Haus aus neue Felder geben, würdest Du spätestens dann arge Probleme bekommen. Deswegen habe ich den Hack auch so gestaltet, dass er die neuen Sachen in eine separate Datei verwaltet und die dort auch nach Belieben ergänzt oder eben auch verkürzt werden können.
Bei der Registrierung die neuen Felder gleich mit anzubieten wäre ziemlich aufwendig. Das hängt nämlich von der Art der Registrierung ab, gerade dann wenn das Konto erst per Mail aktiviert werden soll. Bis es soweit ist, wird nämlich die .xbb Datei noch nicht bzw. erst temporär angelegt. Das gleiche wäre dann mit der .cbb Datei zu machen und das könnte etwas tricky werden. :rolleyes: Falls Mitglieder direkt so angelegt werden, wäre das fast schon ähnlich zu machen wie beim Profil bearbeiten auch.
Die Felder beim Nutzeranlegen per Admin einzupflegen dürfte noch der einfachste Teil deines Vorhabens sein. Ich würde dir empfehlen, damit mal anzufangen.

Zitat von neu_und_ratlos:
Doch zunächst zu den Hacks in der jetzigen Form. In der Register.tpl können sie nach Zeile 38 eingefügt werden, wobei aus optischen Gründen beim style vor "padding" immer noch "font-weight:bold;" einzufügen ist.

Aber wo muß ich jetzt was einfügen, damit die Zusatzdaten auch gespeichert werden ?

Siehe oben, das hängt stark vom verwendeten Registrierungsmodus ab. Betroffen ist hier jedenfalls das Modul Register.php .

Zitat von neu_und_ratlos:
Außerdem ist es nervend, daß fast alle Eingaben wieder verschwinden, wenn man vergißt, die Bedingungen zu bestätigen. Was läßt sich machen, damit die Eingaben beibehalten werden ?

Die gemachten Angaben müssen nach dem Absenden dem Template wieder mitgeteilt werden. In der modules/Register.php passiert das ab Zeile 236; dort müsstest Du analog zur modules/Profile.php so etwas ergänzen:
Code
237
            'newUserHack' => $newUserHack,

In $newUserHack wären die neuen Profilfelder enthalten, die dann (wieder) in der TPL zur Verfügung stehen (z.B. {$newUserHack.location} ).

Zitat von neu_und_ratlos:
In "AdminUserNewUser.tpl" befindet sich die Stelle zum Einfügen hinter Zeile 26.
Weil da etwas mehr anzupassen ist, folgt gleich der Quellcode, allerdings auf die Felder "Wohnort" und "Geburtstag" reduziert, weil ich die anderen nicht benutze.
Code
1
{* Inofficial fields hack *}
2
    <tr>
3
     <td class="cellStd"><span class="fontNorm">Wohnort:</span></td>
4
     <td class="cellAlt"><input class="formText" type="text" name="location" value="{$userDataHack[0]}" style="width:250px;" /></td>
5
    </tr>
6
    <tr>
7
     <td class="cellStd"><span class="fontNorm">Geburtstag:</span></td>
8
     <td class="cellAlt">{html_select_date|utf8_encode prefix='' time=$userDataHack[1] end_year=1900 field_order='DMY' reverse_years=true}</td>
9
    </tr>
10
{* /Inofficial fields hack *}

Ich würde es etwas konsistener halten:
Code
27
{* Inofficial fields hack *}
28
 <tr>
29
  <td class="cellStd"><span class="fontNorm">Wohnort:</span></td>
30
  <td class="cellAlt"><input class="formText" type="text" name="newHack[location]" value="{$newUserHack['location']}" style="width:150px;" /></td>
31
 </tr>
32
 <tr>
33
  <td class="cellStd"><span class="fontNorm">Geburtsdatum:</span></td>
34
  <td class="cellAlt">{html_select_date|utf8_encode prefix='newHack' time=$newUserHack['birthday'] end_year=1900 field_order='DMY' reverse_years=true}</td>
35
 </tr>
36
{* /Inofficial fields hack *}


Zitat von neu_und_ratlos:
Auch hierzu die Frage, was zu tun ist, damit die dort eingegeben Daten gespeichert werden. Ach ja, und dabei fiel mir auf, daß die Bezeichnungen in Deutsch vorhanden sind. Das müßte man dann ja auch noch in Variablen packen, um die Sache auch in andere Sprachen übersetzen zu können.

Man muss die modules/AdminUser.php ähnlich anpassen wie die Profile.php . Möchtest Du es selbst probieren? Ansonsten findest Du die Anleitung im versteckten Text.
Verborgener Text:
Ich fang mal wieder rückwärs an:
Schreibe nach Zeile 157:
Code
158
                'newUserHack' => $newUserHack,


Ersetze Zeile 153 bis 156 durch das:
Code
153
            {
154
                $newUser = array('nick' => '',
155
                    'email' => '',
156
                    'group' => '',
157
                    'send_reg' => true);
158
                #Inofficial fields hack
159
                $newUserHack = array('location' => '',
160
                    'birthday' => 0);
161
            }

Füge nach Zeile 140 ein:
Code
141
                    #Inofficial fields hack 
142
                    Functions::file_put_contents('members/' $newUserID '.cbb'implode("\n"$newUserHackFile));


Nach Zeile 137:
Code
138
                    #Inofficial fields hack
139
                    $newUserHackFile = array($newUserHack['location'],
140
                        $newUserHack['birthday']);


Nach Zeile 97:
Code
98
                #Inofficial fields hack
99
                $newUserHack['location'] = htmlspecialchars(trim($newUserHack['location']));
100
                $newUserHack['birthday'] = gmmktime(000intval(Functions::getValueFromGlobals('newHackMonth')), intval(Functions::getValueFromGlobals('newHackDay')), intval(Functions::getValueFromGlobals('newHackYear')));


Nach Zeile 73:
Code
74
            #Inofficial fields hack
75
            $newUserHack Functions::getValueFromGlobals('newHack');


Ich hab's nicht gestestet, aber das sollte passen.


Um die Bezeichnungen zu lokalisieren, musst Du die Sprachdateien erweitern und von dort die Texte holen. Beispiel für Wohnort:
Öffne die languages/de-DE/Main.ini und füge nach Zeile 107 ein:
Code
108
location_colon = "Wohnort:"


Öffne deine bereits modifizierte templates/tbb2/templates/AdminUserNewUser.tpl und ersetze "Wohnort:" mit:
Code
29
{$modules.Language->getString('location_colon')}


Nach dem gleichen Prinzip für "Geburtstag:" vorgehen. Sofern die Übersetzung in der INI-Datei vorhanden ist, kannst Du sie auch in den EditProfile.tpl und ViewProfile.tpl verwenden. Denk dran, dass Du für jede eingesetzte Sprache eine Übersetzung vorhanden sein muss.
Geposted: 04.01.2013 16:59
Thema: Profil erweitern (Forum: Andere Fragen und Probleme)
Chrissyx Re: Profil erweitern
⌀ kann man zwar durch die Buchstaben Ø oder ø aus den nordischen Sprachen ersetzen, wäre semantisch aber falsch. Vielleicht ein anderes Beispiel: Um Pfeile zu symbolisieren nimmt man gerne "->" (also Minus und schließende spitze Klammer), aber wirklich korrekt wäre nur der Pfeil selbst: →
Man glaubt gar nicht, dass es dank Unicode für quasi jedes mögliche Zeichen inwischen auch eine Entsprechung gibt. ;)

Das mit dem ä und UTF-8 hatte ich sogar eingebaut bei der Anzeige des Datums, aber wohl bei der Auswahl übersehen. Wie Du siehst, steht dort ebenfalls ein "|utf8_encode" hinten an. So neu und ratlos bist Du wohl doch nicht, was? ;) :D

Die Darstellung von Code hier im Forum wird hoffentlich mit der Beta 2 des TBB2 besser. Ich treibe derzeit die Veröffentlichung davon voran. :)
Geposted: 03.01.2013 01:33
Thema: Neueste Beiträge - und andere Sorgen... (Forum: Andere Fragen und Probleme)
Chrissyx Re: Neueste Beiträge - und andere Sorgen...
Hm, ja, da hab ich etwas zu vorschnell gedacht. :rolleyes: Die Übersetzung muss mit in die Main.ini nach Zeile 19 notiert werden (analog zur TPL wieder unter Newsletterarchiv). Man kann sie alternativ auch in der MyModule.ini belassen und die Zeile in der PageHeader.tpl wie folgt anpassen:
Code
1
     <a href="{$smarty.const.INDEXFILE}?faction=mySite{$smarty.const.SID_AMPER}">{$modules.Language->getString('my_site', 'MyModule')}</a> |


Durch den zweiten Parameter wird explizit eine Sprachdatei angegeben, die nicht automatisch geladen wurde, in der die Übersetzung zu finden ist. Hat aber den Nachteil, dass immer eine Sprachdatei mehr geladen werden muss und wäre weniger performanter.
Geposted: 02.01.2013 03:10
Thema: Profil erweitern (Forum: Andere Fragen und Probleme)
Chrissyx Re: Profil erweitern
Zitat von neu_und_ratlos:
1.) Das ist eher ein allgemeines Problem und hat mit dem Kopieren zu tun. Als ich die entsprechenden Stellen in den Editor ( Notepad++ ) eingefügt habe, waren überall mehrere Leerzeilen zwischen den einzelnen Anweisungen. Gibt es eine Möglichkeit, Beispiele auf andere Weise rauzukopieren ?

Am besten zitierst Du meinen Beitrag und kopierst dann den Code aus der Textbox raus. ;)

Zitat von neu_und_ratlos:
2.) Nachdem ich den Hack eingebaut und getestet habe, wollte ich die Felder "Facebook" und "Last.fm" ( wobei ich nicht mal weiß, was das sein soll ) wieder entfernen. Zwar habe ich die Array-Nummer für der Geburtstag angepaßt, aber dann funktionierte trotzdem irgendwas nicht.

Naja, irgendwo eine Indexnummer ändern reicht nicht.^^ Z.B. muss die getUserDataHack-Funktion auch die passende Struktur zurückgeben:
Code
708
            return array(''0);

Und sämtliche userDataHack[3] durch userDataHack[1] ersetzen (PHP und TPLs) sowie die unerwünschten userDataHack[1] und userDataHack[2] löschen.

Zitat von neu_und_ratlos:
3.) Bei der Monatsauswahl des Geburtstag wird das "ä" von März nicht korrekt angezeigt. Ein ungültiges Zeichen ( keine Ahnung, was da stehen soll ) steht übrigens auch vor der Zahl der Beiträge pro Tag im für alle einsehbaren Profil.

- Das "ä" muss noch nach UTF-8 konvertiert werden
- Das "⌀" für Durchschnitt ist korrekt und scheitert in der Darstellung eher am Browser. Im Firefox geht's! ;) Kannst auch gerne in der Wikipedia mal testen.

Zitat von neu_und_ratlos:
5.) Das betrifft nicht den Hack, aber den Zugriff auf Profile. Ich benutze den Hack, daß nur eingeloggte Mitglieder die Mitgliederdaten sehen können. Wer nun aber uneingeloggt auf den Namen eines Users klickt, hat dennoch Zugriff auf dessen Profil.

Wenn nur eingeloggte Mitglieder die Profile sehen dürfen, dann setz einfach ein
Code
73
        if(!Main::getModule('Auth')->isLoggedIn())
74
            Main::getModule('Template')->printMessage('login_only'INDEXFILE '?faction=register' SID_AMPERINDEXFILE '?faction=login' SID_AMPER);

in die modules/Profile.php nach Zeile 72 (vom TBB 1.6.2 ausgehend).
Geposted: 02.01.2013 02:43
Thema: TBB 1.6.2 veröffentlicht (Forum: Neuigkeiten)
Chrissyx TBB 1.6.2 veröffentlicht
Pünktlich zum Jahresende wurde das TBB auf Version 1.6.2 aktualisiert. Das Update behebt einige potenzielle Fehlerquellen und Ungereimtheiten, die sich seit der letzen Veröffentlichung im Verlauf des Jahres herauskristallisiert hatten. Markanteste Änderung ist dabei das Ausblenden von leeren Kategorien, d.h. wenn diese keine Foren zur Anzeige haben.

Die üblichen Downloads sind wie immer an gewohnter Stelle zu finden.
Geposted: 27.12.2012 22:41
Thema: Neueste Beiträge - und andere Sorgen... (Forum: Andere Fragen und Probleme)
Chrissyx Re: Neueste Beiträge - und andere Sorgen...
Hier dann mal ein ausführliches Beispiel, um eine eigene Seite direkt im TBB 1.6.1 zu integrieren:
1) Öffne die templates/std/templates/PageHeader.tpl und füge z.B. jeweils nach dem Menüpunkt "Newsletterarchiv" in Zeile 85 und 96 ein:
Code
1
     <a href="{$smarty.const.INDEXFILE}?faction=mySite{$smarty.const.SID_AMPER}">{$modules.Language->getString('my_site')}</a> |

Das mySite ist der Name der Aktion und sollte analog zum Modul gewählt werden. Das my_site ist wichtig für die Übersetzung, aber die Lokalisierung ist optional, d.h. Du kannst auch direkt den Text reinschreiben:
Code
1
     <a href="{$smarty.const.INDEXFILE}?faction=mySite{$smarty.const.SID_AMPER}">Meine Seite</a> |


2) Jetzt sollte bereits im Menü der neue Punkt auftauchen. Als nächstes sorgen wir dafür, dass er auch etwas bewirkt. Lege im Ordner modules/ eine neue Datei namens MyModule.php an. Schreibe das rein:
Code
1
<?php
2
class MyModule implements Module
3
{
4
    public function execute()
5
    {
6
        Main::getModule('Template')->printPage('MySite');
7
    }
8
}
9
?>


3) Lege im Ordner languages/de-DE/ eine MyModule.ini an. Diese darf leer sein, wenn Du keine Lokalisierung verwenden möchtest. Ansonsten notieren wir hier die obige Übersetzung für my_site :
Code
1
my_site = "Meine Seite"

Dies muss für jede weitere Sprache, die Du im Einsatz hast, getan werden. Wichtig: Der Name der Sprachdatei muss dem des Moduls entsprechen!

4) Lege im Ordner templates/std/templates/ eine leere MySite.tpl an.

5) Öffne die core/Main.php und füge nach Zeile 85 das ein:
Code
86
        'mySite' => 'MyModule',

Das mySite entspricht dem Aktionsnamen aus Schritt 1 und das MyModule ist der Name des Moduls aus Schritt 2.

6) Jetzt sollte bereits der Link funktionieren und eine leere Seite angezeigt werden. Die Klasse "MyModule" macht nämlich nichts weiter, als die leere "MySite.tpl" aus Schritt 4 anzuzeigen. Seitenkopf und -fuss werden bereits automatisch geladen. ;)
Ab hier steht es dir quasi frei, was Du nun anzeigen möchtest. Ein paar Möglichkeiten stelle ich in den nächsten Schritten vor.

7) Öffne die modules/MyModule.php und füge nach Zeile 5 ein:
Code
6
        Main::getModule('NavBar')->addElement(Main::getModule('Language')->getString('my_site'), INDEXFILE '?faction=mySite' SID_AMPER);

Damit wird die Navigationsleiste aktuell gehalten. Ohne Lokalisierung sieht das ganz so aus:
Code
6
        Main::getModule('NavBar')->addElement('Meine Seite'INDEXFILE '?faction=mySite' SID_AMPER);

Das faction=mySite entspreicht haargenau dem Menülink aus Schritt 1.

8) Soll die Seite nur für eingeloggte Nutzer zugänglich sein, füge nach Zeile 6 das ein:
Code
7
        if(!Main::getModule('Auth')->isLoggedIn())
8
            Main::getModule('Template')->printMessage('login_only'INDEXFILE '?faction=register' SID_AMPERINDEXFILE '?faction=login' SID_AMPER);


Soweit erstmal. Im Falle eines Forenupdates musst Du nur Schritt 1 und 5 wiederholen. Falls Du noch Fragen hast, nur zu! :)
Geposted: 24.12.2012 18:27
Thema: Neueste Beiträge - und andere Sorgen... (Forum: Andere Fragen und Probleme)
Chrissyx Re: Neueste Beiträge - und andere Sorgen...
  • Gibt es Fehlermeldungen beim Posten? Wird unter "Heutige Beiträge" etwas angezeigt? Taucht im Log etwas auf? Hast Du sonst mal einen Link zu deinem Forum?
  • Kategorien werden immer angezeigt und selbst dann, wenn alle Foren dazu versteckt sind. Das könnte ich vielleicht noch einbauen, dass die dann automatisch verschwinden. Für Kategorien gibt es aber kein Rechtesystem wie bei den Foren.
  • Um eigene Links in die Menüleiste einzufügen, musst Du die PageHeader.tpl bearbeiten. Dort findest Du recht übersichtlich das jeweils angezeigte Menü im ein- und ausgeloggten Zustand. Wenn Du diese Vorstellungsseite bereits hast und einfach nur darauf verlinken möchtest, ist das damit getan.
  • Um dann ganz neue Seiten direkt in das Forum zu integrieren, solltest Du ein eigenes Modul im Ordner modules/ anlegen mit dazugehöriger Sprachdatei unter languages/de-DE/ und das ganze der core/Main.php beibringen. Dein Modul muss dann das Interface Module implementieren und daher die Methode execute() haben. Dort kannst Du dann deine eigenen Templatedateien laden und mit Daten versorgen. Am besten schaust Du dir mal ein einfacheres Modul wie Help.php an. Ansonsten geb ich dir nochmal ein ausführliches Beispiel. :)
Dir auch schöne Feiertage!
Geposted: 23.12.2012 14:58
Darstellungsoptionen: Ergebnisse ; Sortieren nach ; Ergebnisse pro Seite    
Tritanium Bulletin Board 2
© Tritanium Scripts