Seite 1 von 2

[MOD] Ankerlinks im Frontend ermöglich

Verfasst: Do 9. Feb 2006, 14:33
von i-fekt
Problem:
Ihr benutzt Sprungmarken und sie funktionieren nicht, leiten euch immer zur Startseite/Mandantenverzeichnis (z.B. /cms) um.


Was ist zu tun?

Code: Alles auswählen

#
#-----[ OPEN ]------------------------------------------
#
/cms/front_content.php


#
#-----[ FIND ]------------------------------------------
#
 if ($is_XHTML == true) {
  $baseCode = '<base href="'.$cfgClient[$client]["path"]["htmlpath"].'" />';
 } else {
  $baseCode = '<base href="'.$cfgClient[$client]["path"]["htmlpath"].'">';
 }


#
#-----[ REPLACE WITH ]------------------------------------------
#
 if( !empty($edit) ) {
  if( $is_XHTML == true ) {
   $baseCode = '<base href="'.$cfgClient[$client]["path"]["htmlpath"].'"/>';
  } else {
   $baseCode = '<base href="'.$cfgClient[$client]["path"]["htmlpath"].'">';
  }
 }

Erklärung
Schuld ist der <base>-Tag, dieser wird im Frontend nicht benötigt. Durch die Änderung wird der <base>-Tag nur im Backend ausgegeben.


Gruß,
Daniel

Re: [FAQ] Ankerlinks funktionieren nicht mehr

Verfasst: Do 9. Feb 2006, 14:59
von mvf
gleich probieren muss,

wenn des funtz ist wieder ein minor-todo von der liste :D

merci i-fekt ;) this community roxxxxxxxxxxxxxx

Verfasst: Mo 31. Jul 2006, 15:11
von HerrB
Mmmh, eine Lösung. Es gibt aber in Bezug auf den Newsletter mindestens einen Nebeneffekt (gilt noch nicht für V4.6.8.5) - muss ich berücksichtigen.

Übrigens sollte $baseCode wenigstens auf "" gesetzt werden.

Ich nehme es mal nach Bugs.

Gruß
HerrB

Verfasst: Mo 31. Jul 2006, 15:39
von stese
das ding ist mit vorsicht zu genießen, dann bei modrewrite wird der base tag benötigt. in meinem bundle habe ich das anker problem aber ohnehin schon gelöst.

Verfasst: Mi 2. Aug 2006, 14:23
von rethus
Dann gib uns doch bitte einen Tipp, wie du das bewerkstelligt hast :-)

Thanx

Verfasst: Mi 2. Aug 2006, 14:28
von stese
es funktioniert halt in modrewrite. ich suche nach <a href=""> tags die mit # beginnen und ersetze diese um den vollen modrewrite pfad, da ich da eh an der stelle rumfuhrwerken musste, is das kein thema. nur wenn man kein modrewrite nutzt braucht man diesen "hack" da oben.

Verfasst: Mi 2. Aug 2006, 14:31
von i-fekt
Gibt es in deiner Modifikation eine Möglichkeit an der Stelle abzufragen ob ModRewrite aktiviert ist oder nicht? Dann könnte man das noch dazubauen.

Verfasst: Mi 2. Aug 2006, 14:33
von rethus
Den obigen Hack habe ich schon eingefügt, allerdings geht er bei mir immer noch auf die Basisseite zurück...

Woran kann dass denn liegen?

Siehe hier: http://www.unser-horrem.de/cms/front_co ... hp?idcat=7

Verlinkt ist der erste rote Pfeil um wieder zum Anfang zu gelangen (rechts neben Nutzungsbedingungen)...

Verfasst: Mi 2. Aug 2006, 14:34
von stese
derzeit nicht, ist aber kein problem das mit reinzunehmen. das wichtige an denanker links ist, dass die url identisch der aktuellen ist. da man in contenido ja alle systemvariabelen zur verfügung hat, egal ob z.b. eine idart übergeben wurde oder nicht, muss man da die get-variablen abfragen, und damit den neuen link aufbauen.

Verfasst: Mi 2. Aug 2006, 14:36
von stese
@rethus:

Code: Alles auswählen

<a href="/#Top">
so kann das auch nciht klappen, weil der immer zur basisdomain geht.
so wird das schon eher was:

Code: Alles auswählen

<a href="#Top">

Verfasst: Mi 2. Aug 2006, 15:04
von rethus
Klar, das weiß ich... aber tiny scheint es nicht zu wissen...
Er schreibt da immer ein / vor...

Verfasst: Mi 2. Aug 2006, 19:43
von stese
@rethus
suche mal bitte im forum, ich glaube das thema gabs schon mal - kann an der tinymce version liegen - am besten die aktuelle laden und dann das verzeichnis einfach drüberkopieren - vll. hilft das schon - bei mir klappt das problemlos

@i-fekt
gesagt getan - ist eingebaut. geändert gegenüber der letzten version wurde die front_content.php und classes/class.modrewrite.php

für alle anderen zum selberbauen in nicht modrewrite paketen:
folgende funktion wird benötigt und es muss sichergestellt werden, dass sie auch geladen wurde in der front_content, falls sie extern ausgelagert wird:

Code: Alles auswählen

/**
	 * return full contenido url from single anchor 
	 *
	 * @param array $arr_matches [0] = complete anchor, [1] = pre arguments, [2] = anchor name, [3] = post arguments
	 * @return string new anchor
	 */
	function contenido_html_anchor( $arr_matches = array(), $str_xhtml = true ) {
		global $parts, $idcat, $idart, $artname, $client, $lang, $sess;		
		
		$arr_params = array();
		$str_join_parameter = $str_xhtml ? '&' : '&';
		
		foreach ( $_GET as $str_key => $str_value ) {
			$arr_no_anchor = explode("#",$str_value);
			$arr_params[] = urlencode($str_key) . '=' . urlencode($arr_no_anchor[0]);
		}
		
		$str_new_url = '<a' . $arr_matches[1] . 'href="' . $sess->url( 'front_content.php?' . implode($str_join_parameter, $arr_params) . '#' . $arr_matches[2] ) . '"' . $arr_matches[3] . '>';

		return $str_new_url;
	}
danach muss in der [mandantenverzeichnis]/front_content.php folgende stelle gefunden werden:

Code: Alles auswählen

eval("?>\n".$code."\n<?php\n");
und muss ersetzt werden durch:

Code: Alles auswählen

ob_start();
eval("?>\n".$code."\n<?php\n");
$str_all = ob_get_contents();
ob_end_clean();

// anchor hack for non modrewrite websites
$str_all = preg_replace_callback(
"/<a([^>]*)href\s*=\s*[\"|\']#(.?|.+?)[\"|\']([^>]*)>/i", 
create_function( '$arr_matches' , 'return contenido_html_anchor($arr_matches, $GLOBALS["is_XHTML"]);' ),
$str_all
);

print ($str_all);

Verfasst: Do 3. Aug 2006, 15:49
von rethus
Hier noch ein neuer Lösungsansatz.

in der INIT-Methode von tinyMCE gebt Ihr einfach (am besten ziemlich weit unten) folgende ergänzung ein:

Code: Alles auswählen

convert_urls : false,
Damit funktioniert es bei mir... Ver. 2.0.6.1.
Die anderen Vorschläge haben alle nicht funktioniert.

Was scheinbar nicht funktioniert ist das einfügen eines Ankers über den Dialog.

Wenn das Dialogfenster offen ist, schreibt die JavaScript_Konsole: "init is not defined", wenn ich auf "Einfügen" klicke, schreibt sie "insertAction is not defined".

Und das obwohl die Verknüpfung zur Javascript-Datei in dr die Methoden drin sind richtig angegeben ist.

Kann jamend das Problem bestätigen?

Verfasst: Do 3. Aug 2006, 15:53
von HerrB
Wenn das Dialogfenster offen ist, schreibt die JavaScript_Konsole: "init is not defined", wenn ich auf "Einfügen" klicke, schreibt sie "insertAction is not defined".

Und das obwohl die Verknüpfung zur Javascript-Datei in dr die Methoden drin sind richtig angegeben ist.

Kann jamend das Problem bestätigen?
Bitte keine Crosspostings, die Frage hast Du bereits an anderer Stelle gestellt.

Gruß
HerrB

Verfasst: Do 3. Aug 2006, 17:55
von rethus
Ok, sorry... haben sich leider beide Themen in die Richtung entwickelt.
Das Posting was du meinst, ist hier
http://www.contenido.org/forum/viewtopi ... highlight=
zu finden, allerdings schlage ich wegen dem Titel des Postings diesen Thread vor, um das Thema weiter zu behandeln.
Ich werde auch in dem anderen Thread einen Vermerk machen, das es mit dem ankerproblem hier weiter geht.