Einaar
Oceanman: хорошо. просто у меня кое-какие изменения были в коде. Я думаю Yacc'у было бы логичнее вставить новый код к себе в пост, нежели строить целую цепочку ссылок на посты
Неудобно будет читать тему.
измененное:
1. поскольку не люблю разбивать постоянно код на php и html, ибо путаюсь систематически с закрывающими и открывающими <php ?>, переписал его полностью на чистый php.
2. чтобы не исправлять каждый раз вручную путь до кнопки:
Код:
<img src="http://example.com/wp-content/uploads/2011/05/play_large.png" alt="Play this video" />
автоматизировал эту строку с помощью переменной пути до темы. поэтому кнопку перенес в директорию /flowplayer/ поскольку так, имхо, более логично.
поэтому перепиши файл play_large.png в поддиректорию /flowplayer/
3. отформатировал вставляемый html текст переносами строк.
4. добавил автоматическую вставку в <head></head> скрипта.
5. исправил возврат значений из yacc_flowplayer на return, что устранило проблему позиционирования блока видео.
6. Добавил соблюдение пропорций при развертывании видео на весь экран.
что еще хотелось бы сделать:
1. рекламу в конце ролика.. вида: "download the full video" или "watch in HD" с переходом по клику на спонсора.
возможные проблемы: поскольку при копировании с форума в буфер и последующей вставке в редакторе, в коде образуются иногда лишние пробелы в конце строк, то возможно возникновение ошибки:
Код:
Parse error: syntax error, unexpected T_SL in ..\htdocs\....functions.php on line XXX
решение: после "print <<< JS" не должно быть пробелов. "JS;" должна начинаться с начала строки и после неё тоже не должно быть пробелов.
define( 'FLOWPLAYER_DIR', get_bloginfo( 'template_url' ) . '/flowplayer/' );
define( 'FLOWPLAYER_CORE_JS', FLOWPLAYER_DIR . 'flowplayer-3.2.6.min.js' );
define( 'FLOWPLAYER_PLAYER_SWF', FLOWPLAYER_DIR . 'flowplayer-3.2.7.swf' );
define( 'FLOWPLAYER_CONTROLS_SWF', FLOWPLAYER_DIR . 'flowplayer.controls-3.2.5.swf' );
define( 'FLOWPLAYER_CONTENT_SWF', FLOWPLAYER_DIR . 'flowplayer.content-3.2.0.swf' );
wp_register_script( 'flowplayer', FLOWPLAYER_CORE_JS );
if ( !is_admin() ) wp_enqueue_script( 'flowplayer' );
add_shortcode( 'flowplayer', 'yacc_flowplayer' );
function yacc_flowplayer( $atts ) {
extract( shortcode_atts( array(
'video' => '',
'image' => '',
'id' => 'player-' . uniqid(),
'width' => 320,
'height' => 240,
'stop_after' => 1000,
'ad' => '',
'title' => '',
'description' => '',
'caption' => ''
), $atts ) );
$output = '';
if( $video == '' ) return;
if( $image == '' ) {
$output .= '<p><a href="' . $video . '" style="display:block; width:' . $width . 'px; height:' . $height . 'px;" id="' . $id . '"></a>' . yacc_flowplayer_setup( $id, $width, $height, $stop_after, $ad ) . '</p>' . "\n";
}
else {
$output .= '<style>' . "\n"
. '.player { height:' . $height . 'px; width:' . $width . 'px; cursor:pointer; text-align:center; }' . "\n"
. '.player img { margin-top:' . (( $height - 83 ) / 2) . 'px; }' . "\n"
. '.player .meta { height:40px; color:#ffffff; background:#000000; opacity:0.7; margin-top:' . (( $height - 83 ) / 2 - 55) . 'px; padding:5px; font-family:"bitstream vera sans","trebuchet ms"; font-size:12px; line-height:14px; }' . "\n"
. '.player .meta .video-title { text-transform: uppercase; }' . "\n"
. '.player .meta .video-description { }' . "\n"
. '.player .meta .video-caption { color:#99ff99; }' . "\n"
. '</style>' . "\n"
. '<div class="player" id="' . $id . '" href="' . $video . '" style="background: url(' . $image . ');">' . "\n"
. '<img src="' . FLOWPLAYER_DIR . 'play_large.png" alt="Play this video" />' . "\n"
. '<div class="meta">' . "\n"
. '<div class="video-title">' . $title . '</div>' . "\n"
. '<div class="video-description">' . $description . '</div>' . "\n"
. '<div class="video-caption">' . $caption . '</div>' . "\n"
. '</div>' . "\n"
. '</div>' . "\n"
. '<p>' . "\n"
. yacc_flowplayer_setup( $id, $width, $height, null, $ad )
. '</p>' . "\n";
}
return $output;
}
function yacc_flowplayer_setup( $id, $width, $height, $stop_after, $ad ) {
$script = "\n" . '<script>
bufferingStopped[\'' . $id . '\'] = false;
flowplayer("' . $id . '", "' . FLOWPLAYER_PLAYER_SWF . '", ({
onLoad: function() {
},
clip: {
autoPlay: true,
scaling: \'fit\',
autoBuffering: false,
onStart: function() {';
if ( $stop_after > 0 ) {
$script .= 'setTimeout( function() {
stopBuffering( \'' . $id . '\' ) }, '
. $stop_after .
');';
}
$script .= '}
},
plugins: {
controls: {
url: \'' . FLOWPLAYER_CONTROLS_SWF . '\',
autoHide: \'never\',
play: true,
volume: true,
mute: true,
time: true,
stop: true,
fullscreen: true,
scrubber: true
}';
if ( $ad != '' ) {
$script .= ',
content: {
url: \'' . FLOWPLAYER_CONTENT_SWF . '\',
top: 0,
left: 0,
height: 30,
width:' . $width . ',
border: 0,
borderRadius: 0,
backgroundColor: \'#000000\',
textAlign: \'center\',
style: {
\'.ad\': {
fontSize: 14,
fontFamily: \'verdana,arial,helvetica\',
color: \'#ffffff\',
},
\'.ad-link\': {
color: \'#ffff33\'
}
},
html: \'<div class="ad">' . str_replace( "'", '"', $ad ) . '</div>\',
onClick: function() {
}
}';
}
$script .= "\n" . ' }
}))
</script>';
return $script;
}
add_filter( 'media_send_to_editor', 'yacc_media_send_to_editor', 10, 2 );
function yacc_media_send_to_editor( $html, $id ) {
$attachment = get_post( $id );
$mime_type = $attachment->post_mime_type;
if( substr( $mime_type, 0, 5 ) == 'video' ) {
$meta = wp_get_attachment_metadata( $id );
$html = '[flowplayer';
$html .= ' video="' . $attachment->guid . '"';
$html .= ' id="player-' . uniqid() . '"';
$html .= ' width="' . $meta['width'] . '"';
$html .= ' height="' . $meta['height'] . '"';
$html .= ' stop_after="' . $meta['stop_after'] . '"';
$html .= ' image="' . $meta['image'] . '"';
$html .= ' caption="' . $attachment->post_excerpt . '"';
$html .= ' description="' . $attachment->post_content . '"';
$html .= ' title="' . $attachment->post_title . '"';
$html .= ' ad="' . $meta['ad'] . '"]';
}
return $html;
}
add_filter('attachment_fields_to_edit', 'yacc_attachment_fields_to_edit', 10, 2 );
function yacc_attachment_fields_to_edit( $form_fields, $post ) {
if ( substr( $post->post_mime_type, 0, 5 ) == 'video' ) {
$meta = wp_get_attachment_metadata( $post->ID );
$form_fields['player_id']['label'] = 'Player ID';
$form_fields['player_id']['value'] = 'player-' . uniqid();
$form_fields['player_id']['class'] = 'text';
$form_fields['image']['label'] = 'Splash Image';
$form_fields['image']['value'] = isset( $meta['image'] ) ? $meta['image'] : '';
$form_fields['image']['class'] = 'text';
$form_fields['width']['label'] = 'Width';
$form_fields['width']['value'] = isset( $meta['width'] ) ? $meta['width'] : '320';
$form_fields['width']['class'] = 'text';
$form_fields['height']['label'] = 'Height';
$form_fields['height']['value'] = isset( $meta['height'] ) ? $meta['height'] : '240';
$form_fields['height']['class'] = 'text';
$form_fields['stop_after']['label'] = 'Stop after';
$form_fields['stop_after']['value'] = isset( $meta['stop_after'] ) ? $meta['stop_after'] : '1000';
$form_fields['stop_after']['class'] = 'text';
$form_fields['ad']['label'] = 'Ad';
$form_fields['ad']['value'] = isset( $meta['ad'] ) ? $meta['ad'] : '';
$form_fields['ad']['input'] = 'textarea';
$form_fields['ad']['class'] = 'text';
}
return $form_fields;
}
add_filter( 'attachment_fields_to_save', 'yacc_attachment_fields_to_save', 10, 2 );
function yacc_attachment_fields_to_save( $post, $attachment ) {
if ( substr( $post['post_mime_type'], 0, 5 ) == 'video' ) {
$meta = wp_get_attachment_metadata( $post['ID'] );
$meta['player_id'] = $attachment['player_id'];
$meta['width'] = $attachment['width'];
$meta['height'] = $attachment['height'];
$meta['stop_after'] = $attachment['stop_after'];
$meta['image'] = $attachment['image'];
$meta['ad'] = $attachment['ad'];
wp_update_attachment_metadata( $post['ID'], $meta );
}
return $post;
}
function yacc_flowplayer_header_js () {
print <<< JS
<script>
var bufferingStopped = new Object();
function stopBuffering ( id ) {
if( !bufferingStopped[id] ) {
\$f().stopBuffering();
bufferingStopped[id] = true;
}
}
</script>
JS;
}
add_action('wp_head', 'yacc_flowplayer_header_js');
Последний раз редактировалось: Einaar (04/07/11 в 20:31), всего редактировалось 2 раз(а)