DokuWiki

It's better when it's simple

User Tools

Site Tools


plugin:goto:old_discussion

Discussion

Right now this plugin can only redirect to internal wiki pages. I'd like it to be able to redirect to external pages, but I'm a little hazy on how DokuWiki processes URLs. Any help is appreciated. — Allen Ormond 2006-06-30 22:35

I don't see the point of a page with a ~~GOTO~~ and then some additional content. I'd suggest that if a page contains only an internal link, make an HTTP-header (HTTP 301 response code) redirection and then show a “Redirected from …” in the destination page. I'm not that convinced on the subject of automatic external redirection. — Antonio Bueno 2006-07-28 13:25

I agree, that does sound nice. However, there are a couple reasons I didn't use an http header redirection. As far as I know, it's impossible to make a simple syntax plugin to do it (or at least it's beyond my abilities). Also, if the page redirects without being seen, it would become difficult for a user to remove the redirect. Of course, I'd love to see a more elegant solution, but this is working for me for now. ^_^Allen Ormond 2006-07-29 01:16
How about a parameter that disables the redirect, e.g. redirect=no?
I set min and default to 0, and use the ?do=edit to stop the redirect. Granted that's not going to work for all users..

Sorry, but this Plugin is a Crap. Why did you not use the all Wiki Standardcode like :

#redirect Articlename

??

The code you use is to complex and nobody can remember this.

You're welcome to do better.
If there actually existed something like an “all Wiki Standardcode”, we would all be happy to implement and use it. But there is no such thing!
Ever head of Wiki Creole? –Fabian
You have to now “#redirect” in the same way like you have to now “~~GOTO~~”.
Use “\inc\lang\en\edit.txt” to advice the users if necessary.
The only thing is, that such a basic function should by part of the basecode.

$seconds and $minSeconds could by inserted in to the admin-configuration.


Note that the download links (to yeahway.com) are broken as of 2013-07-11. I'm not touching them as I don't know what policy is.


Why not allow to redirect to external sites?

Specifying an URL like http://www.example.com/path/ doesn't do what expected. Is it a bug or a feature? — jnojno

2011/07/08 12:27

Why not using HTTP redirects?

If you add

ob_start();
ob_implicit_flush(FALSE);

to doku.php it would be possible to do HTTP redirects by using header('Location: …'); , which would have some advantages:

  1. No need to enable JavaScript
  2. No extra clicks for visitors, if they disabled JavaScript

The issue “editing a page may be tricky” is not right - you can always enter “pagename?do=edit” manually in the browser - so what's the point?

User stupidity

Simple - You can't rely on the fact that all users will be able to know how to use the address bar correctly. If you can't access it through visual scanning and mouse clicks, assume 80% of the population will be unable to utilize the feature.

Languages

Change

$message = "<strong>You will be redirected to %d in approximately %s seconds.</strong>";

to 

$message = "<strong>".$this->getLang('redirect')."</strong>"; 

and

Input this in the Path “lang”

en
<?php
/*
English language file
 
%d will be replaced with a link to the destination.
%s will be replaced with the number of seconds before redirect.
 */
$lang['redirect']="You will be redirected to %d in approximately %s seconds.";
//Setup VIM: ex: et ts=2 enc=utf-8 :
?>
de
<?php
/*
German language file
 
%d will be replaced with a link to the destination.
%s will be replaced with the number of seconds before redirect.
 */
$lang['redirect']="Diese Seite wird in ungef&auml;hr %s Sekunden umgeleitet zu: %d";
//Setup VIM: ex: et ts=2 enc=utf-8 :
?>
fr
<?php
/*
french language file
 
%d will be replaced with a link to the destination.
%s will be replaced with the number of seconds before redirect.
 */
$lang['redirect']="Vous allez être redirigé vers la page %d dans approximativement %s secondes";
//Setup VIM: ex: et ts=2 enc=utf-8 :
?>
es
<?php
/*
Spanish language file
 
%d will be replaced with a link to the destination.
%s will be replaced with the number of seconds before redirect.
 */
$lang['redirect']="Serás redireccionado a la pagina %d en %s segundos aprox.";
//Setup VIM: ex: et ts=2 enc=utf-8 :
?>

Great

Great, this plugin made my day. Only issue is that I cannot remember the syntax, #REDIRECT would have been better.

Support for Anchors

The # character is replaced by %23 in the URL, so I've made the following modification to the render function. This allows the plugin to redirect to a particular section of a page.

function render($format, &$renderer, $data) {
	$message = str_replace("%d",$renderer->internallink($data[0], $data[0],'', true),$data[2]);
	$message = str_replace("%s",$data[1],$message);
	$renderer->doc .= $message;
	$urlArr = split('#', $data[0], 2);
	$url = wl($urlArr[0]);
	if (count($urlArr) > 1) {
		$url .= '#'.$urlArr[1];
	}
	$renderer->doc .= '<script>url="'.$url.'";setTimeout("location.href=url",'.($data[1]*1000).');</script>';
}

Support for external pages

Minor modifications which allow:

  1. external pages to be referenced.
  2. doesn't output the javacode when looking at page preview.
--- ./syntax.php      2006-07-19 14:33:18.000000000 -0400
+++ ./syntax.php        2010-09-27 14:19:29.000000000 -0400
@@ -48,18 +48,29 @@
                                $matches = explode("?", substr($match,7,-2));
                                if (is_numeric($matches[1])){ $seconds = $matches[1]; }
                                if ($seconds < $minSeconds){ $seconds = $minSeconds; }//Check that seconds is greater than $minSeconds.
-                               resolve_pageid(getNS($ID), $matches[0], $exists);
+                               if (substr($matches[0],0,7) == "http://")
+                                       resolve_pageid(getNS($ID), $matches[0], $exists);
                                $message = str_replace("%D","%d",$message);//Make %d case insensitive.
                                $message = str_replace("%S","%s",$message);//Make %s case insensitive.
                                return array($matches[0], $seconds, $message);
                        }

                        function render($format, &$renderer, $data) {
-                               $message = str_replace("%d",$renderer->internallink($data[0], $data[0],'', true),$data[2]);
-                               $message = str_replace("%s",$data[1],$message);
-                               $renderer->doc .= $message;
-                               $renderer->doc .= '<script>url="'.wl($data[0]).'";setTimeout("location.href=url",'.($data[1]*1000).');</script>';
+                                global $ACT;
+                               if (substr($data[0],0,7) == "http://") {
+                                       $message = str_replace("%d",$renderer->internallink($data[0], $data[0],'', true),$data[2]);
+                                       $message = str_replace("%s",$data[1],$message);
+                                       $renderer->doc .= $message;
+                                       if ($ACT != 'preview')
+                                               $renderer->doc .= '<script>url="'.wl($data[0]).'";setTimeout("location.href=url",'.($data[1]*1000).');</script>';
+                               } else {
+                                       $message = str_replace("%d", "<a href=\"".$data[0]."\">".$data[0]."</a>",$data[2]);
+                                       $message = str_replace("%s", $data[1],$message);
+                                       $renderer->doc .= $message;
+                                       if ($ACT != 'preview')
+                                               $renderer->doc .= '<script>url="'.$data[0].'";setTimeout("location.href=url",'.($data[1]*1000).');</script>';
+                               }
                        }

                }
plugin/goto/old_discussion.txt · Last modified: 2019-03-16 00:48 by turnermm