В связи с большим количеством созданных тем по клонированию модулей, решил написать небольшой мануальчик с примерами. Я не поэт, поэтому расписывать красиво не умею. Что будет не понятно, спрашивайте, чем смогу, помогу. Пример буду показывать на клоне модуля Media
AntiSlaed_4.2_Mod_by_Sergey_Next.
Ну что же... начнем.
1) Берем модуль media, копируем себе на комп, переименовываем его. Я для примера переименую наш модуль в films.
2) Начинаем редактировать файлы нашего нового модуля. Начнем мы с index.php модуля. Открываем его любым блокнотом, ищем все попадающиеся слова media и заменяем на films. Только не спешим заменять все сразу, чтобы не наизменять лишнего. Все языковые _MEDIA, меняем на _FILMS. Не забудте добавить в
lang-russian.phpКОД
define("_FILMS","Фильмы");
По аналогии правим и index.php админки. Далее открываем links.php админки нашего модуля и заменяем
КОД
adminmenu($admin_file.".php?op=media", _MEDIA, "media.png");
на
КОД
adminmenu($admin_file.".php?op=films", _FILMS, "media.png");
3) Теперь заходим в phpmyadmin, делаем экспорт таблицы ".prefix."_media, меняем название нашей таблицы на ".prefix."_films и добавляем новую таблицу в нашу базу данных.
Но для полноценной работы модуля, этого мало. Теперь идем дальше... Чтобы работали комментарии в модуле, нам необходимо открыть
admin\modules\comments.php. Находим
КОД
} elseif ($modul == "media") {
$db->sql_query("UPDATE ".$prefix."_media SET totalcom=totalcom-1 WHERE id='$cid'");
и заменяем на
КОД
} elseif ($modul == "films") {
$db->sql_query("UPDATE ".$prefix."_films SET totalcom=totalcom-1 WHERE id='$cid'");
Как видно, изменилось только слово media на films. В разных версиях, запись может отличаться от приведенной мной. Поэтому рекомендую искать не всю запись целиком, а просто по названию модуля media.
4) Далее чтобы работал и в админке была возможность настроить рейтинг нового модуля, нам необходимо отредактировать файл
admin\modules\ratings.phpОпять же открываем и ещем по названию модуля media. Первое что я нашел
КОД
$mods = array("account", "faq", "files", "jokes", "links", "media", "news", "pages", "shop");
$lang = array(_ACCOUNT, _FAQ, _FILES, _JOKES, _LINKS, _MEDIA, _NEWS, _PAGES, _SHOP);
после того как я добавил сюда и новый модуль, получилось
КОД
$mods = array("account", "faq", "files", "jokes", "links", "media", "films", "news", "pages", "shop");
$lang = array(_ACCOUNT, _FAQ, _FILES, _JOKES, _LINKS, _MEDIA, _FILMS, _NEWS, _PAGES, _SHOP);
Также в этом файле media есть в функции function ratings_save_conf()
КОД
$mods = array("account", "faq", "files", "jokes", "links", "media", "news", "pages", "shop");
после того как я добавил модуль новый, получилось:
КОД
$mods = array("account", "faq", "files", "jokes", "links", "media", "films", "news", "pages", "shop");
5) Чтобы в модуле можно было загружать изображения, открываем файл
admin\modules\uploads.php и делаем все по аналогии как в предыдущем шаге.
6) Если в админке необходимо сделать возможность видеть Новые фильмы, недоступные фильмы.. То открываем файл
function/admin.php, находим по слову media, копируем функцию... (хз как написать (IMG:
http://antislaed.net/style_emoticons/default/smile.gif) )
КОД
if (is_active("media") && is_admin_modul("media")) {
$num = $db->sql_numrows($db->sql_query("SELECT id FROM ".$prefix."_media WHERE status='0'"));
$w_content .= "<tr><td><a href=\"".$admin_file.".php?op=media&status=1\">"._NEWMEDIA."</a>:</td><td>$num</td></tr>";
$num = $db->sql_numrows($db->sql_query("SELECT id FROM ".$prefix."_media WHERE status='2'"));
$w_content .= "<tr><td><a href=\"".$admin_file.".php?op=media&status=2\">"._BROCFILES."</a>:</td><td>$num</td></tr>";
}
После того как заменили в скопированной функции media на films, получилось
КОД
if (is_active("films") && is_admin_modul("films")) {
$num = $db->sql_numrows($db->sql_query("SELECT id FROM ".$prefix."_films WHERE status='0'"));
$w_content .= "<tr><td><a href=\"".$admin_file.".php?op=films&status=1\">"._NEWFILMS."</a>:</td><td>$num</td></tr>";
$num = $db->sql_numrows($db->sql_query("SELECT id FROM ".$prefix."_films WHERE status='2'"));
$w_content .= "<tr><td><a href=\"".$admin_file.".php?op=films&status=2\">"._BROCFILES."</a>:</td><td>$num</td></tr>";
}
Я думаю смысл действий понятен? дальше по аналогии проделываем тоже самое
function/function.php,
function/user.php и в папке uploads не забудте создать папку с названием модуля. Ну вот вродебы и все.
[hr]
Немного освободился, решил дополнить небольшой мануальчик.
Теперь сделаем поиск для нашего клонированного модуля. Для этого открываем файл
admin\modules\settings.php. Почти всамом низу файла settings.php ищем строку
КОД
."\$conf['search'] = \"auto_links,faq,files,jokes,links,media,news,pages,shop\";\n"
После добавления сюда названия нашего модуля, получаем
КОД
."\$conf['search'] = \"auto_links,faq,files,jokes,links,media,news,pages,shop,films\";\n"
Рекомендую добавлять в самый конец, иначе прийдется делать больше телодвижений чтобы заработал поиск в нашем модуле.Сохраняем файл. Далее открываем
modules\search\index.php. Находим:
КОД
$lang = array(_A_LINKS, _FAQ, _FILES, _JOKES, _LINKS, _MEDIA, _NEWS, _PAGES, _SHOP);
После добавления названия модуля (добавляем то название, которое указывали в
language\lang-russian.php) получаем
КОД
$lang = array(_A_LINKS, _FAQ, _FILES, _JOKES, _LINKS, _MEDIA, _NEWS, _PAGES, _SHOP, _FILMS);
Рекомендую также добавлять в самый конецТеперь в этом же файле, в это же функции чуть ниже ищем модуль
media.
КОД
} elseif ($val == "media") {
include("config/config_media.php");
$result = $db->sql_query("SELECT m.id, m.name, m.title, m.subtitle, m.description, m.date, c.id, c.title, u.user_name FROM ".$prefix."_media AS m LEFT JOIN ".$prefix."_categories AS c ON (m.cid=c.id) LEFT JOIN ".$prefix."_users AS u ON (m.uid=u.user_id) WHERE date <= now() AND status!='0' AND (m.title LIKE '%".$word."%' OR m.subtitle LIKE '%".$word."%' OR m.description LIKE '%".$word."%') ORDER BY date DESC");
while (list($id, $uname, $title, $subtitle, $description, $date, $cid, $ctitle, $user_name) = $db->sql_fetchrow($result)) {
$defis_dec = urldecode($confm['defis']);
$title = ($subtitle) ? $title." $defis_dec ".$subtitle : $title;
$atitle = "<a href=\"index.php?name=$val&op=view&id=$id&word=".urlencode($word)."\" title=\"$title\">".search_color($title, $word)."</a>";
$aimg = "<span id=\"cont\"><img src=\"".img_find("all/plus")."\" border=\"0\" align=\"middle\" alt=\""._READMORE."\" title=\""._READMORE."\" id=\"menu".$a."\" onclick=\"SwitchMenu('sub".$a."')\" style=\"cursor:pointer;\"/></span>";
$ahref = "<a href=\"index.php?name=$val&op=view&id=$id&word=".urlencode($word)."\" target=\"_blank\" title=\""._WINDOWNEW."\"><img src=\"".img_find("all/content")."\" border=\"0\" align=\"middle\" alt=\""._WINDOWNEW."\"/></a>";
$text = "<div id=\"sub".$a."\" $display>".search_color(bb_decode($description, $val), $word)."</div>";
$tdate = _DATE.": ".format_time($date);
$tmodul = _MODUL.": <a href=\"index.php?name=$val\" title=\"".$lang[5]."\">".$lang[5]."</a>";
$ctitle = (!$ctitle) ? _CATEGORY.": "._NO : _CATEGORY.": <a href=\"index.php?name=$val&cat=$cid\" title=\"".$ctitle."\">".cutstr($ctitle, 15)."</a>";
$author = ($user_name) ? _POSTEDBY.": ".user_info($user_name, 1) : (($uname) ? _POSTEDBY.": ".$uname : _POSTEDBY.": ".$confu['anonym']);
$edit = (is_moder($val)) ? ad_edit($admin_file.".php?op=media_add&id=".$id) : "";
$conts[] = array($id, $atitle, $aimg, $ahref, $edit, $text, $tdate, $tmodul, $ctitle, $author, "");
$a++;
}
Копируем этот код и вставляем после самого последнего модуля (
не забываем переименовать media на films), у меня самым последним модулем идет shop. В результате получем:
КОД
} elseif ($val == "shop") {
$result = $db->sql_query("SELECT p.product_id, p.product_time, p.product_title, p.product_text, p.product_desc, c.id, c.title FROM ".$prefix."_products AS p LEFT JOIN ".$prefix."_categories AS c ON (p.product_cid=c.id) WHERE product_time <= now() AND product_active='1' AND (p.product_title LIKE '%".$word."%' OR p.product_text LIKE '%".$word."%' OR p.product_desc LIKE '%".$word."%') ORDER BY product_time DESC");
while (list($id, $date, $title, $hometext, $bodytext, $cid, $ctitle) = $db->sql_fetchrow($result)) {
$atitle = "<a href=\"index.php?name=$val&op=view&id=$id&word=".urlencode($word)."\" title=\"$title\">".search_color($title, $word)."</a>";
$description = ($bodytext) ? $hometext."<br/><br/>".$bodytext : $hometext;
$aimg = "<span id=\"cont\"><img src=\"".img_find("all/plus")."\" border=\"0\" align=\"middle\" alt=\""._READMORE."\" title=\""._READMORE."\" id=\"menu".$a."\" onclick=\"SwitchMenu('sub".$a."')\" style=\"cursor:pointer;\"/></span>";
$ahref = "<a href=\"index.php?name=$val&op=view&id=$id&word=".urlencode($word)."\" target=\"_blank\" title=\""._WINDOWNEW."\"><img src=\"".img_find("all/content")."\" border=\"0\" align=\"middle\" alt=\""._WINDOWNEW."\"/></a>";
$text = "<div id=\"sub".$a."\" $display>".search_color(bb_decode($description, $val), $word)."</div>";
$tdate = _DATE.": ".format_time($date);
$tmodul = _MODUL.": <a href=\"index.php?name=$val\" title=\"".$lang[8]."\">".$lang[8]."</a>";
$ctitle = (!$ctitle) ? _CATEGORY.": "._NO : _CATEGORY.": <a href=\"index.php?name=$val&cat=$cid\" title=\"".$ctitle."\">".cutstr($ctitle, 15)."</a>";
$edit = (is_moder($val)) ? ad_edit($admin_file.".php?op=shop_add_products&id=".$id) : "";
$conts[] = array($id, $atitle, $aimg, $ahref, $edit, $text, $tdate, $tmodul, $ctitle, "", "");
$a++;
}
} elseif ($val == "films") {
include("config/config_films.php");
$result = $db->sql_query("SELECT m.id, m.name, m.title, m.subtitle, m.description, m.date, c.id, c.title, u.user_name FROM ".$prefix."_films AS m LEFT JOIN ".$prefix."_categories AS c ON (m.cid=c.id) LEFT JOIN ".$prefix."_users AS u ON (m.uid=u.user_id) WHERE date <= now() AND status!='0' AND (m.title LIKE '%".$word."%' OR m.subtitle LIKE '%".$word."%' OR m.description LIKE '%".$word."%') ORDER BY date DESC");
while (list($id, $uname, $title, $subtitle, $description, $date, $cid, $ctitle, $user_name) = $db->sql_fetchrow($result)) {
$defis_dec = urldecode($confm['defis']);
$title = ($subtitle) ? $title." $defis_dec ".$subtitle : $title;
$atitle = "<a href=\"index.php?name=$val&op=view&id=$id&word=".urlencode($word)."\" title=\"$title\">".search_color($title, $word)."</a>";
$aimg = "<span id=\"cont\"><img src=\"".img_find("all/plus")."\" border=\"0\" align=\"middle\" alt=\""._READMORE."\" title=\""._READMORE."\" id=\"menu".$a."\" onclick=\"SwitchMenu('sub".$a."')\" style=\"cursor:pointer;\"/></span>";
$ahref = "<a href=\"index.php?name=$val&op=view&id=$id&word=".urlencode($word)."\" target=\"_blank\" title=\""._WINDOWNEW."\"><img src=\"".img_find("all/content")."\" border=\"0\" align=\"middle\" alt=\""._WINDOWNEW."\"/></a>";
$text = "<div id=\"sub".$a."\" $display>".search_color(bb_decode($description, $val), $word)."</div>";
$tdate = _DATE.": ".format_time($date);
[b]$tmodul = _MODUL.": <a href=\"index.php?name=$val\" title=\"".$lang[9]."\">".$lang[9]."</a>";[/b]
$ctitle = (!$ctitle) ? _CATEGORY.": "._NO : _CATEGORY.": <a href=\"index.php?name=$val&cat=$cid\" title=\"".$ctitle."\">".cutstr($ctitle, 15)."</a>";
$author = ($user_name) ? _POSTEDBY.": ".user_info($user_name, 1) : (($uname) ? _POSTEDBY.": ".$uname : _POSTEDBY.": ".$confu['anonym']);
$edit = (is_moder($val)) ? ad_edit($admin_file.".php?op=media_add&id=".$id) : "";
$conts[] = array($id, $atitle, $aimg, $ahref, $edit, $text, $tdate, $tmodul, $ctitle, $author, "");
$a++;
}
}
}
}
$offset = ($num - 1) * $conf['searchnum'];
Я для большей наглядности привел больший участок кода. Также обратите внимание на строку выделенную жирным.
$lang[9] вам необходимо указать в зависимости от того каким по счету идет клонированный модуль. Счет начинается с $lang[0]. Под таким числом у вас должно везде быть вставлено название модуля (с места где я начал описывать как сделать поиск для клонированного модуля.) И поэтому я писал что рекомендую ставить название модуля в конец. Если же Вы решите убратькакие-то модули (мало ли просто мешать будут, то вам нужно будет убрать их названия везде, и изменить у всех модулей $lang[какое-то число]).
Теперь сохраняем файл. Вот и все, ничего сложного нету.
ПЕРЕД ИЗМЕНЕНИЕМ ФАЙЛОВ, СДЕЛАЙТЕ РЕЗЕРВНУЮ КОПИЮ! ЧТОБЫ ПОТОМ НЕ ПИСАЛИ ХЕЛП СРОЧНО САЙТ НЕ РАБОТАЕТ
PS. Админы и модераторы, если посчитаете нужным, сделайте тему важной, чтобы проще было найти ответ пользователям. Если где-то сделал грубые ошибки, уж извеняйте, устал сильно, голова не соображает (IMG:
http://antislaed.net/style_emoticons/default/smile.gif)
Сообщение отредактировал MrSmit: Jan 9 2009, 22:07