Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 15. Juli 2014 16:26

simonson
kennt CMS/ms
Ort: Wien
Registriert: 07. März 2012
Beiträge: 192

Anker aus php führen immer zur Startseite

Hallo Gemeinde,
ich binde ein externes php-file, das lange Texte enthält,  mit einem UDT [ {read_file} = readfile($params["file"]); ]
in eine Seite ein.
In diesem file werden Anker
<a name="anfang">; <a name="kapitel_1">, .....benutzt
und mit
<a href="#anfang">Seitenanfang</a>, .... aufgerufen.
Leider führen diese Anker immer zur Startseite und nicht an die gewünschte Stelle im Dokument.

Einen "smarty-Anker" {anchor anchor="side_00" text="TOP" />} kann ich in dem externen file nicht verwenden,
da dieser nur als Text ausgegeben wird.

Jemand eine Idee zur Problemlösung?

Dank vorab!


mfg
simonson

CMSMS 1.12     Apache/2.4.6 (Linux/SUSE) - PHP 5.4.20 - MySQL 5.0.95 - W7 ultimate - FF 38.0.1

Offline

#2 15. Juli 2014 19:57

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: Anker aus php führen immer zur Startseite

==== php code für udt =====
$gCms = cmsms();
$contentops = $gCms->GetContentOperations();
$alias = $smarty->get_template_vars('page_alias');
$content = $contentops->LoadContentFromAlias($alias);
if( !is_object($content) ) return '';

$url = $content->GetURL();

$text = readfile($params["file"]);
$text = replace('"#','"'.$url.'#');

echo $text;

Ungetestet, müsste in etwa so funktionieren:

- Erst URL der Seite holen
- Anschliessend Text aus File
- Im Text "# mit "http://www.seite.de/seite.htm# ersetzen.
- Text ausgeben


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#3 16. Juli 2014 10:22

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: Anker aus php führen immer zur Startseite

Warum stattdessen nicht einfach das <base>-Tag im Template entweder entfernen oder so anpassen, dass es immer zum aktuellen Dokument (und nicht nur zur Domain) zeigt?

Das <base>-Tag wird automatisch mit {metadata} ausgegeben. Wenn Du nicht auf {metadata} verzichten willst, dann gibt es dafür noch den Parameter {metadata showbase='false'} oder in der config.php den Wert $config['showbase'] = false;

Beim automatisch eingefügten <base>-Tag wird als Wert für das href-Attribut die Root-URL des CMS verwendet. D.h. alle relativen Links (auch Ankerlinks) sind nicht mehr relativ zur aktuell angezeigten Seite, sondern relativ zur Root-URL. Daher landet man da immer auf der Startseite. Wenn man also stattdessen das <base>-Tag im Template selber so einfügt:

<base href="{if isset($content_obj) && is_object($content_obj)}{$content_obj->GetURL()}{else}{root_url}{/if}" />

Dann sollten alle Anker wie erwartet funktionieren.

Ich hab es aber nicht getestet. Es kann auch sein, dass dann Bilder bzw. Stylesheets nicht geladen werden können. Vor allem wenn pretty-URLs verwendet werden.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#4 16. Juli 2014 20:23

simonson
kennt CMS/ms
Ort: Wien
Registriert: 07. März 2012
Beiträge: 192

Re: Anker aus php führen immer zur Startseite

Danke für die Hinweise - melde mich nach Test und hoffentlich Erfolg ;-)


mfg
simonson

CMSMS 1.12     Apache/2.4.6 (Linux/SUSE) - PHP 5.4.20 - MySQL 5.0.95 - W7 ultimate - FF 38.0.1

Offline