.html an Alias anhängen

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • NoName26
    Contao-Fan
    • 13.08.2010
    • 304

    #16
    Hallo Tim,

    zu den Leerzeichen siehe meinen Post #9 weiter oben. Habe die Änderung nun wieder rückgängig gemacht, sodass Leerzeichen gegen Bindestriche ersetzt werden.

    Der Doppelslash war ein Tippfehler, der sich eben eingeschlichen hat, als ich die URLs umschreiben musste, um den Catalog ohne FolderURL zu testen.

    Frage zu deinem Code: Für welche Datei ist er bestimmt? Hätte an die catalog_*.tpl (* in meinem Fall "simple")
    gedacht, allerdings sieht die bei mit so aus:
    Code:
    <?php if (count($this->entries)): ?>
    <?php foreach ($this->entries as $entry): ?>
    <?php if (!in_array($field, array('catalog_name','parentJumpTo'))): ?>
    <p class="name"><?php echo $entry[data]['company']['value']; ?></p>
    <p class="address"><?php echo $entry[data]['zip']['value']; ?> <?php echo $entry[data]['city']['value']; ?>, <?php echo $entry[data]['country']['value']; ?></p>
    <?php endif; ?>
    <?php if ($entry['showLink'] && $entry['link']):  ?>
    <div class="link"><?php echo $entry['link']; ?></div>
    <?php endif; ?>
    <?php if ($entry['linkEdit']): ?>
    <div class="linkEdit"><?php echo $entry['linkEdit']; ?></div>
    <?php endif; ?>
    <?php endforeach; ?>
    <?php else: ?>
    <?php if ($this->condition): ?>
    <div class="condition"><?php echo $this->condition; ?></div>
    <?php else: ?>
    <p class="info"><?php echo specialchars($GLOBALS['TL_LANG']['MSC']['noEntries']); ?></p>
    <?php endif; ?>
    <?php endif; ?>
    Viele Grüße, TN

    Kommentar

    • Tim G
      Contao-Urgestein
      • 13.02.2010
      • 2212

      #17
      ja, hab auch einfach die _simple benutzt.

      Dein template ist ja bereits etwas individualisiert.

      Schau dir noch mal das normale _simple an, dann siehst du, dass ich nur die foreach - Schleife (die du auch hast) für die Ausgabe der einzelnen Felder geändert habe.

      --

      du holst ja nur noch zwei Felder in die Ausgabe: (wäre auch ohne template-Anpassung über die Katalog-Liste Einstellungen möglich )
      <p class="name"><?php echo $entry[data]['company']['value']; ?></p>
      <p class="address"><?php echo $entry[data]['zip']['value']; ?> <?php echo $entry[data]['city']['value']; ?>, <?php echo $entry[data]['country']['value']; ?></p>

      Dann halt dort den Wert im ['value'] entsprechend meines templates ändern lassen.
      Zuletzt geändert von Tim G; 06.08.2011, 14:48.
      http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

      Kommentar

      • NoName26
        Contao-Fan
        • 13.08.2010
        • 304

        #18
        Hallo Tim,

        Schau dir noch mal das normale _simple an
        Ach ja richtig, ich habe das Original ja völlig verändert

        wäre auch ohne template-Anpassung über die Katalog-Liste Einstellungen möglich
        Leider aber nicht die Aneinanderreihung mit Komma...

        Dein Code ändert aber ja nur die URL im Listenmodul. Das hilft mir ja nicht viel weiter, weil in der DB das Alias ohne .html steht. Und stünde es dort mit .html, wäre die Änderung mit deinem Code wiederrum nicht mehr nötig, oder habe ich da einen Denkfehler?
        Viele Grüße, TN

        Kommentar

        • Tim G
          Contao-Urgestein
          • 13.02.2010
          • 2212

          #19
          Sollte ohne Datenbank reichen.
          Du willst ja nur auf die Einträge verlinken, die zur Zeit ohne .html reinkommen (was auch gut so ist)


          ---
          - Sent from my iPhone using Tapatalk
          http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

          Kommentar

          • NoName26
            Contao-Fan
            • 13.08.2010
            • 304

            #20
            Ich habe deinen Code in die catalog_simple.tpl eingesetzt, leider ist das eingetreten, was ich vermutet hatte: Der Eintrag wird nicht gefunden (weil er ja in der DB auch ein anderes Alias hat).

            Siehe http://bit.ly/oFRu75
            Viele Grüße, TN

            Kommentar

            • Tim G
              Contao-Urgestein
              • 13.02.2010
              • 2212

              #21
              Der Eintrag wird nicht gefunden (weil er ja in der DB auch ein anderes Alias hat).
              Na, stimmt nicht.
              Der Link wird im Template zwar aus den Daten in der Datenbank generiert, allerdings bei jedem Aufruf aufs neue. Also würde auch ein event. in der Datenbank geänderter Alias zur richtigen Seite führen. ps. der Code hängt nur ein .html dran

              Daher:
              ist 'haendler' als URL-Schlüsselwort eingetragen? Weil, wenn nicht, denkt folderURL es handelt sich um einen Pfad und nicht um eine Variable für den catalog und er läuft auf eine leere Seite und der Katalogleser hat nichts zu fressen
              Zuletzt geändert von Tim G; 06.08.2011, 17:06.
              http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

              Kommentar

              • NoName26
                Contao-Fan
                • 13.08.2010
                • 304

                #22
                Wenn ich 'haendler' zu den URL-Schlüsselwörtern hinzufüge, dann wird beim Klick auf einen Link in der Katalogliste zwar die URL mit .html aufgerufen, angezeigt wird jedoch das Listenmodul. Ich hab 'haendler' erstmal in den Schlüsselwörtern stehen lassen, du kannst es also gerne mal testen...

                'haendler' ist übrigens die Detailseite, kein URL-Fragment des Katalogs wie z.B. item, zip oder country...
                Viele Grüße, TN

                Kommentar

                • Tim G
                  Contao-Urgestein
                  • 13.02.2010
                  • 2212

                  #23
                  'haendler' ist übrigens die Detailseite,
                  Ok, dann muss es doch raus, ausser du willst auch nach händlern filtern

                  Eigentlich ist dein Katalog doch absolut basic. Ich glaube da wurde schon bissel viel rumgefuddelt. Alles auf Anfang und dann einfach mit meinem Code-Block allen links zur Readerseite ein .html anhängen sollte klappen.

                  In meiner Testumgebung hab ich jetzt überall zweimal .html.html dran. also sollte bei dir dann nur .html ergänz werden.

                  Oder contao normal arbeiten lassen und mit mod_rewrite das index.php Fragment killen lassen und ganz normal .html ergänzen lassen.

                  ps. er baut auch /items/ nicht ein - was für den Katalogleser ist.
                  Irgendwie stimmt da alles nicht.


                  Event. muss du in dem alias deiner Detailseite zusätzlich das /items ergänzen, da ihr ja alles andere durch mod_rewrite killt. Vielleicht schneidet das auch diesen dynamischen Eintrag weg, der aber ausschlaggebend ist für den KatalogLeser
                  Zuletzt geändert von Tim G; 06.08.2011, 17:28.
                  http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

                  Kommentar

                  • NoName26
                    Contao-Fan
                    • 13.08.2010
                    • 304

                    #24
                    ps. er baut auch /items/ nicht ein - was für den Katalogleser ist.
                    Das Items-Fragment wird durch die Extension urlcleaner herausgeschnitten.

                    Alles auf Anfang und dann einfach mit meinem Code-Block allen links zur Readerseite ein .html anhängen sollte klappen.
                    Alles auf Anfang habe ich heute schon gemacht, es hat sich aber nichts geändert.

                    Vielleicht kannst du mir mal auf die Sprünge helfen, wo mein Denkfehler bzgl. deines Codes ist: Die Einträge werden unter einem Alias in der DB gespeichert. Wenn ich einen Eintrag aufrufe, ist das Alias Bestandteil der URL. Das ist doch im Prinzip das gleiche wie bei den Seiten des CMS: Eine Seite bekommt ein Alias, das später auch Bestandteil der URL ist.
                    Wenn ich nun aber eine Seite mit dem Alias 'haendler-und-partner' anlege, dann erreiche ich die Seite nur unter 'haendler-und-partner'. Wenn ich im Browser 'haendler-und-partner.html' eingebe, erhalte ich "Page not found". Wieso ist das denn bei den Items des Catalogs anders? Für mich scheint das Momentan recht logisch, dass - wenn ich an den Link nur ein .html hänge - kein Eintrag gefunden wird?!

                    Lässt sich das .html nicht in der ModuleCatalogEdit.php im Bereich der Zeilen 140/150 einfügen?
                    Code:
                    	public function generateAlias()
                    	{
                    		// without an aliasCol there is no need for generating an alias
                    		// and without an title, we simply can not generate an alias
                    		if (!(strlen($this->objCatalogType->aliasField) && strlen($this->objCatalogType->titleField)))
                    		{
                    			return;
                    		}
                    
                    		// Preferring the fields aliasTitle over the catalog titleField
                    		$aliasTitle = $this->objCatalogType->titleField;
                    		$objCatalogAliasField = $this->Database->prepare("SELECT aliasTitle FROM tl_catalog_fields WHERE tl_catalog_fields.pid=? AND tl_catalog_fields.colName=?")
                    												->execute($this->catalog,$this->objCatalogType->aliasField);
                    		if ($objCatalogAliasField->numRows && strlen($objCatalogAliasField->aliasTitle))
                    			$aliasTitle = $objCatalogAliasField->aliasTitle;
                    
                    		$aliasCol = $this->objCatalogType->aliasField;
                    		$strAlias = $this->objActiveRecord->$aliasCol;
                    		// Generate alias if there is none
                    		$autoAlias = false;
                    		if (!strlen($strAlias))
                    		{
                    			$autoAlias = true;
                    			$strAlias = standardize($this->objActiveRecord->$aliasTitle);
                    		}
                    		// Check whether the catalog alias exists
                    		$objAlias = $this->Database->prepare("SELECT id FROM ".$this->strTable." WHERE ".$this->objCatalogType->aliasField.'=?'.($this->objActiveRecord->id?' AND id!=?':''))
                    								   ->execute($strAlias, $this->objActiveRecord->id);
                    		if ($objAlias->numRows && !$autoAlias)
                    		{
                    			//throw new Exception(sprintf($GLOBALS['TL_LANG']['ERR']['aliasExists'], $arrData[$aliasCol]));
                    			// TODO: we can not throw an exception here as it would kill the FE => not an option.
                    			//       we can not reject saving as we might already have saved it (coming from insert).
                    			//       So I simply work as if it was autogenerated. Find a better solution for this! (c.schiffler 2009-09-10)
                    			$autoAlias = true;
                    		}
                    
                    		// Add ID to alias if it exists.
                    		if ($objAlias->numRows && $autoAlias)
                    		{
                    			$strAlias .= '-' . $id;
                    		}
                    		$this->objActiveRecord->$aliasCol = $strAlias;
                    	}
                    Viele Grüße, TN

                    Kommentar

                    • Tim G
                      Contao-Urgestein
                      • 13.02.2010
                      • 2212

                      #25
                      Das Items-Fragment wird durch die Extension urlcleaner herausgeschnitten.
                      Ok, damit hab ich noch nicht rumexperimentiert. Würde ich auch immer erst machen, wenn alles läuft.

                      Die Einträge werden unter einem Alias in der DB gespeichert. Wenn ich einen Eintrag aufrufe, ist das Alias Bestandteil der URL. Das ist doch im Prinzip das gleiche wie bei den Seiten des CMS: Eine Seite bekommt ein Alias, das später auch Bestandteil der URL ist.
                      Ja, das ist schon so. Der alias ist das, was die ID numerisch ist.
                      Der alias wird auch in der DB gespeichert, aber ohne suffix und "Fremdzeichen", die zu Problemen führen können.

                      Im Falle des Katalogs wird überprüft ob ein alias generiert werden soll und aus welchem Feld. Sowohl im BE-Edit, als auch im FE-Edit und dieser wird entsprechend der Regeln aus dem Namensfeld (oder ein anderes Feld) gebildet.
                      -> aber immer ohne Suffix, da das System dieses ergänzen soll. Kann ja sein, dass jemand .xml Seiten braucht, oder .php, oder .htm

                      Der Katalog hält sich daran und ergänzt beim Aufbau der Felder und der Anchors das Suffix entsprechend der Contao-Einstellungen.

                      Bei Euch ist dieses Feld nun leer. Daher musst du selbst dafür sorgen, dass das Suffix ergänzt wird. Aber wir wollen das Suffix eigentlich nicht in der Datenbank haben, bin mir auch nicht sicher ob Punkte da zu Fehlern führen könnten.

                      Du hast nun ein Katalog-BearbeitungsModul und ein KatalogListe Modul und den Leser.

                      Fangen wir bei dem Lister an:
                      Die dort eingestellte Weiterleistungsseite ist die Seite deren alias mit /items/ALIAS-DES-EINTRAGS.html generiert wird.
                      Im Template der KatalogListe werden die Links entsprechend des Alias des Eintrags gebildet. Bei Euch ohne .html -> dort setzt der Code an und ergänzt das .html
                      Was jetzt wohl fehlerhaft ist, dass er das /items/ nicht bekommt. Setz mal das beim urlcleaner raus.
                      Die links sollten bei euch daher so aussehen: /KATALOG_READER_SEITE/items/ALIAS -> .html wird ergänzt.

                      Das BearbeitungsModul muss eigentlich gar nichts machen.
                      Das Feld alias gar nicht erst anzeigen, sollte automatisch ergänzt werden aus dem Namen. Bzw. maximal das Feld für "admins" bereitstellen.
                      http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

                      Kommentar

                      • Tim G
                        Contao-Urgestein
                        • 13.02.2010
                        • 2212

                        #26
                        Gestern dran abgestorben:
                        Wenn du nicht noch mal mit deinen SEO-Leuten sprechen willst, dann kannst du natürlich auch direkt die ModuleCatalogEdit.php ändern. Ist dann aber nicht updatesicher.
                        Aber per hooks kannst du auch die Änderungen in die Datenbank schreiben.

                        Wie gesagt, im Grunde geht das mit den folgenden Hooks:
                        catalogFrontendInsert
                        catalogFrontendUpdate

                        oder

                        parseCatalog (würde auch gehen, da werden die Einträge verarbeitet. Dort könnte man auch das .html anhängen, aber für Datenbank-Arbeiten eignen sich die anderen besser)

                        Ein möglicher Aufruf würde so aussehen:


                        PHP-Code:
                        public function catalogFrontendInsertHook($arrData, $objModule, $objTable)
                            {
                                $aliasField = 'alias';
                                $aliasRefField = 'name'; // das Feld um den Alias zu bauen
                                // Replace only if alias was not set manually
                                if(strlen($arrData[$aliasField]))
                                    return $arrData;
                                
                                $newAlias = strtolower($arrData[$aliasRefField] .= '.html');
                                // update database
                                $objFields = $this->Database->prepare("UPDATE $catalog SET $aliasField=? WHERE id=?")
                                    ->execute($newAlias, $arrData['id']);
                                
                                return $arrData;
                            } 
                        

                        Viel Erfolg damit
                        http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

                        Kommentar

                        • NoName26
                          Contao-Fan
                          • 13.08.2010
                          • 304

                          #27
                          Hi Tim,

                          vielen Dank für deine Antwort und sorry, dass ich so lange nicht darauf reagiert habe. Ich habe den Hook umgesetzt, habe nach dem Update von 2.9.5 auf 2.10 aber noch Probleme mit dem CatalogEdit. Sobald die behoben sind kann ich testen, ob´s funktioniert.

                          Nochmals danke!
                          Viele Grüße, TN

                          Kommentar

                          Lädt...