В этой статье поговорим о плагине “Музыка”, а именно о копировании музыки у друзей. А что тут говорить, такой возможности в плагине “Музыка” нет, так вот я покажу, как в несколько шагов реализовать такую возможность. Так сказать модифицируем плагин Музыка такие образом, чтобы он поддерживал возможность Копирование музыки у друзей.
Копирование музыки у друзей
Сначала необходимо добавить еще одно поле в таблицу «se_music», где хранятся записи о добавленным песнях. Выполним sql-запрос:
ALTER TABLE `se_music` ADD `owner_user_id` text AFTER `music_user_id`
Для работы функции «is_already_music()», которая возвращает логическую ложь в том случае, если у участника нет данной песни в его коллекции, пропишем ее в класс «user».
- Открыть: class_user.php
Подсказка: Данный файл находится в папке include.
Найти
Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть. Данная часть кода находится внутри функции user_message_view ().return array ( 'collaborators' => &$collaborators, 'pms' => &$pms ); }
Добавить после
Подсказка: Добавьте эти строки на новой строке после ранее найденных строк.
function is_already_music($music_id) { global $database; $music_tb = $database->database_fetch_assoc($database->database_query("SELECT owner_user_id FROM se_music WHERE music_id='{$music_id}' LIMIT 1")); $owner_user_id = $music_tb[owner_user_id]; if(substr_count($owner_user_id, $this->user_info['user_id']) == 0) return 0; else return 1; return 1; }
Далее уже будем работать с файлами, отвечающими за вывод и добавление музыки.
- Открыть: class_music.php
Найти
Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть. Данная часть кода находится внутри функции music_list ().if( $this->user_id ) $sql .= " WHERE se_music.music_user_id='{$this->user_id}' ";
Заменить
Подсказка: Произведите замену ранее найденных строк.
if( $this->user_id ) $sql .= " WHERE se_music.music_user_id='{$this->user_id}' OR FIND_IN_SET('{$this->user_id}', owner_user_id)";
- Открыть: browse_music.php
Найти
Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть.$music_object = new se_music();
Добавить
Подсказка: Добавьте эти строки на новой строке перед ранее найденными строками.
$music_id = $_GET['music_id']; if( $_GET['task'] == "copy" && $music_id > 0) { ob_end_clean(); $music_tb = $database->database_fetch_assoc($database->database_query("SELECT owner_user_id FROM se_music WHERE music_id='{$music_id}' LIMIT 1")); $owner_user_id = trim($music_tb[owner_user_id]); if(strrchr($owner_user_id, ',')) { $owner_user_id_text = explode(',', $owner_user_id); $owner_user_id_update = ""; foreach($owner_user_id_text as $owner_user_id) { if($owner_user_id != $user->user_info['user_id']) $owner_user_id_update = $owner_user_id_update . "" . $owner_user_id . ","; } $owner_user_id_update = $owner_user_id_update . "" . $user->user_info['user_id']; } else { if($owner_user_id == $user->user_info['user_id'] || strlen($owner_user_id) == 0) $owner_user_id_update = $user->user_info['user_id']; if( strlen($owner_user_id) > 0 ) $owner_user_id_update = $owner_user_id . "," . $user->user_info['user_id']; } $database->database_query("UPDATE `se_music` SET `owner_user_id` = '{$owner_user_id_update}' WHERE `music_id` = '{$music_id}' LIMIT 1"); }
- Открыть: user_music.php
Найти
Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть.$musiclist = $music->music_list();
Добавить
Подсказка: Добавьте эти строки на новой строке перед ранее найденными строками.
if( $task == "removesong" && $music_id > 0) { ob_end_clean(); $music_tb = $database->database_fetch_assoc($database->database_query("SELECT owner_user_id FROM se_music WHERE music_id='{$music_id}' LIMIT 1")); $owner_user_id = $music_tb[owner_user_id]; if(strrchr($owner_user_id, ',')) { $owner_user_id_text = explode(',', $owner_user_id); $owner_user_id_db = ""; foreach($owner_user_id_text as $owner_user_id) { if($owner_user_id != $user->user_info['user_id']) $owner_user_id_db = $owner_user_id_db . "" . $owner_user_id . ","; } $owner_user_id_db = trim(substr_replace($owner_user_id_db, "", strlen($owner_user_id_db) - 1)); } else { if($owner_user_id == $user->user_info['user_id']) $owner_user_id_text = ''; } $database->database_query("UPDATE `se_music` SET `owner_user_id` = '{$owner_user_id_db}' WHERE `music_id` = '{$music_id}' LIMIT 1"); }
- Открыть: browse_music.tpl
Найти
Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть.{if $user->user_exists && $user->level_info.level_music_allow_downloads}</pre> <div style="margin-top: 4px;"><a type="application/force-download" href="{$media_path}">{lang_print id=4000095}</a></div> <pre> {/if}
Добавить после
Подсказка: Добавьте эти строки на новой строке после ранее найденных строк.{if $user->user_friended($browse_music_list[browse_music_list_loop].user_id, 1) && $user->is_already_music($browse_music_list[browse_music_list_loop].music_id) == 0}</pre> <div style="font-weight: bold; font-size: 8pt; text-align: right;"><a title="Скопировать музыку к себе" href="browse_music.php?task=copy&music_id={$browse_music_list[browse_music_list_loop].music_id}">Копировать</a></div> <pre> {/if}
- Открыть: user_music.tpl
Найти
Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть.{assign var='media_dir' value=$url->url_userdir($user->user_info.user_id)} {section name=music_loop loop=$musiclist}
Заменить
Подсказка: Произведите замену ранее найденных строк.
{section name=music_loop loop=$musiclist} {assign var='media_dir' value=$url->url_userdir($musiclist[music_loop].music_user_id)}
Найти
Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть.
<input type="checkbox" name="delete_music_{$musiclist[music_loop].music_id}" value="1" />
Заменить
Подсказка: Произведите замену ранее найденных строк.
{if $musiclist[music_loop].music_user_id == $user->user_info.user_id}<input type="checkbox" name="delete_music_{$musiclist[music_loop].music_id}" value="1" />{/if}
Найти
Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть.
<span class="seMusicTitleEdit"> (<a onclick="SocialEngine.Music.editMusicTitle({$musiclist[music_loop].music_id});" href="javascript:void(0);">{lang_print id=187}</a>)</span>
Заменить
Подсказка: Произведите замену ранее найденных строк.
{if $musiclist[music_loop].music_user_id == $user->user_info.user_id}<span class="seMusicTitleEdit"> (<a onclick="SocialEngine.Music.editMusicTitle({$musiclist[music_loop].music_id});" href="javascript:void(0);">{lang_print id=187}</a>)</span>{/if}
Найти
Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть.
<span class="seMusicDelete"><a onclick="SocialEngine.Music.deleteMusic({$musiclist[music_loop].music_id});" href="javascript:void(0);">{lang_print id=155}</a> </span>
Заменить
Подсказка: Произведите замену ранее найденных строк.
{if $musiclist[music_loop].music_user_id == $user->user_info.user_id} <span class="seMusicDelete"><a onclick="SocialEngine.Music.deleteMusic({$musiclist[music_loop].music_id});" href="javascript:void(0);">{lang_print id=155}</a> </span> {else} <span class="seMusicDelete"><a href=" user_music.php?task=removesong&music_id={$musiclist[music_loop].music_id}">{lang_print id=155}</a> </span> {/if}
Готово! Теперь на странице «browse_music.php» напротив музыки будет показана ссылка «Копировать» в том случае, если ее нет у участника. На странице «user_music.php» можно будет удалить музыку, которую скопировали от друзей.
Если удобнее читать данную статью в программе Word, можно скачать по ссылке Плагин музыка – копирование музыки у друзей в SocialEngine Excalibur
Автор: Евтеев Евгений Александрович