( jc – 23.11.2008 17:27)

Redaxo Modul “Weiterleit_O_mat”

Weiterleit_O_mat Eingabemaske
Weiterleit_O_mat Eingabemaske

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>

weiterleitomat_rexmodul.out.php:

<?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;
}
 
?>