|
| IP: |
n/a |
| Rang: |
|
| Registrierung: |
01.07.2003, 18:55 |
| Homepage: |
http://www.script-solution.de |
| Wohnort: |
Marburg |
| |
 Forum-Gott mit 7594 Punkte, 7360 Beiträge |
|
Hallo,
langer hat folgendes geschrieben: 1. Links im Forum Im Forum werden die Links ja so zusammengebaut z.b index.php?action=posts&fid=25&tid=522&site=39 Wo wird das festgelegt? Kann ich ohne Problem noch eine zusätzliche Struktur hinzufügen z.b index.php?action=downloads&cat=25&fil=28&site=39 Für den Zusammenbau der URLs ist die Klasse BS_URL (src/url.php) zuständig. Die bietet diverse statische Methoden um die am häufigsten benötigten Parameter anzuhängen. Den Rest muss man manuell setzen. In deinem Fall wäre folgendes wohl am sinnvollsten:
PHP: 1 2 3 4
| $url = BS_URL::get_mod_url('downloads'); $url->set(BS_URL_CAT,25); $url->set(BS_URL_FIL,28); // hoffentlich angelegt und in BS_URL::is_intern() zu den "bekannten" hinzugefügt? :) $url->set(BS_URL_PAGE,39); |
langer hat folgendes geschrieben: Und wie sieht es dann mit den SEF Urls aus? Wäre es dann auch möglich diese umzuwandeln? SEF-URLs sind nur für die Seiten vorgesehen, für die das Sinn macht, d.h. Portal, Foren, Themen und Beiträge. Wobei es natürlich möglich ist andere auch zuzulassen. Generell funktioniert das so, dass man nur bei der BS_URL-Instanz mit set_sef() angeben muss ob es eine ist oder nicht. Wenn es eine ist, wird die URL anders generiert. Dafür ist die Methode to_url() in der src/url.php zuständig. Für jede der genannten Seiten wird dort die entsprechende URL generiert. Dort könntest du das also für deine Seite hinzufügen.
langer hat folgendes geschrieben: 2. Positionsanzeige Wie funktioniert die Positionsleiste im Board also die Anzeige der aktuellen Position? Wie die Positionsanzeige aussieht sagt man dem Renderer in der init-Methode des Moduls. Hier ein Beispiel aus der Mitgliederliste:
PHP: 1 2
| $renderer = $doc->use_default_renderer(); $renderer->add_breadcrumb($locale->lang('memberlist'),BS_URL::build_mod_url('memberlist')); | Um alles Weitere kümmert sich der Renderer.
langer hat folgendes geschrieben: Wo kann ich dann auch die nötige Änderung (1.) machen? Ich versteh die Frage nicht so richtig, aber du müsstest nur der Methode add_breadcrumb() die URL-Instanz geben. D.h. nicht die URL als String, sondern die Instanz von BS_URL (alle Methoden namens "get_*" geben die Instanz zurück, alle Methoden namens "build_*" geben die URL als String zurück).
langer hat folgendes geschrieben: 3. Was mach ich falsch?Ich versuche von einer Kategorie alle ids der Unterkategorien und deren Unterunterkategorien… auszulesen und dann die Anzahl der Dateien in diesen Kategorien darzustellen. Die Ids bekomme ich alle zusammen aber dann bei dem versuch die Anzahl der Dateien zu zählen bekomme ich ein Fehler. Der Fehler bezieht sich darauf wie ich die ids in mysql abfrage übergebe. Kann ich das ganze noch anders machen? (Den Code muss ich natürlich nochmal überarbeiten) Hier hol ich mir die ids und trenne alle durch ein Komma. Dann hänge ich noch die Hauptkategorie an: PHP: 1 2 3 4 5 6 7 8 9 10 11 12 13 14
| private function _get_ucatid($parent,$catid) { if (!isset($ucatid)) $ucatid = ''; $qry = mysql_query ("SELECT id FROM bs_downloadscat WHERE parent_id='$parent' ORDER BY sortierung"); while ($verwandter=mysql_fetch_assoc($qry)) { $ucatid .= $verwandter['id'].','; $ucatid .= $this->_get_ucatid($verwandter['id'],''); } return $this->_get_downloads($ucatid.$catid); } | Ergebnis: 56,41,40,63,31,39,42,28 Das übergebe ich in die nächste funktion PHP: 1 2 3 4 5 6 7 8 9 10
| private function _get_downloads($ucatid) { $db = FWS_Props::get()->db(); $ids = $ucatid; //$ids = '31,40,63,41,39,42,56,28';// so bekomme ich die richtige Anzahl $downloads = $db->get_row_count(BS_TB_DOWNLOADS,'id','WHERE cat_id IN ('.$ids.')'); return $downloads; } | Wie gesagt hier bekomme ich ein Fehler. Wenn ich die ids die oben im Code stehen nehme (//) bekomme ich die richtige Ausgabe. Mal abgesehen davon, dass du lieber die DB-Klasse von BS und eine Konstante für den Tabellennamen benutzen solltest, fällt mir folgendes auf:
- Du brauchst am Anfang nicht zu prüfen ob $ucatid existiert. Das tut es nie, also einfach mit ''
initialisieren 
- Der Grund für den Fehler ist wohl, dass am Ende bei rekursiven Aufrufen (dort ist $catid leer) ein
Komma steht. D.h. du bekommst nicht "12,13,14" sondern "12,13,14,". Das mag SQL natürlich nich 
- Dann ist es keine gute Idee am Ende von _get_ucatid() überhaupt die Funktion _get_downloads()
aufzurufen, weil _get_ucatid() ja rekursiv ist. D.h. du würdest das ja in jedem rekursiven Aufruf machen und nicht bloß einmal am Ende. Du müsstest also erst nur die IDs sammeln und nach dem "kompletten" Aufruf die andere:
PHP: 1 2
| $ids = _get_ucatids(...); $downloads = _get_downloads($ids); |
- Vor allem müsste _get_ucatid() natürlich am Ende die ids zurückgeben (siehe rek. Aufruf) und nicht
die Anzahl der Downloads...
langer hat folgendes geschrieben: Sorry schon mal das gleich ein paar Fragen stelle, hoffe ist nciht zu viel verlangt... Danke Nein, schon ok 
mfg Nils
Dieser Beitrag wurde insgesamt 2 mal editiert. Das letzte mal 24.03.2010, 09:54 von Nils.
|
|