( jc – 23.11.2008 17:27)
Redaxo Modul “Weiterleit_O_mat”
Modi
- Interne Weiterleitung über die Auswahl eines Redaxo Artikels per Linkmap-Fenster,
- Externe Weiterleitung über Eingabe einer externen URL
- Sprachwechsel auf selben Artikel in einer anderen Sprache
- Aus d.h. Deaktivierung der Weiterleitung ohne den Modul-Block löschen zu müßen
Settings
- Sprache bei mehrsprachiger Site
- Timeout
- 0 bzw. leeres Feld: sofortige, serverseitige Weiterleitung
- n Millisekunden: verzögerte Weiterleitung per Javascript
Hinweise
Ungültige Eingaben – z.b. interne Weiterleitung auf denselben Artikel in selber Sprache – werden abgefangen und eine Fehlermeldung ausgegeben. Der Modus Sprachwechsel ist lediglich eine Art Komfortvariante der internen Weiterleitung: Es wird automatisch auf den selben Artikel weitergeleitet ohne das man den internen Link auswählen müßte, d.h. man muß nur noch eine gewünschte Sprachversion wählen und gut.
Source
weiterleitomat_rexmodul.in.php:
<?php /** * Modulname: Weiterleit_O_mat * Modulteil: Eingabe * ModulID: 315 * ModulURL: http://redaxo.de/165-Moduldetails.html?module_id=315 * * @version 1.2 * @author rexdev.de * * @param REX_VALUE 1 = Externer Link * @param REX_VALUE 2 = Timeout * @param REX_VALUE 3 = Modus * @param REX_VALUE 4 = Sprache * * @param REX_LINK_ID 1 = Interner Link * * $Id: weiterleitomat_rexmodul.in.php 19 2011-09-06 11:11:19Z jeffe $: */ // ERROR_REPORTING //////////////////////////////////////////////////////////////////////////////// @ ini_set('error_reporting', E_ALL); @ ini_set('display_errors', On); // MEHRSPRACHIGKEIT UND AKTUELLE SPRACHE ERMITTELN //////////////////////////////////////////////////////////////////////////////// $langs = $REX['CLANG']; $lang = $REX['CUR_CLANG']; $langcount = count($langs); // ARRAY DER VERSCHIEDENEN MODI //////////////////////////////////////////////////////////////////////////////// $mode = array ( "" => "Aus", "intern" => "Interne Weiterleitung", "extern" => "Externe Weiterleitung" ); // BEI MEHRSPRACHIGKEIT SPRACHWECHSEL HINZUFÜGEN //////////////////////////////////////////////////////////////////////////////// if ($langcount > 1) { $mode["lang"] = "Sprachwechsel"; } // SPRACHWÄHLER BEI MEHRSPRACHIGKEIT //////////////////////////////////////////////////////////////////////////////// if ($langcount > 1) { $langchooser = ' - <strong>Sprache:</strong> <select id="sprache" name="VALUE[4]" >'; foreach ($langs as $langid => $langname) { $langchooser .= '<option value="'.$langid.'" '; if ($langid == "REX_VALUE[4]") { $langchooser .= 'selected="selected" '; } $langchooser .= '>'.$langname.'</option>'; } $langchooser .= '</select>'; } else { $langchooser = ''; } // ARTIKELNAMEN FÜR LINK-CHOOSER ERMITTELN //////////////////////////////////////////////////////////////////////////////// if(rex_request('function','string') != 'add') { $OOArt = OOArticle::getArticleById("REX_LINK_ID[1]", "REX_VALUE[4]"); $art_name = $OOArt->getName(); $id_input_width = strlen("REX_LINK_ID[1]")*9; } else { $art_name = ''; $id_input_width = 9; } // HTML OUT //////////////////////////////////////////////////////////////////////////////// ?> <!-- stylesheet--> <style type="text/css" media="screen"> <!-- /*ohne jqeury_ui*/ .nouitabs table { width:100%;} .nouitabs .jquitab { background:#B0BDC3;margin:10px 0 10px 0;padding: 4px 10px 10px 10px;-moz-border-radius:6px;} .nouitabs .jquitab h3 {color:#DFE9E9; font-size:16px;padding:0 0 0 0;margin:0 0 6px 0;font-weight:bold;border-bottom:1px solid #DFE9E9;} .nouitabs #tabs ul#tabs-list { display:none;} .nouitabs .helpblock {background:#F0DADA;padding:10px;margin:10px 0 10px 0;border:2px dotted #c3c3c3} .nouitabs a { color:red} .nouitabs td { white-space: nowrap} .nouitabs td.col1 { width:90px;white-space: nowrap} .nouitabs td { vertical-align:middle;padding:2px 1px 2px 3px;} .nouitabs div.link-chooser { width:380px;background:white;margin:0;line-height:20px;float:left;border:1px solid black;border-right:1px solid silver;border-bottom:1px solid silver;margin-right:4px;vertical-align:middle;} .nouitabs div.link-chooser img { vertical-align:middle;} .nouitabs div.link-chooser input { border:0;margin-left:4px;} .nouitabs div.link-chooser span#link-1-id {margin-left:4px;color:gray;} .nouitabs div.link-chooser input#LINK_1 { border:0;margin:0;padding:0;text-align:center;color:gray;} .nouitabs div.link-chooser input#LINK_1_NAME { width:310px;} .nouitabs input{ border:1px solid black;border-right:1px solid silver;border-bottom:1px solid silver;margin:0;height:20px;} --> </style> <!-- /stylesheet--> <div class="nouitabs"> <!-- /MODUS TAB --> <div id="tabs-1" class="jquitab"> <h3>Weiterleitung</h3> <table class="option-table"> <tr> <td class="col1"> <strong>Modus:</strong> </td> <td colspane="3"> <select id="modus" name="VALUE[3]" > <?php foreach ($mode as $key => $plaintext) { echo '<option value="'.$key.'" '; if ("REX_VALUE[3]"=="$key") { echo 'selected="selected" '; } echo '>'.$plaintext.'</option>'; } ?> </select> </td> </tr> <tr> <td class="col1"> <strong>Artikel:</strong> </td> <td colspane="3"> <div class="link-chooser"> <span id="link-1-id">[<input type="text" name="LINK[1]" style="width:<?php echo $id_input_width; ?>px;" id="LINK_1" value="<?php echo "REX_LINK_ID[1]"; ?>" readonly="readonly" />]</span> <input type="text" name="LINK_NAME[1]" value="<?php echo $art_name; ?>" id="LINK_1_NAME" readonly="readonly" /> <a href="#" onclick="openLinkMap('LINK_1', '&clang=0&category_id=0');return false;" tabindex="28"><img src="media/file_open.gif" width="16" height="16" alt="Open Linkmap" title="Open Linkmap" /></a> <a href="#" onclick="deleteREXLink(1);return false;" tabindex="29"><img src="media/file_del.gif" width="16" height="16" title="Remove Selection" alt="Remove Selection" /></a> </div> <?php echo $langchooser; ?> </td> </tr> <tr> <td> <strong>Externe URL:</strong> </td> <td colspane="3"> <input type="text" size="60" id="extern" name="VALUE[1]" value="<?php echo "REX_VALUE[1]"; ?>"> </td> </tr> <tr> <td> <strong>Timeout:</strong> </td> <td colspane="3"> <input type="text" size="5" id="timeout" name="VALUE[2]" value="<?php echo "REX_VALUE[2]"; ?>" style="text-align:center"> Millisekunden </td> </tr> </table> </div> <!-- /MODUS TAB --> </div>
<?php /** * Modulname: Weiterleit_O_mat * Modulteil: Ausgabe * ModulID: 315 * ModulURL: http://redaxo.de/165-Moduldetails.html?module_id=315 * * @version 1.2 * @author rexdev.de * * @param REX_VALUE 1 = Externer Link * @param REX_VALUE 2 = Timeout * @param REX_VALUE 3 = Modus * @param REX_VALUE 4 = Sprache * * @param REX_LINK_ID 1 = Interner Link * * $Id: weiterleitomat_rexmodul.out.php 18 2010-12-30 07:14:53Z jeffe $: */ // ERROR_REPORTING //////////////////////////////////////////////////////////////////////////////// @ ini_set('error_reporting', E_ALL); @ ini_set('display_errors', Off); // MEHRSPRACHIGKEIT UND AKTUELLE SPRACHE ERMITTELN //////////////////////////////////////////////////////////////////////////////// $ALLclangs = $REX['CLANG']; $THISclang = $REX['CUR_CLANG']; $langcount = count($ALLclangs); $backend = $REX["REDAXO"]; // REDAXO VALUES ZUWEISEN //////////////////////////////////////////////////////////////////////////////// $mode = "REX_VALUE[3]"; $switchlang = "REX_VALUE[4]"; $timeout = "REX_VALUE[2]"; $extURL = "REX_VALUE[1]"; $intURLid = "REX_LINK_ID[1]"; $URL = ''; // FUNKTIONEN //////////////////////////////////////////////////////////////////////////////// if (!function_exists('headerredirect')) { function headerredirect($backend, $URL) { if (!$backend) { echo '<a href="'.$URL.'">'.$URL.'</a>'; ob_end_clean(); header("Location: http://".$_SERVER['HTTP_HOST'].$URL); exit; } } } if (!function_exists('timedredirect')) { function timedredirect($backend, $URL, $timeout) { if (!$backend) { //echo 'JS REDIRECT:'.$URL; echo '<script language="javascript"> <!-- window.setTimeout("weiterleiten()",'.$timeout.'); function weiterleiten() { self.location.href="'.$URL.'"; } // --> </script> <noscript> <h3> Javascript deaktiviert.</h3> <p>Bitte benutzen Sie den <a href="'.$URL.'">manuellen link</a>.</p> </noscript> '; } } } if (!function_exists('backendmessage')) { function backendmessage($backend, $msg) { if ($backend) // Wir sind im backend { echo '<p>'.$msg.'</p>'; } } } // MODI DURCHLAUFEN //////////////////////////////////////////////////////////////////////////////// switch($mode) { case '': $msg = '<strong>Weiterleitung deaktiviert. </strong>'; backendmessage($backend, $msg); break; case 'extern': $URL = $extURL; $msg = '<strong>Externe Weiterleitung: </strong>'; if ($timeout == 0 || $timeout == '') { // sofort $msg .= ' sofortige Weiterleitung (serverseitig) -> <a href="'.$URL.' target="blank">'.$URL.'</a>'; headerredirect($backend, $URL); backendmessage($backend, $msg); } else { // timeout $msg .= ' Timeout: '.$timeout.' Millisekunden (javascript, clientseitig) -> <a href="'.$URL.' target="blank">'.$URL.'</a>'; timedredirect($backend, $URL, $timeout); backendmessage($backend, $msg); } break; case 'intern': $msg = '<strong>Interne Weiterleitung: </strong>'; if ($intURLid == REX_ARTICLE_ID && ($THISclang == $switchlang || $langcount < 2)) // loop -> keine Weiterleitung { $timeout = ''; $msg = '<strong style="color:red">FEHLER: </strong>Artikel leitet auf sich selbst weiter! <span style="color:red">Weiterleitung deaktiviert</span>.'; backendmessage($backend, $msg); } else { if ($langcount > 1) { $URL = rex_getUrl($intURLid,$switchlang); // $URL = 'index.php?article_id='.$intURLid.'&clang='.$switchlang; } else { $URL = rex_getUrl($intURLid); // $URL = 'index.php?article_id='.$intURLid.'&clang=0'; } if ($timeout == 0 || $timeout == '') { // sofort $msg .= ' sofortige Weiterleitung (serverseitig) -> <a href="'.$URL.' target="blank">'.$URL.'</a>'; headerredirect($backend, $URL); backendmessage($backend, $msg); } else { // timeout $msg .= ' Timeout: '.$timeout.' Millisekunden (javascript, clientseitig) -> <a href="'.$URL.' target="blank">'.$URL.'</a>'; timedredirect($backend, $URL, $timeout); backendmessage($backend, $msg); } } break; case 'lang': $msg = '<strong>Sprachwechsel: </strong>'; if ($langcount > 1) // mehrsprachig { if ($THISclang == $switchlang) // loop -> keine Weiterleitung { $timeout = ''; $msg = '<strong style="color:red">FEHLER: </strong>Sprachversion des Artikels und der Weiterleitung identisch! ('.$ALLclangs[$THISclang].' - '.$ALLclangs[$switchlang].') <span style="color:red">Weiterleitung deaktiviert</span>.'; backendmessage($backend, $msg); } else // andere Sprache -> weiter { $URL = rex_getUrl(REX_ARTICLE_ID,$switchlang); // $URL = 'index.php?article_id=REX_ARTICLE_ID&clang='.$switchlang; if ($timeout == 0 || $timeout == '') { // sofort $msg .= ' sofortige Weiterleitung (serverseitig) -> <a href="'.$URL.' target="blank">'.$URL.'</a>'; headerredirect($backend, $URL); backendmessage($backend, $msg); } else { // timeout $msg .= ' Timeout: '.$timeout.' Millisekunden (javascript, clientseitig) -> <a href="'.$URL.' target="blank">'.$URL.'</a>'; timedredirect($backend, $URL, $timeout); backendmessage($backend, $msg); } } } else // einsprachig -> keine Weiterleitung { $msg = '<strong style="color:red">FEHLER: </strong>Einsprachige Website, kein Sprachwechsel möglich.'; backendmessage($backend, $msg); } break; } ?>