Anzeige:

Lange Links kürzer und große Bilder kleiner darstellen

Hier finden sie die archivierten Beiträge des alten PHPBB Forums von www.loetstelle.net

Lange Links kürzer und große Bilder kleiner darstellen

Von kalledom am 18.06.2008 20:06

Hallo,

immer wieder werden super-lange Links in Beiträgen eingesetzt, so daß zum Lesen das Bild Zeile für Zeile mit der horizintalen Bildlaufleiste hin und her geschoben werden muß. Es geht auch anders, was jedoch ein klein wenig Mühe kostet.

Können lange Links nicht automatisch gekürzt oder umgewandelt werden, so daß die normale Breite der Beiträge erhalten bleibt ?

Gleiches gilt für große Bilder, die hochgeladen oder extern abgelegt werden.
Ist es möglich, Bilder ab einer bestimmten Größe / Pixelbreite als kleines Vorschaubild darzustellen, welches dann zum Vergrößern angeklickt werden kann ?

Bei einigen durch lange Links oder riesige Bilder besonders breit dargestellten Beiträgen gebe ich mir immer weniger Mühe, dort noch etwas zu lesen oder zu beantworten.

Re: Lange Links kürzer und große Bilder kleiner darstellen

Von gerold am 18.06.2008 20:15

kalledom hat folgendes geschrieben:
Können lange Links nicht automatisch gekürzt oder umgewandelt werden, so daß die normale Breite der Beiträge erhalten bleibt ?

Hallo kalledom!

Ich kenne die Forensoftware vom Python-Forum. Diese Forensoftware hat standardmäßig nichts dabei um lange URLs automatisch zu kürzen. Aber ich glaube, etwas von einem Hack gelesen zu haben, der das macht. Es ist natürlich ein Aufwand, diesen Hack einzubauen, da jeder Hack beim Update der Forensoftware wieder neu eingebaut werden muss.

Mehr weiß ich im Moment auch nicht darüber.

lg
Gerold
Smile

Von loetadmin am 19.06.2008 09:33

Ich habe die Stelle im Quelltext gefunden, die für die Umwandlung in Links zuständig ist:


Code:

/**
 * Rewritten by Nathan Codding - Feb 6, 2001.
 * - Goes through the given string, and replaces xxxx://yyyy with an HTML <a> tag linking
 *    to that URL
 * - Goes through the given string, and replaces www.xxxx.yyyy[zzzz] with an HTML <a> tag linking
 *    to http://www.xxxx.yyyy[/zzzz]
 * - Goes through the given string, and replaces xxxx@yyyy with an HTML mailto: tag linking
 *      to that email address
 * - Only matches these 2 patterns either after a space, or at the beginning of a line
 *
 * Notes: the email one might get annoying - it's easy to make it more restrictive, though.. maybe
 * have it require something like xxxx@yyyy.zzzz or such. We'll see.
 */
function make_clickable($text)
{

   // pad it with a space so we can match things at the start of the 1st line.
   $ret = ' ' . $text;

   // matches an "xxxx://yyyy" URL at the start of a line, or after a space.
   // xxxx can only be alpha characters.
   // yyyy is anything up to the first space, newline, comma, double quote or <
   $ret = preg_replace("#(^|[\n ])([\w]+?://[^ \"\n\r\t<]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $ret);

   // matches a "www|ftp.xxxx.yyyy[/zzzz]" kinda lazy URL thing
   // Must contain at least 2 dots. xxxx contains either alphanum, or "-"
   // zzzz is optional.. will contain everything up to the first space, newline,
   // comma, double quote or <.
   $ret = preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r<]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret);

   // matches an email@domain type address at the start of a line, or after a space.
   // Note: Only the followed chars are valid; alphanums, "-", "_" and or ".".
   $ret = preg_replace("#(^|[\n ])([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $ret);

   // Remove our padding..
   $ret = substr($ret, 1);

   return($ret);
}


Leider reichen meine Kenntnisse über reguläre Expressions nicht aus, um das so umzuformulieren, dass der Linktext verkürzt dargestellt wird. Vielleicht kann ja ein Forumsbenutzer hier weiterhelfen.

Alternativ sollte die Möglichkeit mit dem URL-TAG funktionieren

[url=hier kommt der original Link hin]hier kommt die Bezeichnung für den Link hin[/url]

Sieht dann so aus:

KurzLink

mfg
MV

Von kalledom am 19.06.2008 10:13

loetadmin hat folgendes geschrieben:
Alternativ sollte die Möglichkeit mit dem URL-TAG funktionieren

[url=hier kommt der original Link hin]hier kommt die Bezeichnung für den Link hin[/url]

Sieht dann so aus:

KurzLink

Ich unterstreiche den KurzLink zusätzlich, da man kurze Links nicht besonders gut erkennt:
[ url=hier kommt der Original Link hin ] [ u ]hier kommt die Bezeichnung für den Link hin[ /u ] [ /url ] (ohne Leerzeichen in den eckigen Klammern)

Sieht dann so aus: KurzLink

Von gerold am 19.06.2008 10:31

loetadmin hat folgendes geschrieben:
Ich habe die Stelle im Quelltext gefunden, die für die Umwandlung in Links zuständig ist

Hallo loetadmin!

Das ist leider nicht so einfach machbar.

Ich habe hier die Codestelle aus PHPBB3 raus gesucht, die das Gleiche macht:
Code:
/**
* A subroutine of make_clickable used with preg_replace
* It places correct HTML around an url, shortens the displayed text
* and makes sure no entities are inside URLs
*/
function make_clickable_callback($type, $whitespace, $url, $relative_url, $class)
{
   $orig_url      = $url . $relative_url;
   $append         = '';
   $url         = htmlspecialchars_decode($url);
   $relative_url   = htmlspecialchars_decode($relative_url);

   // make sure no HTML entities were matched
   $chars = array('<', '>', '"');
   $split = false;

   foreach ($chars as $char)
   {
      $next_split = strpos($url, $char);
      if ($next_split !== false)
      {
         $split = ($split !== false) ? min($split, $next_split) : $next_split;
      }
   }

   if ($split !== false)
   {
      // an HTML entity was found, so the URL has to end before it
      $append         = substr($url, $split) . $relative_url;
      $url         = substr($url, 0, $split);
      $relative_url   = '';
   }
   else if ($relative_url)
   {
      // same for $relative_url
      $split = false;
      foreach ($chars as $char)
      {
         $next_split = strpos($relative_url, $char);
         if ($next_split !== false)
         {
            $split = ($split !== false) ? min($split, $next_split) : $next_split;
         }
      }

      if ($split !== false)
      {
         $append         = substr($relative_url, $split);
         $relative_url   = substr($relative_url, 0, $split);
      }
   }

   // if the last character of the url is a punctuation mark, exclude it from the url
   $last_char = ($relative_url) ? $relative_url[strlen($relative_url) - 1] : $url[strlen($url) - 1];

   switch ($last_char)
   {
      case '.':
      case '?':
      case '!':
      case ':':
      case ',':
         $append = $last_char;
         if ($relative_url)
         {
            $relative_url = substr($relative_url, 0, -1);
         }
         else
         {
            $url = substr($url, 0, -1);
         }
      break;
   }

   $short_url = (strlen($url) > 55) ? substr($url, 0, 39) . ' ... ' . substr($url, -10) : $url;

   switch ($type)
   {
      case MAGIC_URL_LOCAL:
         $tag         = 'l';
         $relative_url   = preg_replace('/[&?]sid=[0-9a-f]{32}$/', '', preg_replace('/([&?])sid=[0-9a-f]{32}&/', '$1', $relative_url));
         $url         = $url . '/' . $relative_url;
         $text         = $relative_url;
         
         // this url goes to http://domain.tld/path/to/board/ which
         // would result in an empty link if treated as local so
         // don't touch it and let MAGIC_URL_FULL take care of it.
         if (!$relative_url)
         {
            return $orig_url . '/'; // slash is taken away by relative url pattern
         }
      break;

      case MAGIC_URL_FULL:
         $tag   = 'm';
         $text   = $short_url;
      break;

      case MAGIC_URL_WWW:
         $tag   = 'w';
         $url   = 'http://' . $url;
         $text   = $short_url;
      break;

      case MAGIC_URL_EMAIL:
         $tag   = 'e';
         $text   = $short_url;
         $url   = 'mailto:' . $url;
      break;
   }

   $url   = htmlspecialchars($url);
   $text   = htmlspecialchars($text);
   $append   = htmlspecialchars($append);

   $html   = "$whitespace<!-- $tag --><a$class href=\"$url\">$text</a><!-- $tag -->$append";

   return $html;
}

/**
* make_clickable function
*
* Replace magic urls of form http://xxx.xxx., www.xxx. and xxx@xxx.xxx.
* Cuts down displayed size of link if over 50 chars, turns absolute links
* into relative versions when the server/script path matches the link
*/
function make_clickable($text, $server_url = false, $class = 'postlink')
{
   if ($server_url === false)
   {
      $server_url = generate_board_url();
   }

   static $magic_url_match;
   static $magic_url_replace;
   static $static_class;

   if (!is_array($magic_url_match) || $static_class != $class)
   {
      $static_class = $class;
      $class = ($static_class) ? ' class="' . $static_class . '"' : '';
      $local_class = ($static_class) ? ' class="' . $static_class . '-local"' : '';

      $magic_url_match = $magic_url_replace = array();
      // Be sure to not let the matches cross over. ;)

      // relative urls for this board
      $magic_url_match[] = '#(^|[\n\t (>.])(' . preg_quote($server_url, '#') . ')/(' . get_preg_expression('relative_url_inline') . ')#ie';
      $magic_url_replace[] = "make_clickable_callback(MAGIC_URL_LOCAL, '\$1', '\$2', '\$3', '$local_class')";

      // matches a xxxx://aaaaa.bbb.cccc. ...
      $magic_url_match[] = '#(^|[\n\t (>.])(' . get_preg_expression('url_inline') . ')#ie';
      $magic_url_replace[] = "make_clickable_callback(MAGIC_URL_FULL, '\$1', '\$2', '', '$class')";

      // matches a "www.xxxx.yyyy[/zzzz]" kinda lazy URL thing
      $magic_url_match[] = '#(^|[\n\t (>])(' . get_preg_expression('www_url_inline') . ')#ie';
      $magic_url_replace[] = "make_clickable_callback(MAGIC_URL_WWW, '\$1', '\$2', '', '$class')";

      // matches an email@domain type address at the start of a line, or after a space or after what might be a BBCode.
      $magic_url_match[] = '/(^|[\n\t (>])(' . get_preg_expression('email') . ')/ie';
      $magic_url_replace[] = "make_clickable_callback(MAGIC_URL_EMAIL, '\$1', '\$2', '', '')";
   }

   return preg_replace($magic_url_match, $magic_url_replace, $text);
}

Wie man sieht, ist das gar nicht mal so unkompliziert. Ich kann PHP leider nicht.

mfg
Gerold
Smile

Von gerold am 19.06.2008 10:38

kalledom hat folgendes geschrieben:
Ich unterstreiche den KurzLink zusätzlich, da man kurze Links nicht besonders gut erkennt

Hallo!

Zumindest diese Zusatzarbeit könnte man umgehen, indem man eine Kleinigkeit im CSS-File ändert. Was der Lesbarkeit wirklich sehr zuträglich wäre.

Dieses Thema hatte ich bereits in einem anderen Forum aufgegriffen. Dort wurde aber inzwischen die Forensoftware getauscht. So dass das Problem dort nicht mehr existiert. Dort steht auch, wie man den Style ändern müsste: http://transistornet.de/viewtopic.php?f=5&t=6184

mfg
Gerold
Smile

Von kalledom am 19.06.2008 12:06

@gerold
ich kann bei CSS, PHP und was es sonst noch so gibt leider nicht helfen.
Meine Internetseiten sind ausnahmslos von mir mit einem ASCII-Text-Editor (UltraEdit) in HTML erstellt. Da kann man mit dem ältesten Browser noch alles sehen Wink

Von loetadmin am 19.06.2008 15:35

Das neue Codefragment funktioniert nicht, habs grad ausprobiert. Es ruft noch andere PHPBB3-Funktionen auf.

Naja, wieder ein Grund mehr, auf PHPBB3 aufzurüsten...

Von pcprofi am 19.06.2008 15:46

PHPbb3 soll angeblich wohl auch für Moderatoren einfacher zu bedienen sein???

Ich hab aber keine ahnung...

Gruß Rainer

Von gerold am 19.06.2008 17:44

Hallo loetadmin!

loetadmin hat folgendes geschrieben:
Das neue Codefragment funktioniert nicht, habs grad ausprobiert. Es ruft noch andere PHPBB3-Funktionen auf.

Das war klar. Man müsste einiges an diesen Funktionen ändern, damit sie im PhpBB2 funktionieren. Zumindest zeigen sie auf, dass man nicht einfach nur die Regular Expressions ändern muss.

loetadmin hat folgendes geschrieben:
Naja, wieder ein Grund mehr, auf PHPBB3 aufzurüsten...

Der einzige Grund der von meiner Seite aus dagegen spricht: Es sieht s c h e i ß e aus, ist im Gesamten nicht mehr so übersichtlich und aus Benutzersicht nicht mehr so einfach bedienbar wie das PhpBB2. Ich sehe das an http://transistornet.de/. Die Buttons zum Bedienen sind überall -- aber nicht da wo man sie als Benutzer erwartet. Auch dieses ständige aufblinken der ganzen Zeile, wenn man mit der Maus über ein Forum oder eine Thema fährt, macht mich narrisch. Vielleicht sollte man noch ein paar phpBB3-Versionen abwarten. Wink

lg
Gerold
Smile

Anzeige: