Oznámení

Provoz fóra byl ukončen

vylepšený imageHandler

před 11 lety

krteczek
Člen | 13

Hraji si dnes trošku s implementací dalších funkcí, které zvládá Texy do Texyly a přitom jsem rozšířil možnosti vkládání flashe. Původní kód vychází z 451-punbb-forum-s-integrovanym-texy

/**

* User handler for images

*

* @param TexyHandlerInvocation  handler invocation

* @param TexyImage

* @param TexyLink

* @return TexyHtml|string|FALSE

*/

public function imageHandler($invocation, $image, $link)

{

    $parts = explode(':', $image->URL);
    echo count($parts);
    if(count($parts) < 2)
    {
        return $invocation->proceed();
    }
    $a = 0;
    switch($parts[0])
    {

        case 'youtube': # youtube.com

            $video = 'http://www.youtube.com/v/' . htmlSpecialChars($parts[1]);

            $dimensions = ' width="'.($image->width ? $image->width : 425).'" height="'.($image->height ? $image->height : 350).'"';

            $a = 1;
        break;
        case 'stream': # stream.cz
            $video = 'http://www.stream.cz/object/' . htmlSpecialChars($parts[1]);

            $dimensions = ' width="'.($image->width ? $image->width : 425).'" height="'.($image->height ? $image->height : 350).'"';

            $a = 1;
        break;

        case 'swf':

        case 'flash': # flash
            if(count($parts) == 3)
            {
                $parts[1] = $parts[1] . ':' . $parts[2];
            }
            $video = htmlSpecialChars($parts[1]);

            $dimensions = ' width="'.($image->width ? $image->width : 425).'" height="'.($image->height ? $image->height : 350).'"';

            $a = 1;
        break;

    }

    if($a === 1)
    {
        $code = '<div>'
            . '<object '.$dimensions.'>'

            . '<param name="movie" value="'.$video.'" />'
            . '<param name="wmode" value="transparent" />'

            . '<embed src="'.$video.'" type="application/x-shockwave-flash" wmode="transparent" '.$dimensions.' /></object></div>';

        $texy = $invocation->getTexy();

        return $texy->protect($code, Texy::CONTENT_BLOCK);              }
    return $invocation->proceed();

}

Musel jsem dále upravit swfHandler, přidal jsem do něj na začátek následující kód

if((substr($image->URL, 0, 6) == 'flash:') || (substr($image->URL, 0, 4) == 'swf:'))
{
    return $invocation->proceed();
}

a při přidávání handlerů do konfigurace, musí být ten swf první, jinak mi to hází errory

před 11 lety

krteczek
Člen | 13

tak možná ještě trochu lepší řešení handleru:

/**

* User handler for images

*

* @param TexyHandlerInvocation  handler invocation

* @param TexyImage

* @param TexyLink

* @return TexyHtml|string|FALSE

*/

public function imageHandler($invocation, $image, $link)

{
    $parts = explode(':', $image->URL);

    $altContent = htmlSpecialChars($image->modifier->title);
    $altContent = !empty($altContent) ? '<p>' . $altContent . '</p>' : '';

    if(count($parts) < 2)
        {
            return $invocation->proceed();
        }
    $a = 0;
    switch($parts[0])
        {

            case 'youtube': # youtube.com: [* youtube:tGghdrNuz7Q *]

                $video = 'http://www.youtube.com/v/' . htmlSpecialChars($parts[1]);

                $dimensions = ' width="'.($image->width ? $image->width : 425).'" height="'.($image->height ? $image->height : 350).'"';

                $a = 1;
            break;
            case 'stream': # stream.cz: [* stream:88097-blaho-44-foukaci-trik *]
                $video = 'http://www.stream.cz/object/' . htmlSpecialChars($parts[1]);

                $dimensions = ' width="'.($image->width ? $image->width : 425).'" height="'.($image->height ? $image->height : 350).'"';

                $a = 1;
            break;

            case 'swf':

            case 'flash': # flash: [* flash:http://example.com/example/flash *] or [* flash:http://example.com/example/flash.swf *]
                if(count($parts) == 3)
                    {
                        $parts[1] = $parts[1] . ':' . $parts[2];
                    }
                $video = htmlSpecialChars($parts[1]);

                $dimensions = ' width="'.($image->width ? $image->width : 425).'" height="'.($image->height ? $image->height : 350).'"';

                $a = 1;
            break;
            default: # accepts only *.swf
                if(substr($image->URL, -4) === '.swf')
                    {

                        $video = Texy::prependRoot($image->URL, $texy->imageModule->root);

                        $video = htmlSpecialChars($video);


                        $dimensions = ($image->width ? 'width="'.$image->width.'" ' : '') . ($image->height ? ' height="'.$image->height.'" ' : '');
                        $a = 1;
                    }
            break;

        }

    if($a === 1)
        {
                $code = '<div>'
                . '<object '.$dimensions.'>'

                . '<param name="movie" value="'.$video.'">'
                . '<param name="wmode" value="transparent">'

                . '<embed src="'.$video.'" type="application/x-shockwave-flash" wmode="transparent" '.$dimensions.'></object></div>'
                . $altContent;

                $texy = $invocation->getTexy();

                return $texy->protect($code, Texy::CONTENT_BLOCK);
        }


    return $invocation->proceed();

}

před 9 lety

toka
Člen | 251

Doplňuji DailyMotion a GoogleVideo, akorát ve vlastním řešení. Jelikož jsem z tohoto řešení nevycházel, narazil jsem na něj až ve chvíli, kdy jsem chtěl vložit své řešení, nelze ho považovat jako rozšíření výše uvedeného, ale jako samostatný kód.

Jelikož jsem nechtěl řešit část $texy = $invocation->getTexy(); return $texy->protect($code, Texy::CONTENT_BLOCK); VS return $invocation->proceed(); podmínkou a pomocnou proměnnou, ponechal jsem tento kód v každé větvi case.

function imageHandler($invocation, $image, $link) {
  $parts = explode(':', $image->URL);
  if (count($parts) !== 2) return $invocation->proceed();

  switch ($parts[0]) {
    case 'youtube':
      $video = htmlSpecialChars($parts[1]);
      $dimensions = 'width="'.($image->width ? $image->width : 425).'" height="'.($image->height ? $image->height : 350).'"';
      $code = '<div><object '.$dimensions.'>'
            . '<param name="movie" value="http://www.youtube.com/v/'.$video.'" /><param name="wmode" value="transparent" />'
            . '<embed src="http://www.youtube.com/v/'.$video.'" type="application/x-shockwave-flash" wmode="transparent" '.$dimensions.' /></object></div>';
      $texy = $invocation->getTexy();
      return $texy->protect($code, Texy::CONTENT_BLOCK);

    case 'stream':
      $video = htmlSpecialChars($parts[1]);
      $dimensions = 'width="'.($image->width ? $image->width : 425).'" height="'.($image->height ? $image->height : 350).'"';
      $code = '<div><object '.$dimensions.'>'
            . '<param name="movie" value="http://www.stream.cz/object/'.$video.'" /><param name="wmode" value="transparent" />'
            . '<param name="allowfullscreen" value="true"><param name="allowscriptaccess" value="always">'
            . '<embed src="http://www.stream.cz/object/'.$video.'" type="application/x-shockwave-flash" wmode="transparent" allowfullscreen="true" allowscriptaccess="always" '.$dimensions.' /></object></div>';
      $texy = $invocation->getTexy();
      return $texy->protect($code, Texy::CONTENT_BLOCK);

    case 'dailymotion':
      $video = htmlSpecialChars($parts[1]);
      $dimensions = 'width="'.($image->width ? $image->width : 425).'" height="'.($image->height ? $image->height : 350).'"';
      $code = '<div><object '.$dimensions.'>'
            . '<param name="movie" value="http://www.dailymotion.com/swf/'.$video.'&amp;v3=1" /><param name="wmode" value="transparent" />'
            . '<param name="allowFullScreen" value="true"><param name="allowScriptAccess" value="always">'
            . '<embed src="http://www.dailymotion.com/swf/'.$video.'&amp;v3=1" type="application/x-shockwave-flash" wmode="transparent" allowfullscreen="true" allowscriptaccess="always" '.$dimensions.' /></object></div>';
      $texy = $invocation->getTexy();
      return $texy->protect($code, Texy::CONTENT_BLOCK);

    case 'googlevideo':
      $video = htmlSpecialChars($parts[1]);
      $dimensions = 'width="'.($image->width ? $image->width : 425).'" height="'.($image->height ? $image->height : 350).'"';
      $style = 'style="width:'.($image->width ? $image->width : 425).'px; height:'.($image->height ? $image->height : 350).'px"';
      $code = '<div><object '.$dimensions.'>'
            . '<param name="movie" value="http://video.google.com/googleplayer.swf?'.$video.'" /><param name="wmode" value="transparent" />'
            . '<embed src="http://video.google.com/googleplayer.swf?'.$video.'" quality="best" bgcolor="#ffffff" FlashVars="playerMode=embedded" '
            . 'salign="TL" scale="noScale" allowScriptAccess="sameDomain" align="middle" type="application/x-shockwave-flash" id="VideoPlayback" '.$style.' /></object></div>';
      $texy = $invocation->getTexy();
      return $texy->protect($code, Texy::CONTENT_BLOCK);
  }

  return $invocation->proceed();
}

před 9 lety

toka
Člen | 251

Ukázky použití:

[* youtube:2mTLO2F_ERY *]

[* stream:89910-freebord *]

[* dailymotion:x2ysj4 *]

[* googlevideo:docId=9106177461581879036&amp;q=freebord&amp;ei=1VaUSJXuOoycigKU_YWRBQ *]