Author Topic: Anleitung: URL nicht von Menü-Titel abhängig  (Read 7873 times)

fischstäbchenbrenner

  • Guest
Anleitung: URL nicht von Menü-Titel abhängig
« on: December 09, 2011, 04:24:20 PM »
Weil es mich oft nervt, dass bei Änderung eines (übergeordneten) Menütitels gleich mal ein Haufen Pfade nicht mehr gültig ist, füge ich meistens ein zusätzliches Feld ein, mit dem der FileName der Seite extra angegeben werden kann.


Ich habs als PHP geschrieben, wegen dem Syntax-Highlighting
Die Datei im Anhang enthält die Anleitung nochmal (als php) und upgrade-pagefile.php, das fügt das nötige Feld ein.

Ist nicht umfassend getestet, läuft aber auf 3 Sites bei mir , WB genau nach dieser Anleitung modifiziert..


Code: [Select]
<?php 

/* =========================================================================
Schritt1:
Zuerst das Script upgrade-pagefile.php starten. Es fügt das Feld page_file
ein und belegt den Inhalt vor:
*/
// Schema: $page_file = page_filename($fetch_fields['menu_title']);</p>


/* =========================================================================
Schritt2:
/admin/pages/add.php
ca 165: nach */
$sql .= '`menu_title` = "'.$title.'", ';

//einf&uuml;gen:
$sql .= '`page_file` = "'.page_filename($title).'", ';

/*
HINWEIS:
Siehe auch die Änderung in settings2.php  (Schritt 4)
An sich wären in add.php die selben Änderungen zu machen.
Das ist aber nicht unbedingt nötig, weil beim Einfügen einer Seite so oder so der Menutitle verwendet wird.

/* =========================================================================
Schritt 3:
/admin/pages/settings.php
ca 103: nach*/
'MENU_TITLE' => ($results_array['menu_title']),
// einfügen:
'PAGE_FILE' => ($results_array['page_file']),

//Hinweis: Die Sprachvariable sparen wir uns jetzt mal
/*


/templates/argos_theme/templates/pages_settings.htt
ca 63, nach*/
<tr>
<td width="100" height="20">{TEXT_MENU_TITLE}:</td>
<td width="240" height="20">
<input type="text" name="menu_title" value="{MENU_TITLE}" style="width: 232px;" />
</td>
</
tr>
//einfügen
<tr>
<td width="100" height="20">FileName:</td>
<td width="240" height="20">
<input type="text" name="page_file" value="{PAGE_FILE}" style="width: 232px;" />
</td>
</
tr>

/* =========================================================================
Schritt 4:
/admin/pages/settings2.php

ca 58: nach*/
$menu_title str_replace(array("[[""]]"), ''htmlspecialchars($admin->get_post_escaped('menu_title')));
//einfügen
$page_file page_filename($admin->get_post_escaped('page_file'));
if (
$page_file == '') {$page_file page_filename($menu_title);}

//Ab ca Zeile 157:
// Work-out what the link should be
//den ganzen Block bis ca 180 austauschen:

if($parent == '0')
{
// rename page_file: index && intro to prevent clashes with intro page feature and WB core file /pages/index.php
if($page_file == 'index' || $page_file == 'intro') { $page_file .= '_' .$page_id;}
$link '/'.$page_file;
$filename WB_PATH.PAGES_DIRECTORY.'/'.$page_file.PAGE_EXTENSION;

} else {

//Needs new function get_parent_pagefiles (old: get_parent_titles)
$parent_section '';
$parent_pagefiles array_reverse(get_parent_pagefiles($parent));
foreach($parent_pagefiles AS $parent_pagefile)
    {
$parent_section .= $parent_pagefile.'/';
}
if($parent_section == '/')
    {
      
$parent_section '';
    }
$link '/'.$parent_section.$page_file;
$filename WB_PATH.PAGES_DIRECTORY.'/'.$parent_section.$page_file.PAGE_EXTENSION;
}

/*
ca 203: nach*/
$sql .= '`menu_title` = "'.$menu_title.'", ';
//einfügen
$sql .= '`page_file` = "'.$page_file.'", ';


/* =========================================================================
Schritt 5:
/framework/functions.php
ab ca 514:
function get_parent_titles($parent_id)
und
function get_parent_ids($parent_id)

2 weitere functions einfügen:
*/

// Function to get a pages pagefile
function get_pagefile($id) {
// Connect to the database
$database = new database();
// Get page_file
$query $database->query("SELECT page_file FROM ".TABLE_PREFIX."pages WHERE page_id = '$id'");
$fetch $query->fetchRow();
// Return title
return $fetch['page_file'];
}

// Function to get all parent page pagefiles

function get_parent_pagefiles($parent_id) {
$pagefiles[] = get_pagefile($parent_id);
if(is_parent($parent_id) != false) {
$parent_pagefiles get_parent_pagefiles(is_parent($parent_id));
$pagefiles array_merge($pagefiles$parent_pagefiles);
}
return $pagefiles;
}



?>







[gelöscht durch Administrator]
« Last Edit: December 09, 2011, 04:28:11 PM by fischstäbchenbrenner »

Online dbs

  • Betatester
  • **
  • Posts: 7851
  • Gender: Male
  • tioz4ever
    • WebsiteBaker - jQuery-Plugins - Module - Droplets - Tests
Re: Anleitung: URL nicht von Menü-Titel abhängig
« Reply #1 on: December 09, 2011, 04:44:40 PM »
Ein Schnelltest in der 1528 verlief erfolgreich.

Wäre Filename beim Anlegen der Seite schon sinnvoll?

fischstäbchenbrenner

  • Guest
Re: Anleitung: URL nicht von Menü-Titel abhängig
« Reply #2 on: December 09, 2011, 04:49:50 PM »
Beim Anlegen der Seite wird einfach der Menütitel genommen, wie bisher.

Offline unawave2

  • Posts: 94
Re: Anleitung: URL nicht von Menü-Titel abhängig
« Reply #3 on: December 10, 2011, 04:35:29 PM »
Weil es mich oft nervt, dass bei Änderung eines (übergeordneten) Menütitels gleich mal ein Haufen Pfade nicht mehr gültig ist, füge ich meistens ein zusätzliches Feld ein, mit dem der FileName der Seite extra angegeben werden kann.

Was ist der Unterschied zu dieser Anleitung ?

fischstäbchenbrenner

  • Guest
Re: Anleitung: URL nicht von Menü-Titel abhängig
« Reply #4 on: December 11, 2011, 02:26:53 PM »
Naja: Der erste Unterschied: DEINE Anleitung kannte ich nicht (mehr) ;-)

Ich hab das jetzt nicht so genau durchgesehen, aber der wesentliche Unterschied scheint zu sein, dass hier die Ordnerstruktur beibehalten wird.

/pages/fname1.php
/pages/fname1/fname2.php
/pages/fname1/fname2/fname3.php

Unabhängig von den Menütiteln.

jacobi22

  • Guest
Re: Anleitung: URL nicht von Menü-Titel abhängig
« Reply #5 on: December 11, 2011, 03:21:46 PM »
ich habe mir ein Feld "seo-link" in der Tabelle pages erstellt. Das nutze ich mit dem Short-Urls Droplet von Ruud. Dieses Feld erscheint beim Anlegen einer seite sowie beim Ändern von Seiteneinstellungen . Beim Anlegen einer Seite ist "seo-link" gleich Page_Title, sofern ich nichts anderes eintrage. Um Sonderzeichen etc. nicht im seo_link zu haben, nutze ich die vorhandene Funktion page_filename()
Ruud nutzt in seinem Droplet die page_id und den Link, um daraus kurze URLs zu machen und bei mir wird statt link dann seo_link verwendet. Als Ergebnis kann ich mir Page- und Menütitel so gestalten, wie ich es brauch, bin unabhängig von irgendwelchen Dateinamen, Ordnerstrukturen usw. Der Link nach außen bleibt immer der Gleiche.

Online dbs

  • Betatester
  • **
  • Posts: 7851
  • Gender: Male
  • tioz4ever
    • WebsiteBaker - jQuery-Plugins - Module - Droplets - Tests
Re: Anleitung: URL nicht von Menü-Titel abhängig
« Reply #6 on: January 20, 2012, 10:39:53 PM »
Quote
Als Ergebnis kann ich mir Page- und Menütitel so gestalten, wie ich es brauch, bin unabhängig von irgendwelchen Dateinamen, Ordnerstrukturen usw. Der Link nach außen bleibt immer der Gleiche.

Da ich gern auch mal Strukturen ändere... kannst du dazu mal eine Anleitung geben?

jacobi22

  • Guest
Re: Anleitung: URL nicht von Menü-Titel abhängig
« Reply #7 on: January 21, 2012, 01:42:28 AM »
ich häng das hier mal als txt-Datei an. Bitte in HTML umbenennen

[gelöscht durch Administrator]

Online dbs

  • Betatester
  • **
  • Posts: 7851
  • Gender: Male
  • tioz4ever
    • WebsiteBaker - jQuery-Plugins - Module - Droplets - Tests
Re: Anleitung: URL nicht von Menü-Titel abhängig
« Reply #8 on: January 21, 2012, 07:02:40 AM »
Danke, hab es mal getestet.

Der führende Slash muss mit eingegeben werden? Er wird aber nicht gespeichert.
Sämtliche Menüpunkte ohne SEO_LINK zeigen/führen nur noch auf domain.de/

Aber das kann daran liegen, dass ich es für wb2.8.3 und mit Ruuds neueren codes in htaccess, short.php und droplet probiert/kombiniert habe.

Das Datenbankfeld sollte aber auf jeden Fall seo_link statt seolink heißen.
« Last Edit: January 21, 2012, 07:04:25 AM by dbs »

jacobi22

  • Guest
Re: Anleitung: URL nicht von Menü-Titel abhängig
« Reply #9 on: January 21, 2012, 10:22:56 AM »
Der führende Slash muss mit eingegeben werden? Er wird aber nicht gespeichert.
warum sollte der Slash mit eingegeben werden?  macht man doch beim Dateinamen auch nicht

Quote
Sämtliche Menüpunkte ohne SEO_LINK zeigen/führen nur noch auf domain.de/

ist richtig
da ich meine Installationen von Anfang an so aufbaue, haben ALLE Seiten diese zusätzlichen Einträge. Darum gibs da auch keine Probleme. Für ein Update müßte man ein Script laufen lassen, das diese Einträge automatisch einfügt, um keinen leeren Eintrag zu haben. Da es andere, komfortablere solcher Progis gibt (siehe oben im Beitrag), sah ich dafür keine Notwendigkeit.

Quote
Aber das kann daran liegen, dass ich es für wb2.8.3 und mit Ruuds neueren codes in htaccess, short.php und droplet probiert/kombiniert habe.
Was du alles hast  :wink:

Das Datenbankfeld sollte aber auf jeden Fall seo_link statt seolink heißen.
[/quote]
Nein, das Feld kann auch Hans Müller heißen, wenn man alles andere danach anpasst.

Offline Noel

  • Posts: 7
Re: Anleitung: URL nicht von Menü-Titel abhängig
« Reply #10 on: October 21, 2012, 06:12:22 PM »
Ich weiss nicht ob das für einen Googler wie mich von Interesse ist, der auch über dieses Thema gestolpert ist weil er nach einer Möglichkeit gesucht hat, Menü-Titel und Dateinamen zu entkoppeln...
Aber unter Version 2.8.3 SP1, Revision 1638 funktioniert diese Anleitung inklusive Upgrade-Script immer noch tadellos. Tausend Dank dafür!

Nachtrag:
Man könnte noch ergänzen, dass für einige Anwendungen (wie zB. ein Sprachwähler) eine Konstante PAGE_FILE nett wäre. Dies ist folgendermaßen zu realisieren:

Code: [Select]
<?php

// In der frontend/class.frontend.php ab ca. Zeile 148 nach

// Page Title
if(!defined('PAGE_TITLE')) {define('PAGE_TITLE'$this->page['page_title']);}
$this->page_title=PAGE_TITLE;

// diese neue Konstante einfügen:
// Page File
$page_file $this->page['page_file'];
if(
$page_file != '') {
   if(!
defined('PAGE_FILE')) {define('PAGE_FILE'$page_file);}
} else {
   
print_r('Error: PAGE_FILE not defined!')
}
?>


Damit kann man den Dateinamen ohne umständliches Herumgebastel einfach als Konstante abfragen, so wie PAGE_TITLE oder MENU_TITLE auch.
« Last Edit: October 21, 2012, 07:18:38 PM by Noel »

Offline Luisehahne

  • WebsiteBaker Org e.V.
  • **
  • Posts: 4332
  • Gender: Male
    • Webdesign und Entwicklung WebsiteBaker
Re: Anleitung: URL nicht von Menü-Titel abhängig
« Reply #11 on: October 30, 2012, 11:31:13 AM »
In der kommenden Version 2.8.4 hat sich das erledigt, ist Standard mit drin, Menutitel und Dateiname getrennt zu erfassen. Veröffentlichung ist für Anfang Dezember geplant.

Dietmar
Immer nur von der Zukunft reden, die Gegenwart vergessen und auf die Vergangenheit schimpfen
Neues Unwort: Schnappatmung

Offline Hans

  • Posts: 912
  • Gender: Male
Re: Anleitung: URL nicht von Menü-Titel abhängig
« Reply #12 on: October 30, 2012, 01:14:24 PM »
TOP!
Hans
Hans - Nijmegen - The Netherlands

 

postern-length