MyBB.de Forum

Normale Version: Bilder mit [img]-Tag nur für registrierte User sichtbar machen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo ihr ^^
Ich möchte gerne den img-Tag so modifizieren, dass er die Bilder, die damit eingebettet werden, nur für registrierte User anzeigt.
Der Gedanke dahinter ist, dass ich alle Bilder, die in öffentlich zugänglichen Bereichen zu finden sind, nicht für Gäste angezeigt werden.

Nach ausführlicher Suche bin ich auf den Thread von 2007 gestoßen, indem aber gesagt wird, dass das nicht möglich wäre. - Wirklich?

Meine Überlegungen dazu wären folgende:
Ich würde an der class_parser.php schrauben und dort für die Definition des img-Tag die Bedingung einbauen, dass man registriert sein muss. Da man mich mit Programmierung aber echt jagen kann, bräuchte ich an dieser Stelle Hilfe.

PHP-Code:
    /**
     * Parses IMG MyCode.
     *
     * @param string The URL to the image
     * @param array Optional array of dimensions
     */
    
function mycode_parse_img($url$dimensions=array(), $align='')
    {
        global 
$lang;
        
$url trim($url);
        
$url str_replace("\n"""$url);
        
$url str_replace("\r"""$url);
        if(
$align == "right")
        {
            
$css_align " style=\"float: right;\"";
        }
        else if(
$align == "left")
        {
            
$css_align " style=\"float: left;\"";
        }
        
$alt htmlspecialchars_uni(basename($url));
        if(
my_strlen($alt) > 55)
        {
            
$alt my_substr($alt040)."...".my_substr($alt, -10);
        }
        
$alt $lang->sprintf($lang->posted_image$alt);
        if(
$dimensions[0] > && $dimensions[1] > 0)
        {
            return 
"<img src=\"{$url}\" width=\"{$dimensions[0]}\" height=\"{$dimensions[1]}\" border=\"0\" alt=\"{$alt}\"{$css_align} />";
        }
        else
        {
            return 
"<img src=\"{$url}\" border=\"0\" alt=\"{$alt}\"{$css_align} />";            
        }
    } 
Das wäre der Teil, wo ich ansetzen würde, wobei das natürlich auch total falsch sein kann xD

Jemand eine Idee?

Vielen lieben Dank im Voraus!
Glücksklee <3
Nicht besonders schön, aber es sollte funktionieren:

Suche in der class-parser.php folgende Zeilen
PHP-Code:
function parse_mycode($message$options=array())
{
    global 
$lang
und ersetze es mit
PHP-Code:
function parse_mycode($message$options=array())
{
    global 
$lang$mybb
und ersetze innerhalb dieser Funktion
PHP-Code:
if($options['allow_imgcode'] != 0
durch
PHP-Code:
if($options['allow_imgcode'] != && $mybb->user['uid'] != 0
Funktioniert. - DANKE!
Und im ersten Moment habe ich mich gefragt, was du mit "nicht besonders schön" meinst, aber dann wusste ich es *grins*

Meinst du, dass man einfach das Bild samt Tag ausblenden kann? Also dass einfach nichts erscheint, also auch kein Text?

@MrBrechreiz: Danke! Und ich hab wirklich gesucht -.- manchmal glaube ich, dass ich Buchstaben vor lauter offener Tabs nicht mehr sehen kann. Ich probier das mal aus. Thanks <3

Edit²: Wobei ich eigentlich keine Message anstelle dessen will. Es soll einfach ausgeblendet werden. "Mehr nicht."
Du könntest neben den o.a. Codeanpassungen noch folgendes durchführen.

Ersetze die Zeilen
PHP-Code:
        // Convert images when allowed.
        
if($options['allow_imgcode'] != && $mybb->user['uid'] != 0)
        {
            
$message preg_replace_callback("#\[img\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#is", array($this'mycode_parse_img_callback1'), $message);
            
$message preg_replace_callback("#\[img=([0-9]{1,3})x([0-9]{1,3})\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#is", array($this'mycode_parse_img_callback2'), $message);
            
$message preg_replace_callback("#\[img align=([a-z]+)\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#is", array($this'mycode_parse_img_callback3'), $message);
            
$message preg_replace_callback("#\[img=([0-9]{1,3})x([0-9]{1,3}) align=([a-z]+)\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#is", array($this'mycode_parse_img_callback4'), $message);
        } 
durch
PHP-Code:
        // Convert images when allowed.
        
if($options['allow_imgcode'] != && $mybb->user['uid'] != 0)
        {
            
$message preg_replace_callback("#\[img\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#is", array($this'mycode_parse_img_callback1'), $message);
            
$message preg_replace_callback("#\[img=([0-9]{1,3})x([0-9]{1,3})\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#is", array($this'mycode_parse_img_callback2'), $message);
            
$message preg_replace_callback("#\[img align=([a-z]+)\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#is", array($this'mycode_parse_img_callback3'), $message);
            
$message preg_replace_callback("#\[img=([0-9]{1,3})x([0-9]{1,3}) align=([a-z]+)\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#is", array($this'mycode_parse_img_callback4'), $message);
        }
    else
    {
            
$message preg_replace_callback("#\[img\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#is", array($this'mycode_parse_img_callback5'), $message);
            
$message preg_replace_callback("#\[img=([0-9]{1,3})x([0-9]{1,3})\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#is", array($this'mycode_parse_img_callback5'), $message);
            
$message preg_replace_callback("#\[img align=([a-z]+)\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#is", array($this'mycode_parse_img_callback5'), $message);
            
$message preg_replace_callback("#\[img=([0-9]{1,3})x([0-9]{1,3}) align=([a-z]+)\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#is", array($this'mycode_parse_img_callback5'), $message);    
    } 

Dann suche die Zeilen
PHP-Code:
function mycode_parse_img_callback4($matches)
{
    return 
$this->mycode_parse_img($matches[5], array($matches[1], $matches[2]), $matches[3]);

und setze danach folgenden Code ein
PHP-Code:
/**
 * Parses IMG MyCode.
 *
 * @param array Matches.
 * @return string Image code.
 */    
 
function mycode_parse_img_callback5($matches)
{
    return 
$this->mycode_parse_img("")."\n";

Bei mir sieht der Teil etwas anders aus.
PHP-Code:
// Convert images when allowed.
        
if($options['allow_imgcode'] != && $mybb->user['uid'] != 0)
        {
            
$message preg_replace("#\[img\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#ise""\$this->mycode_parse_img('$2')\n"$message);
            
$message preg_replace("#\[img=([0-9]{1,3})x([0-9]{1,3})\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#ise""\$this->mycode_parse_img('$4', array('$1', '$2'));"$message);
            
$message preg_replace("#\[img align=([a-z]+)\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#ise""\$this->mycode_parse_img('$3', array(), '$1');"$message);
            
$message preg_replace("#\[img=([0-9]{1,3})x([0-9]{1,3}) align=([a-z]+)\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#ise""\$this->mycode_parse_img('$5', array('$1', '$2'), '$3');"$message);
        } 
Sehe ich das richtig, dass da nur der else-Teil dazu gekommen ist?
Wie müsste er in meinem Fall lauten?

Wobei ich auch den weiteren Teil nicht finde und glaube, dass er bei mir so aussieht:
PHP-Code:
    /**
     * Parses IMG MyCode.
     *
     * @param string The URL to the image
     * @param array Optional array of dimensions
     */
    
function mycode_parse_img($url$dimensions=array(), $align='')
    {
        global 
$lang;
        
$url trim($url);
        
$url str_replace("\n"""$url);
        
$url str_replace("\r"""$url);
        if(
$align == "right")
        {
            
$css_align " style=\"float: right;\"";
        }
        else if(
$align == "left")
        {
            
$css_align " style=\"float: left;\"";
        }
        
$alt htmlspecialchars_uni(basename($url));
        if(
my_strlen($alt) > 55)
        {
            
$alt my_substr($alt040)."...".my_substr($alt, -10);
        }
        
$alt $lang->sprintf($lang->posted_image$alt);
        if(
$dimensions[0] > && $dimensions[1] > 0)
        {
            return 
"<img src=\"{$url}\" width=\"{$dimensions[0]}\" height=\"{$dimensions[1]}\" border=\"0\" alt=\"{$alt}\"{$css_align} />";
        }
        else
        {
            return 
"<img src=\"{$url}\" border=\"0\" alt=\"{$alt}\"{$css_align} />";            
        }
    } 

In meinem ersten Beitrag war meine ursprüngliche class_parser.php angehängt.
Ich kann mir gerade noch nicht mal erklären, wieso es so anders aussieht und ich den ganzen callback-Kram nicht habe o.ô
Der Abschnitt mit "else" ist in meinem obigen Code enthalten. Und ja, du müsstest den entsprechend anhängen.

Nachdem es aber bei Dir die callback-Funktionen nicht gibt, frage ich mich gerade, welche MyBB-Version Du im Einsatz hast. Es wäre nicht schlecht, wenn Du hier auf dem aktuellen Stand wärst.
Ganz offensichtlich nicht die aktuellste ;-)
Da mir nach einem Update einiges zerschossen und ich damals zu faul zum anpassen war, bin ich bei einer anderen Version geblieben.
Die class_parse ist eine der wenigen, die sich offensichtlich stark verändert hat.

Aber gut.
Ich danke die viiiiielmals für deine Hilfe!
Hab es nun für meine Version laienhaft so angepasst, dass es bei mir den erwünschten Effekt zeigt und das reicht mir vorerst.
Vielleicht teste ich deine Variante doch nochmal genauer wenn ich mein Update erneut hinter mir und alles wieder ins Lot gebracht habe.

Danke <3