Автоматическое воспроизведение любых внешних аудио файлов и файлов, добавленных в пост, с помощью плагина MP3-jPlayer и произвольных полей

Автоматическое воспроизведение любых внешних аудио файлов и файлов, добавленных в пост, с помощью плагина MP3-jPlayer и произвольных полей | n-wp.ru

Как я уже писал, для автоматического воспроизведения всех MP3 файлов, добавленных в пост, а так же любых внешних файлов с других сайтов, я, используя плагин MP3-jPlayer и произвольные поля, создал простой код. Если кто-то создает тему для аудио блога или шаблон для аудио постов, то может использовать его в своих проектах.

Для начала создадим блок произвольных полей в редакторе, с помощью которых можно будет сформировать плейлист вручную, по внешним ссылкам, либо же автоматически добавить в плейлист файлы, присоединенные к посту. Для этого нужно вставить в файл functions.php:

add_action('admin_init', 'my_extra_fields', 1);
function my_extra_fields() {
add_meta_box( 'extra_fields', 'Аудио', 'extra_fields_box_func', 'post', 'normal', 'high'  );
}
function extra_fields_box_func( $post ){
?>

вствить аудио ID, 'auds_select', 1); ?>

Название Артист Альбом Ссылка
01 <input type="text" name="extra[auds_Title01]" value="ID, 'auds_Title01', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Artist01]" value="ID, 'auds_Artist01', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Album01]" value="ID, 'auds_Album01', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Link01]" value="ID, 'auds_Link01', 1); ?>" style="width:90%"/>
02 <input type="text" name="extra[auds_Title02]" value="ID, 'auds_Title02', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Artist02]" value="ID, 'auds_Artist02', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Album02]" value="ID, 'auds_Album02', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Link02]" value="ID, 'auds_Link02', 1); ?>" style="width:90%"/>
03 <input type="text" name="extra[auds_Title03]" value="ID, 'auds_Title03', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Artist03]" value="ID, 'auds_Artist03', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Album03]" value="ID, 'auds_Album03', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Link03]" value="ID, 'auds_Link03', 1); ?>" style="width:90%"/>
04 <input type="text" name="extra[auds_Title04]" value="ID, 'auds_Title04', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Artist04]" value="ID, 'auds_Artist04', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Album04]" value="ID, 'auds_Album04', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Link04]" value="ID, 'auds_Link04', 1); ?>" style="width:90%"/>
05 <input type="text" name="extra[auds_Title05]" value="ID, 'auds_Title05', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Artist05]" value="ID, 'auds_Artist05', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Album05]" value="ID, 'auds_Album05', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Link05]" value="ID, 'auds_Link05', 1); ?>" style="width:90%"/>
06 <input type="text" name="extra[auds_Title06]" value="ID, 'auds_Title06', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Artist06]" value="ID, 'auds_Artist06', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Album06]" value="ID, 'auds_Album06', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Link06]" value="ID, 'auds_Link06', 1); ?>" style="width:90%"/>
07 <input type="text" name="extra[auds_Title07]" value="ID, 'auds_Title07', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Artist07]" value="ID, 'auds_Artist07', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Album07]" value="ID, 'auds_Album07', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Link07]" value="ID, 'auds_Link07', 1); ?>" style="width:90%"/>
08 <input type="text" name="extra[auds_Title08]" value="ID, 'auds_Title08', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Artist08]" value="ID, 'auds_Artist08', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Album08]" value="ID, 'auds_Album08', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Link08]" value="ID, 'auds_Link08', 1); ?>" style="width:90%"/>
09 <input type="text" name="extra[auds_Title09]" value="ID, 'auds_Title09', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Artist09" value="ID, 'auds_Artist09', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Album09]" value="ID, 'auds_Album09', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Link09]" value="ID, 'auds_Link09', 1); ?>" style="width:90%"/>
10 <input type="text" name="extra[auds_Title10]" value="ID, 'auds_Title10', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Artist10]" value="ID, 'auds_Artist10', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Album10]" value="ID, 'auds_Album10', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Link10]" value="ID, 'auds_Link10', 1); ?>" style="width:90%"/>
11 <input type="text" name="extra[auds_Title11]" value="ID, 'auds_Title11', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Artist11]" value="ID, 'auds_Artist11', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Album11]" value="ID, 'auds_Album11', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Link11]" value="ID, 'auds_Link11', 1); ?>" style="width:90%"/>
12 <input type="text" name="extra[auds_Title12]" value="ID, 'auds_Title12', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Artist12]" value="ID, 'auds_Artist12', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Album12]" value="ID, 'auds_Album12', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Link12]" value="ID, 'auds_Link12', 1); ?>" style="width:90%"/>
13 <input type="text" name="extra[auds_Title13]" value="ID, 'auds_Title13', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Artist13]" value="ID, 'auds_Artist13', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Album13]" value="ID, 'auds_Album13', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Link13]" value="ID, 'auds_Link13', 1); ?>" style="width:90%"/>
14 <input type="text" name="extra[auds_Title14]" value="ID, 'auds_Title14', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Artist14]" value="ID, 'auds_Artist14', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Album14]" value="ID, 'auds_Album14', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Link14]" value="ID, 'auds_Link14', 1); ?>" style="width:90%"/>
15 <input type="text" name="extra[auds_Title15]" value="ID, 'auds_Title15', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Artist15]" value="ID, 'auds_Artist15', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Album15]" value="ID, 'auds_Album15', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Link15]" value="ID, 'auds_Link15', 1); ?>" style="width:90%"/>
16 <input type="text" name="extra[auds_Title16]" value="ID, 'auds_Title16', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Artist16]" value="ID, 'auds_Artist16', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Album16]" value="ID, 'auds_Album16', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Link16]" value="ID, 'auds_Link16', 1); ?>" style="width:90%"/>
17 <input type="text" name="extra[auds_Title17]" value="ID, 'auds_Title17', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Artist17]" value="ID, 'auds_Artist17', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Album17]" value="ID, 'auds_Album17', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Link17]" value="ID, 'auds_Link17', 1); ?>" style="width:90%"/>
18 <input type="text" name="extra[auds_Title18]" value="ID, 'auds_Title18', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Artist18]" value="ID, 'auds_Artist18', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Album18]" value="ID, 'auds_Album18', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Link18]" value="ID, 'auds_Link18', 1); ?>" style="width:90%"/>
19 <input type="text" name="extra[auds_Title19]" value="ID, 'auds_Title19', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Artist19]" value="ID, 'auds_Artist19', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Album19]" value="ID, 'auds_Album19', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Link19]" value="ID, 'auds_Link19', 1); ?>" style="width:90%"/>
20 <input type="text" name="extra[auds_Title20]" value="ID, 'auds_Title20', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Artist20]" value="ID, 'auds_Artist20', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Album20]" value="ID, 'auds_Album20', 1); ?>" style="width:90%"/> <input type="text" name="extra[auds_Link20]" value="ID, 'auds_Link20', 1); ?>" style="width:90%"/>
<input type="hidden" name="extra_fields_nonce" value="" /> $value ){ if( empty($value) ) continue delete_post_meta($post_id, $key); update_post_meta($post_id, $key, $value); } return $post_id; }

Этот код создает блок произвольных полей, состоящий из 20 практически одинаковых строчек – ровно столько внешних файлов можно будет добавить в плей-лист. Используемые произвольные поля:

  • auds_TitleXX – наименование трека
  • auds_ArtistXX – артист
  • auds_AlbumXX – альбом
  • auds_LinkXX – ссылка на файл MP3

Так же есть произвольное поле auds_select, отвечающее за выбор способа формирования плейлиста. У него предопределены два значения – auto и manual. В случае выбора auto плейлист будет сформирован автоматически из MP3 файлов, добавленных в пост. Если выбрать manual, то плейлист будет сформирован из файлов, ссылки на которые вы укажете в созданном блоке произвольных полей.

Автоматическое воспроизведение любых внешних аудио файлов и файлов, добавленных в пост, с помощью плагина MP3-jPlayer и произвольных полей (2)

Теперь нужно сформировать код, который будет брать данные из заполненных произвольных полей и подставлять их в плейлист, а в случае, если указано автоматическое формирование плейлиста, добавлять в него файлы, присоединенные к посту, из библиотеки медиафайлов. Для этого в файл single.php (или в другой файл, отвечающий за вид поста, в котором должен автоматически появляться MP3 плеер), нужно добавить:


$post->ID, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'audio/mpeg' ) );
foreach ( $audio as $attachment_id => $attachment ) {
$x .= ''.$attachment->post_excerpt.' / '.$attachment->post_content.' / '.$attachment->post_title.'@'.$attachment->guid.', ' ; 
}
mp3j_put( '[mp3-jplayer tracks="'.$x.'"]' );
?>

ID, 'auds_Artist01', true); 
$Album01  = get_post_meta($post->ID, 'auds_Album01', true);
$Title01  = get_post_meta($post->ID, 'auds_Title01', true);
$Link01   = get_post_meta($post->ID, 'auds_Link01', true);
if ( $Link01 != '' ) {
$x1 = '01 / '.$Artist01.' / '.$Album01.' / '.$Title01.'@'.$Link01.',' ;
} else {
$x1 = '' ;
}
$Artist02 = get_post_meta($post->ID, 'auds_Artist02', true); 
$Album02  = get_post_meta($post->ID, 'auds_Album02', true);
$Title02  = get_post_meta($post->ID, 'auds_Title02', true);
$Link02   = get_post_meta($post->ID, 'auds_Link02', true);
if ( $Link02 != '' ) {
$x2 = '02 / '.$Artist02.' / '.$Album02.' / '.$Title02.'@'.$Link02.',' ;
} else {
$x2 = '' ;
}      
$Artist03 = get_post_meta($post->ID, 'auds_Artist03', true); 
$Album03  = get_post_meta($post->ID, 'auds_Album03', true);
$Title03  = get_post_meta($post->ID, 'auds_Title03', true);
$Link03   = get_post_meta($post->ID, 'auds_Link03', true);
if ( $Link03 != '' ) {
$x3 = '03 / '.$Artist03.' / '.$Album03.' / '.$Title03.'@'.$Link03.',' ;
} else {
$x3 = '' ;
}    
$Artist04 = get_post_meta($post->ID, 'auds_Artist04', true); 
$Album04  = get_post_meta($post->ID, 'auds_Album04', true);
$Title04  = get_post_meta($post->ID, 'auds_Title04', true);
$Link04   = get_post_meta($post->ID, 'auds_Link04', true);
if ( $Link04 != '' ) {
$x4 = '04 / '.$Artist04.' / '.$Album04.' / '.$Title04.'@'.$Link04.',' ;
} else {
$x4 = '' ;
}   
$Artist05 = get_post_meta($post->ID, 'auds_Artist05', true); 
$Album05  = get_post_meta($post->ID, 'auds_Album05', true);
$Title05  = get_post_meta($post->ID, 'auds_Title05', true);
$Link05   = get_post_meta($post->ID, 'auds_Link05', true);
if ( $Link05 != '' ) {
$x5 = '05 / '.$Artist05.' / '.$Album05.' / '.$Title05.'@'.$Link05.',' ;
} else {
$x5 = '' ;
}    
$Artist06 = get_post_meta($post->ID, 'auds_Artist06', true); 
$Album06  = get_post_meta($post->ID, 'auds_Album06', true);
$Title06  = get_post_meta($post->ID, 'auds_Title06', true);
$Link06   = get_post_meta($post->ID, 'auds_Link06', true);
if ( $Link06 != '' ) {
$x6 = '06 / '.$Artist06.' / '.$Album06.' / '.$Title06.'@'.$Link06.',' ;
} else {
$x6 = '' ;
}    
$Artist07 = get_post_meta($post->ID, 'auds_Artist07', true); 
$Album07  = get_post_meta($post->ID, 'auds_Album07', true);
$Title07  = get_post_meta($post->ID, 'auds_Title07', true);
$Link07   = get_post_meta($post->ID, 'auds_Link07', true);
if ( $Link07 != '' ) {
$x7 = '07 / '.$Artist07.' / '.$Album07.' / '.$Title07.'@'.$Link07.',' ;
} else {
$x7 = '' ;
}   
$Artist08 = get_post_meta($post->ID, 'auds_Artist08', true); 
$Album08  = get_post_meta($post->ID, 'auds_Album08', true);
$Title08  = get_post_meta($post->ID, 'auds_Title08', true);
$Link08   = get_post_meta($post->ID, 'auds_Link08', true);
if ( $Link08 != '' ) {
$x8 = '08 / '.$Artist08.' / '.$Album08.' / '.$Title08.'@'.$Link08.',' ;
} else {
$x8 = '' ;
}   
$Artist09 = get_post_meta($post->ID, 'auds_Artist09', true); 
$Album09  = get_post_meta($post->ID, 'auds_Album09', true);
$Title09  = get_post_meta($post->ID, 'auds_Title09', true);
$Link09   = get_post_meta($post->ID, 'auds_Link09', true);
if ( $Link09 != '' ) {
$x9 = '09 / '.$Artist09.' / '.$Album09.' / '.$Title09.'@'.$Link09.',' ;
} else {
$x9 = '' ;
}              
$Artist10 = get_post_meta($post->ID, 'auds_Artist10', true); 
$Album10  = get_post_meta($post->ID, 'auds_Album10', true);
$Title10  = get_post_meta($post->ID, 'auds_Title10', true);
$Link10   = get_post_meta($post->ID, 'auds_Link10', true);
if ( $Link10 != '' ) {
$x10 = '10 / '.$Artist10.' / '.$Album10.' / '.$Title10.'@'.$Link10.',' ;
} else {
$x10 = '' ;
} 
$Artist11 = get_post_meta($post->ID, 'auds_Artist11', true); 
$Album11  = get_post_meta($post->ID, 'auds_Album11', true);
$Title11  = get_post_meta($post->ID, 'auds_Title11', true);
$Link11   = get_post_meta($post->ID, 'auds_Link11', true);
if ( $Link11 != '' ) {
$x11 = '11 / '.$Artist11.' / '.$Album11.' / '.$Title11.'@'.$Link11.',' ;
} else {
$x11 = '' ;
}
$Artist12 = get_post_meta($post->ID, 'auds_Artist12', true); 
$Album12  = get_post_meta($post->ID, 'auds_Album12', true);
$Title12  = get_post_meta($post->ID, 'auds_Title12', true);
$Link12   = get_post_meta($post->ID, 'auds_Link12', true);
if ( $Link12 != '' ) {
$x12 = '12 / '.$Artist12.' / '.$Album12.' / '.$Title12.'@'.$Link12.',' ;
} else {
$x12 = '' ;
}
$Artist13 = get_post_meta($post->ID, 'auds_Artist13', true); 
$Album13  = get_post_meta($post->ID, 'auds_Album13', true);
$Title13  = get_post_meta($post->ID, 'auds_Title13', true);
$Link13   = get_post_meta($post->ID, 'auds_Link13', true);
if ( $Link13 != '' ) {
$x13 = '13 / '.$Artist13.' / '.$Album13.' / '.$Title13.'@'.$Link13.',' ;
} else {
$x13 = '' ;
}
$Artist14 = get_post_meta($post->ID, 'auds_Artist14', true); 
$Album14  = get_post_meta($post->ID, 'auds_Album14', true);
$Title14  = get_post_meta($post->ID, 'auds_Title14', true);
$Link14   = get_post_meta($post->ID, 'auds_Link14', true);
if ( $Link14 != '' ) {
$x14 = '14 / '.$Artist14.' / '.$Album14.' / '.$Title14.'@'.$Link14.',' ;
} else {
$x14 = '' ;
}
$Artist15 = get_post_meta($post->ID, 'auds_Artist15', true); 
$Album15  = get_post_meta($post->ID, 'auds_Album15', true);
$Title15  = get_post_meta($post->ID, 'auds_Title15', true);
$Link15   = get_post_meta($post->ID, 'auds_Link15', true);
if ( $Link15 != '' ) {
$x15 = '15 / '.$Artist15.' / '.$Album15.' / '.$Title15.'@'.$Link15.',' ;
} else {
$x15 = '' ;
}
$Artist16 = get_post_meta($post->ID, 'auds_Artist16', true); 
$Album16  = get_post_meta($post->ID, 'auds_Album16', true);
$Title16  = get_post_meta($post->ID, 'auds_Title16', true);
$Link16   = get_post_meta($post->ID, 'auds_Link16', true);
if ( $Link16 != '' ) {
$x16 = '16 / '.$Artist16.' / '.$Album16.' / '.$Title16.'@'.$Link16.',' ;
} else {
$x16 = '' ;
}
$Artist17 = get_post_meta($post->ID, 'auds_Artist17', true); 
$Album17  = get_post_meta($post->ID, 'auds_Album17', true);
$Title17  = get_post_meta($post->ID, 'auds_Title17', true);
$Link17   = get_post_meta($post->ID, 'auds_Link17', true);
if ( $Link17 != '' ) {
$x17 = '17 / '.$Artist17.' / '.$Album17.' / '.$Title17.'@'.$Link17.',' ;
} else {
$x17 = '' ;
}
$Artist18 = get_post_meta($post->ID, 'auds_Artist18', true); 
$Album18  = get_post_meta($post->ID, 'auds_Album18', true);
$Title18  = get_post_meta($post->ID, 'auds_Title18', true);
$Link18   = get_post_meta($post->ID, 'auds_Link18', true);
if ( $Link18 != '' ) {
$x18 = '18 / '.$Artist18.' / '.$Album18.' / '.$Title18.'@'.$Link18.',' ;
} else {
$x18 = '' ;
}
$Artist19 = get_post_meta($post->ID, 'auds_Artist19', true); 
$Album19  = get_post_meta($post->ID, 'auds_Album19', true);
$Title19  = get_post_meta($post->ID, 'auds_Title19', true);
$Link19   = get_post_meta($post->ID, 'auds_Link19', true);
if ( $Link19 != '' ) {
$x19 = '19 / '.$Artist19.' / '.$Album19.' / '.$Title19.'@'.$Link19.',' ;
} else {
$x19 = '' ;
}
$Artist20 = get_post_meta($post->ID, 'auds_Artist20', true); 
$Album20  = get_post_meta($post->ID, 'auds_Album20', true);
$Title20  = get_post_meta($post->ID, 'auds_Title20', true);
$Link20   = get_post_meta($post->ID, 'auds_Link20', true);
if ( $Link20 != '' ) {
$x20 = '20 / '.$Artist20.' / '.$Album20.' / '.$Title20.'@'.$Link20.',' ;
} else {
$x20 = '' ;
}
mp3j_put( '[mp3-jplayer tracks="'.$x1.' '.$x2.' '.$x3.' '.$x4.' '.$x5.' '.$x6.' '.$x7.' '.$x8.' '.$x9.' '.$x10.''.$x11.' '.$x12.' '.$x13.' '.$x14.' '.$x15.' '.$x16.' '.$x17.' '.$x18.' '.$x19.' '.$x20.'"]' );                      
?>

Код проверяет произвольное поле auds_select: если его значение auto, то плейлист формируется из файлов, присоединенных к посту, если manual – то из файлов, указанных вручную в блоке произвольных полей.

Таким способом я облегчил себе работу по автоматическому внедрению аудио файлов в посты блога: плеер автоматически появляется в посте, если к нему были присоединены MP3 файлы, либо если я указал ссылки на них вручную при написании поста.

Автоматическое воспроизведение любых внешних аудио файлов и файлов, добавленных в пост, с помощью плагина MP3-jPlayer и произвольных полей (1)

Еще записи по этой теме по этой теме:

Автор tiaurus 2182 Articles
Являюсь создателем n-wp.ru — блога о WordPress для новичков. Мне интересно многое, поэтому еще я сделал 123-box.ru — блог о программах для Windows, и tiaurus.info — блог о красоте.

3 Комментарии

  1. Спасибо за серию постов о MP3-jPlayer.
    А подскажите, что нужно сделать, чтоб плеер выглядел как у вас на иллюстрации к посту. А то скины, которые в комплекте, мягко говоря, не вставляют :)
    Хотя по функциям действительно на текущий момент самый нормальный плагин для WordPress по теме (в смысле из mp3-плееров)

    • За внешний вид отвечает функция write_primary_player, которая находится в файле \wp-content\plugins\mp3-jplayer\mp3j_main.php, и CSS файл из папки \wp-content\plugins\mp3-jplayer\css, соответствующий выбранному скрину. Я переделал для себя текстовый скин. Попробуйте – это не сложно.

  2. Подскажите: возможно ли автоматизировать получение метаданных аудиофайлов, вставленных в пост с другого сервера? То есть, когда аудио непосредственно загружено в медиабиблиотеку, то название и исполнитель отображаются автоматически. Хотелось бы такого эффекта добиться с файлами, которые держим на другом сервере.
    Заранее спасибо.

Оставить комментарий

Ваш электронный адрес не будет опубликован.


*