Oznámení
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.'&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.'&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&q=freebord&ei=1VaUSJXuOoycigKU_YWRBQ *]