Anker in Navigation

moeman
Beiträge: 37
Registriert: Fr 18. Nov 2011, 13:08
Kontaktdaten:

Anker in Navigation

Beitrag von moeman » So 20. Nov 2011, 12:57

Hi Community,

ich nutze Contenido schon eine Weile, nur von PHP habe ich absolut keine Ahnung. Wäre super wenn jemand mit Know-How sich meines kleinen Problems annehmen könnte.
Ich nutze die vpnavigation(sollte aber keinen Unterschied zur Standarnavigation machen. Im zweifel nutze ich auch gerne die Standardnavi) und möchte dass der User beim klick auf einen Navigationspunkt (kontakt) per Anker ans Seitenende weitergeleitet wird.

Soweit ich das Ganze überblicke, müsste ins Output des Moduls eine If-Abfrage, die an eine spezielle idcat(des Linkes Kontakt) den Anker anghängt.
Nur wie sowas aussehen muss, weiss ich leider nicht. Hier meine Site: http://bit.ly/vuneqI


Gruß, moe

McHubi
Beiträge: 1210
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Anker in Navigation

Beitrag von McHubi » Mo 21. Nov 2011, 09:05

Hallo moe,

wenn die vpnavigation immer nur die idcat und nicht einen bestimmten Artikel aufruft - wovon ich ausgehe - wird ja immer der als Startartikel definierte Artikel aufgerufen. Probier mal folgendes:

Den Artikel in Deiner Kategorie, der den Anker enthält, setzt Du auf "nicht-Startartikel". Als Startartikel erstellst Du einen neuen Artikel, der als Weiterleitung auf diesen Artikel fungiert. Also im Reiter "Eigenschaften" des neuen Startartikels bei "Weiterleitung" einfach die URL des eigentlich aufzurufenden Artikels eintragen und hinten dann den Anker dran hängen. Spart Dir den Eingriff in den Modulcode.
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

moeman
Beiträge: 37
Registriert: Fr 18. Nov 2011, 13:08
Kontaktdaten:

Re: Anker in Navigation

Beitrag von moeman » Mo 21. Nov 2011, 14:31

Hi MC,

danke schonmal für Deine Mühe und Deinen kreativen Ansatz ;)

Ich weiß nicht ob ich es mißverständlich dargestellt habe, aber ich möchte eigentlich dass beim Klick auf Kontakt, auf der jeweiligen Seite, nach unten bis zum Kontaktformular gescrollt wird. Falls das technisch nicht möglich ist, könnte man natürlich auch eine einzelne Seite (z.b. die Startseite) als Anker-Zielseite definieren.

Ich habe nun also Testweise in der Kategorie Kontakt in den Eigenschaften des Artikels Kontakt eine Weiterleitung zum neuen Artikel (der einer Kopie der Startseite entspricht) inkl. der Anker-Endung #kontakt (die ich im Layout definiert habe) definiert.

Klicke ich nun auf den Kontaktbutton in der Navi werde ich auf "meinedomain/test/cms/kontakt/_c_p_1.html" geleitet?! Keine Ahnung wie dieser Pfad zustande kommt. Der Anker wird dabei allerdings nicht aufgerufen. Ich bleibe am oberen Ende der Seite. Das selbe passiert wenn ich im Artikel Kontakt (den ich vorsorglich auch zur Kopie der Startseite gemacht habe) direkt die Weiterleitung einrichte.

Dann hab ich testweise mal nur den Anker bei der Weiterleitung reingeschrieben, also #kontakt. Beim klick auf Kontakt in der Navi dauerts ein wenig und dann bekomme ich folgende Fehlermeldungen:

Im Chrome:
Diese Webseite weist eine Weiterleitung auf.
Die Webseite unter meinedomain/test/cms/front_content.php?idcat=39#kontakt hat zu viele Umleitungen erzeugt. Das Löschen Ihrer Cookies für diese Website oder das Zulassen von Drittanbieter-Cookies könnte das Problem möglicherweise beheben. Sollte sich das Problem damit nicht beheben lassen, liegt eventuell ein Serverkonfigurationsfehler und kein Problem mit Ihrem Computer vor.
Vorschläge:
Laden Sie diese Webseite später erneut.
Weitere Informationen zu diesem Problem.
Fehler 310 (net::ERR_TOO_MANY_REDIRECTS): Zu viele Umleitungen.

Im Firefox: Fehler: Umleitungsfehler. Die aufgerufene Website leitet die Anfrage so um, dass sie nie beendet werden kann. Dieses Problem kann manchmal auftreten, wenn Cookies deaktiviert oder abgelehnt werden.

Nehme ich aber die Weiterleitung raus, lade die seite neu und füge den Pfad der Kontaktseite inkl. des Ankers in die Adressleiste des Browser, so funktioniert es einwandfrei: Die Kontaktseite wird geladen und der Anker springt ans Ender der Seite.

Ich verstehe nicht ganz wofür die Weiterleitungsfunktion eigentlich da ist. Und warum sie scheinbar nicht funtioniert. Andere Ideen?? Oder mache ich was falsch???

Gruß, Moe

McHubi
Beiträge: 1210
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Anker in Navigation

Beitrag von McHubi » Di 22. Nov 2011, 09:33

Hallo Moe,

was den Fehler der unendlichen Weiterleitung betrifft: vermutlich hast Du beim Weiterleitungsziel nicht die idart des anzuspringenden Artikels angegeben sondern die idcat der Kategorie. Das führt dann tatsächlich dazu, dass immer wieder der Startartikel aufgerufen wird der dann ständig auf sich selbst verweist.

Nichts desto trotz, auch wenn Du bei der Weiterleitung "...front_content.php?idart=1234#ankername" angibst, klappt es nicht. Ein direkter Eintrag der URL "...front_content.php?idart=1234#ankername" in der Adresszeile des Browsers führt zum gewünschten Ergebnis, nicht jedoch die gleich lautende Weiterleitung im Artikel. Auch eine Erweiterung der URL um die idcat,lang o.ä. bleibt fruchtlos. Der Artikel wird zwar aufgerufen, der Sprung zum Anker erfolgt jedoch nicht.

Hier sieht's also so aus, als ob Contenido alle # rauswirft. Warum das so ist, kann bestimmt einer der Cracks hier im Forum sagen :D

Nochwas: Vermeide bitte Doppelposts: http://forum.contenido.org/viewtopic.ph ... 35#p152075
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

moeman
Beiträge: 37
Registriert: Fr 18. Nov 2011, 13:08
Kontaktdaten:

Re: Anker in Navigation

Beitrag von moeman » Di 22. Nov 2011, 10:18

Bedeutet dass das die von Dir vorgeschlagene Möglichkeit nicht funktioniert, oder dass ich was falsch mache?
Wenn ich übrigens den Pfad mit idart und Anker in die Adressleiste eingebe gelange ich zwar ans Seitenende, die Adresse aber switcht wieder auf ..test/cms/idart1_c_p_1.html#kontakt.

Schade dass man zu der ganzen Thematik so gar nichts finden kann, man sollte doch meinen ich wäre nicht der Erste der sowas vorhat.

Auf Ihr Cracks, redet mit mir!!

P/S Ja, sorry wegen Doppelpost. Hatte den anderen zuerst geschrieben und dann gemerkt dass es sich bei meinem Anliegen ja eher um was allegmeines handelt.

McHubi
Beiträge: 1210
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Anker in Navigation

Beitrag von McHubi » Di 22. Nov 2011, 10:35

Bedeutet dass das die von Dir vorgeschlagene Möglichkeit nicht funktioniert, oder dass ich was falsch mache?
Das erste. Daher auch meine Frage, warum die Anker beim Aufruf aus der URL entfernt werden.
..test/cms/idart1_c_p_1.html#kontakt.
Sieht so aus, als ob Du den URL-Builder oder das AMR-Plugin nutzt?
Schade dass man zu der ganzen Thematik so gar nichts finden kann, man sollte doch meinen ich wäre nicht der Erste der sowas vorhat.
Nun, etwas ungewöhnlich ist das schon. Aus Sicht eines Seitenbesuchers zumindest. Denn wenn ich eine Seite aufrufe und direkt an's Ende oder irgendwo in die Mitte springe, dann frage ich mich 1. warum steht das jetzt nicht am Anfang und 2. soll ich die Infos darüber nicht lesen? Ein Ankeraufruf innerhalb der Seite (also nicht in der Navigation) macht dagegen aus Seitenbesuchersicht mehr Sinn.
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

Oldperl
Beiträge: 4257
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Anker in Navigation

Beitrag von Oldperl » Di 22. Nov 2011, 10:45

Hallo ihr 2,

so wird das nicht funktionieren. Die Weiterleitung in der Artikelkonfiguration ist und war nie nur auf einen Anker angedacht. Ihr möchtet ja eigentlich nur auf der "gleichen", sprich aktuellen, Seite zu einem Anker verweisen. Dies geht IMO nicht mit einer Standardnavi und Kategorien, sondern hier muss zusatzlich im Nav-Modul hardcoded der gewünschte Link hinterlegt werden. Wäre hier, so denke ich, auch die schnellste und einfachste Lösung, wenn der Menüpunkt immer als letzter Eintrag bleibt.
Also je nach Nav-Modul den Eintrag "händisch" im Template oder Modulcode unter Angabe der aktuellen URL (z.B. per $sess-Objekt) ergänzen. Fertig.

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

McHubi
Beiträge: 1210
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Anker in Navigation

Beitrag von McHubi » Di 22. Nov 2011, 11:08

Hi Ortwin,
Ihr möchtet ja eigentlich nur auf der "gleichen", sprich aktuellen, Seite zu einem Anker verweisen.
Nicht ganz...

Ziel von moeman war ja nicht, bei einer bereits geöffneten Seite innerhalb dieser Seite einen Anker anzuspringen ( :mrgreen: hüpf... ) sondern schon beim Öffnen der Seite über die Navi diesen Sprung hinzubiegen. Die URL muss insofern nur durch den Anker erweitert werden. Die Lösung mit dem Weiterleitungsstartartikel funktioniert theoretisch ja so: Aufruf der idcat öffnet den Startartikel, der "erweitert" die URL um den Anker und die eigentliche Seite wird mit Sprung an den Anker aufgerufen. Eine hardgecodete Erweiterung des Navimoduls könnte man sich damit sparen.

Das hier aber von Contenido # herausgefiltert wird, wird ja seinen Sinn haben - nur warum wird dies gemacht?

EDIT:
Anderer Ansatz, mit Erweiterung des Navimoduls:
1) Das Navimodul bekommt eine Moduleingabe, bzw. eine vorhandene Moduleingabe wird erweiter um ein Inputfeld in dem der Name des Ankers eingetragen werden kann.
2) Im Output des Navimoduls wird bei der Generierung des Links geprüft, ob in diesem Inputfeld was drin steht oder nicht. Wenn ja, dann wird der Inhalt einfach hinten an die URL drangehängt. Aus "...front_content.php?idcat=1234" würde dann "...front_content.php?idcat=1234#ankername".

Geht auch und wäre nicht allzu kompliziert umzusetzen.
Zuletzt geändert von McHubi am Di 22. Nov 2011, 11:23, insgesamt 2-mal geändert.
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

Oldperl
Beiträge: 4257
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Anker in Navigation

Beitrag von Oldperl » Di 22. Nov 2011, 11:16

Da moeman auf jeder Seite sein Kontaktform darstellt ( :arrow: http://bit.ly/vuneqI) und weil...
moeman hat geschrieben:und möchte dass der User beim klick auf einen Navigationspunkt (kontakt) per Anker ans Seitenende weitergeleitet wird.
dachte/denke ich doch...
McHubi hat geschrieben:bei einer bereits geöffneten Seite innerhalb dieser Seite einen Anker anzuspringen ( :mrgreen: hüpf... )
Also "Hüpf" :mrgreen:

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

McHubi
Beiträge: 1210
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Anker in Navigation

Beitrag von McHubi » Di 22. Nov 2011, 11:33

Guuuuuuut... Recht hatter. :oops: Mein Ansatz war "allgemeingültig für einen Einzelfall" gedacht und mein edit im Post oben ist eine recht simple Umsetzung. Sorry, da bin ich in eine falsche Richtung abgedriftet...

Im "moeman-Fall" würde ich hier auch hardcoden und den Navipunkt hinten an den dynamisch aufgebauten Teil der Navi dranhängen. Den Link könnte man dann z. B. so einbinden:

Code: Alles auswählen

<a href="front_content.php?idcat='.$idcat.'&idart='.$idart.'&lang='.$lang.'#ankername">
Hau drauf Ortwin... :mrgreen:
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

moeman
Beiträge: 37
Registriert: Fr 18. Nov 2011, 13:08
Kontaktdaten:

Re: Anker in Navigation

Beitrag von moeman » Di 22. Nov 2011, 12:21

Puhh, is dass alles nen Aufwand! Gäbe es doch den bescheuerten IE9 mit seiner noch dämlicheren Cleartype-Technologie nicht. Ursprünglich hatte ich das Ganze so easy gelöst: Navigationspunkt Kontakt aus der Navi rausgenommen und einfach ne verlinkte PNG(in der Optik des vorherigen Navigationspunktes) an die Stelle des Navipunktes. So konnte auf jeder Seite beim klick auf Kontakt zum Seitenende gesprungen werden. Aber neein, die Schrift sieht ja im IE mal wieder anders aus.

Ich weiß, wirklich sauber wäre so eine Lösung nicht, hat mich aber ganze 10min. gekostet. Und nu mache ich schon wieder ewig an so ner "Kleinigkeit" rum.

Ich finds echt super wie Ihr Euch engagiert, es hilft nur leider nix wenn Ihr mir sagt es sei in PHP ohne weiteres machbar. Denn für mich ist es das nicht. Falls möglich wäre es super wenn jemand den Modul-Outputcode um die helfende Zeile ergänzen könnte:

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : vpNavigation 0.2
* Author : Ingo van Peeren
* Copyright : Ingo van Peeren (ingo@van-peeren.de)
* Created : 30-03-2005
* Modified : 16-07-2005
************************************************/

$hauptkategorie = "CMS_VALUE[0]";

$navitems = array();

function nav_feld ($cat) {
global $client, $lang, $cfg, $idcat;

if (!is_object($db)) {
$db = new DB_Contenido;
}
$sql = "SELECT
A.idcat,
B.parentid,
C.name
FROM
".$cfg["tab"]["cat_tree"]." AS A,
".$cfg["tab"]["cat"]." AS B,
".$cfg["tab"]["cat_lang"]." AS C
WHERE
A.idcat = B.idcat AND
B.idcat = C.idcat AND
B.idclient = '$client' AND
C.idlang = '$lang' AND
C.visible = '1' AND
B.parentid = '$cat'
ORDER BY
A.idtree";

$db->query($sql);

while ( $db->next_record() ) {
$aktiv = "";
$sub_feld = nav_feld($db->f("idcat"));
if ($db->f("idcat") == $idcat) $aktiv = "active";
elseif ($sub_feld["activepath"]) $aktiv = "activepath";
$nav_feld[] = array("idcat" => $db->f("idcat"),
"name" => $db->f("name"),
"active" => $aktiv,
"sub" => $sub_feld);
if ($aktiv != "") $activepath = $aktiv;
}
$rv = array("feld" => $nav_feld,
"activepath" => $activepath);
return $rv;
}

function liste ($array, $indent = " ")
{
global $first;

if (is_array($array["feld"])) {
if ($first) {
echo $indent . "<ul id=\"nav\">\n";
$first = 0;
}
else echo $indent . "<ul>\n";
foreach ($array["feld"] as $menupunkt) {
if ($menupunkt["active"] == "active") echo $indent . $indent . "<li id=\"active\">\n";
elseif ($menupunkt["active"] == "activepath") echo $indent . $indent . "<li class=\"activepath\">\n";
else echo $indent . $indent . "<li>\n";
if (is_array($menupunkt["sub"]["feld"])) {
echo $indent . $indent . $indent . "<a class=\"daddy\" href=\"front_content.php?idcat=" . $menupunkt["idcat"] . "\">" . $menupunkt["name"] . "</a>\n";
liste($menupunkt["sub"], $indent." ");
}
else echo $indent . $indent . $indent . "<a href=\"front_content.php?idcat=" . $menupunkt["idcat"] . "\">" . $menupunkt["name"] . "</a>\n";
echo $indent . $indent . "</li>\n";
}
if($idcat == "39")
{
echo "front_content.php?idcat=35#kontakt";
}
<- dass war mein bescheidener Versuch das Ganze in PHP umzusetzen ;)
echo $indent . "</ul>\n";
}
}

/* Create Navigation Array */
$navitems = nav_feld($hauptkategorie);

$first = 1;

liste($navitems);
?>


Gruß, Moe

McHubi
Beiträge: 1210
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Anker in Navigation

Beitrag von McHubi » Di 22. Nov 2011, 12:34

Hi,

Lösch mal Deinen Ansatz raus:

Code: Alles auswählen

if($idcat == "39")
{
echo "front_content.php?idcat=35#kontakt";
} <- dass war mein bescheidener Versuch das Ganze in PHP umzusetzen ;)
Und ändere den Code so:

Code: Alles auswählen

...
else echo $indent . $indent . $indent . "<a href=\"front_content.php?idcat=" . $menupunkt["idcat"] . "\">" . $menupunkt["name"] . "</a>\n";
echo $indent . $indent . "</li>\n";
}
echo $indent.'<li><a href="front_content.php?idcat='.$idcat.'&idart='.$idart.'&lang='.$lang.'#ankername">Kontakt</a></li>';
echo "</ul>\n";
}
}
...
Ist natürlich nicht getestet, sollte aber klappen.... :D
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

moeman
Beiträge: 37
Registriert: Fr 18. Nov 2011, 13:08
Kontaktdaten:

Re: Anker in Navigation

Beitrag von moeman » Di 22. Nov 2011, 12:53

Yippieee, works just fine! Vielen Dank ;)

S`einzige kleine Mancko is, dass nun, egal auf welcher Seite man sich befindet, er immer auf die Startseite springt. Ist es evtl. auch möglich immer nur auf der jeweiligen Seite nach unten zu springen? Ich will den User ja nicht vollends irritieren ;)
Und wo wir gerade so schön das Thema Anker besprechen: Ne Idee was zu tun ist, um nach dem Klick auf senden beim Kontaktformular, ob fehlerhafte Eingabe oder erfolgreicher Versand, nach unten zum Footer gesprungen wird?

McHubi
Beiträge: 1210
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Anker in Navigation

Beitrag von McHubi » Di 22. Nov 2011, 13:07

Hm... beim Linkziel fehlen die Infos zur idcat, idart und lang:

...front_content.php?idcat=&idart=&lang=#kontakt

Warum, ist ne gute Frage. Tausch mal den Link-Teil

Code: Alles auswählen

echo $indent.'<li><a href="front_content.php?idcat='.$idcat.'&idart='.$idart.'&lang='.$lang.'#ankername">Kontakt</a></li>';
durch

Code: Alles auswählen

echo $indent.'<li><a href="'.$_SERVER["REQUEST_URI"].'#ankername">Kontakt</a></li>';
Das wäre nen anderer Ansatz um Infos zur aktuell aufgerufenen Seite in den Link zu packen.
Ne Idee was zu tun ist, um nach dem Klick auf senden beim Kontaktformular, ob fehlerhafte Eingabe oder erfolgreicher Versand, nach unten zum Footer gesprungen wird?
Beim Formular wird was mit <form ... action=""...> stehen. Probier mal hier den action-Part auch mit dem Anker zu versehen.
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

moeman
Beiträge: 37
Registriert: Fr 18. Nov 2011, 13:08
Kontaktdaten:

Re: Anker in Navigation

Beitrag von moeman » Di 22. Nov 2011, 13:24

Awesome, funktioniert ;) Thanks a lot!

Was die Formaction angeht: Soweit ich das verstehe kann man einem Formular nur eine Action zuweisen und die ist ja standardmässig "<form action="{form_action}" method="post">". Ich hatte dazu schon mal ein wenig recherchiert und da hiess es man könne sowas per javascript machen, was ich allerdings gerne vermeiden würde.

Könnte man da nicht evtl. auch irgendwie im PHP-Code nen Befehl definieren?

Gesperrt