вопрос
Здравствуйте, помогите спецы.
В общем скачал модуль Биография Актеров, поставил для своих целей.
И все бы хорошо, но вот при редактировании новости, если поле актеры исправить, значение в базе не обновляеться а просто отчищяеться :(
Если не брать это то модуль работает.
В чем именно ошибка, я сам не могу разобраться.
Я так понимаю что проблема именно в editnews.php
Вот правки которые в него нужно было в носить.
Вот весь файл по установке
Если надо могу скинуть архив с модулем.
Спасибо за помощь товарищи.
В общем скачал модуль Биография Актеров, поставил для своих целей.
И все бы хорошо, но вот при редактировании новости, если поле актеры исправить, значение в базе не обновляеться а просто отчищяеться :(
Если не брать это то модуль работает.
В чем именно ошибка, я сам не могу разобраться.
Я так понимаю что проблема именно в editnews.php
Вот правки которые в него нужно было в носить.
Открыть файл engine/inc/editnews.php
Найти:
$exp_action = array();
$exp_action[$expires['action']] = "selected=\"selected\"";
echo <<<HTML
Заменить на:
$exp_action = array();
$exp_action[$expires['action']] = "selected=\"selected\"";
foreach ( unserialize($row['actors']) as $alt_name => $name ) $actors_array[] = $name;
$actors = implode(", ", $actors_array);
echo <<<HTML
<tr>
<td colspan="2"><div class="hr_line"></div></td>
</tr>
<tr>
<td height="29" style="padding-left:5px;">Актёры</td>
<td><textarea rows="7" name="actors" style="width:98%;" class="bk">{$actors}</textarea></td>
</tr>
Найти:
$allow_list = explode( ',', $user_group[$member_id['user_group']]['cat_add'] );
foreach ( $category as $selected ) {
if( $allow_list[0] != "all" and ! in_array( $selected, $allow_list ) and $member_id['user_group'] != 1 ) $approve = 0;
}
Ниже вставить:
//Актёры
foreach (explode(", ", $_POST['actors']) as $key => $name) $actors_array[totranslit($name)] = $name;
$actors_list = serialize($actors_array);
//Актёры
Найти (2 раза):
"UPDATE " . PREFIX . "_post set title='$title',
Заменить на:
"UPDATE " . PREFIX . "_post set title='$title', actors='$actors_list',
Вот весь файл по установке
Бография Актеров v 1.6 dle 10.1
Автор: rashpil
Модернизировал zorg346
Выполнить следующие SQL запросы:
CREATE TABLE IF NOT EXISTS `dle_actors` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`fullname` varchar(255) NOT NULL,
`alt_name` varchar(255) NOT NULL,
`birthday` datetime NOT NULL,
`foto` varchar(255) NOT NULL,
`biography` text NOT NULL,
`birthplace` varchar(255) NOT NULL,
`genres` varchar(500) NOT NULL,
`height` varchar(255) NOT NULL,
`zodiak` varchar(255) NOT NULL,
`karer` varchar(500) NOT NULL,
`love` varchar(500) NOT NULL,
`birthdayded` varchar(100) NOT NULL,
`suprug` varchar(100) NOT NULL,
`supruga` varchar(100) NOT NULL,
`id_kp` varchar(10) NOT NULL,
`mestoumer` varchar(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2;
ALTER TABLE `dle_post` ADD `actors` TEXT NOT NULL;
заходим engine/inc/options.php
После
$options['config'] = array (
добавляем
array (
'name' => 'Биография Актеров 1.6',
'url' => "$PHP_SELF?mod=actors",
'descr' => 'Модуль биографии актеров',
'image' => "uset.png",
'access' => $user_group[$member_id['user_group']]['admin_categories']
),
Если ваш префикс отличен от dle, то следует в запросах указывать имена таблиц с вашим префиксом!
Открыть файл engine/classes/js/dle_js.js
ВНИМАНИЕ! Обычно в дистрибутивах DLE этот файл закодирован. Если у вас на сервере лежит именно такой, то следует заменить его файлом из архива.
После чего найи в нём:
if (allow_dle_delete_news) {
menu[2]='<a onclick="sendNotice (\'' + m_id + '\'); return false;" href="#">' + dle_notice + '</a>';
menu[3]='<a onclick="dle_news_delete (\'' + m_id + '\'); return false;" href="#">' + dle_del_news + '</a>';
}
return menu;
};
Ниже вставить:
function ActorsMenu( link1, link2, menu_biogr, menu_link ){
var menu=new Array();
menu[0]='<a href="' + link1 + '">' + menu_biogr + '</a>';
menu[1]='<a href="' + link2 + '">' + menu_link + '</a>';
return menu;
};
Открыть файл engine/engine.php
Найти:
$allow_userinfo = FALSE;
$active = FALSE;
$newsmodule = FALSE;
Ниже вставить:
$stop_news = FALSE;
include_once ENGINE_DIR . '/data/actors_config.php';
Найти:
// ################ Вывод отдельной категории #################
if ($do == "cat" and $category != '' and $subaction == '') {
Заменить на:
// ################ Вывод отдельной категории #################
if ($do == "actors") {
include_once ENGINE_DIR . '/modules/actors.php';
} elseif ($do == "cat" and $category != '' and $subaction == '') {
Найти:
} elseif ($do == 'xfsearch') {
$cache_prefix = "_xfsearch_". $xf;
Ниже вставить:
} elseif ($a_name != '') {
$cache_prefix = "_actorfilms_". $a_name;
Найти:
if (isset($view_template) AND $view_template == "rss") {
if ($catalog) $active = dle_cache ( "rss", $catalog, false );
else $active = dle_cache ( "rss", $category_id, false );
} else {
if ($is_logged and ($user_group[$member_id['user_group']]['allow_edit'] and ! $user_group[$member_id['user_group']]['allow_all_edit'])) $config['allow_cache'] = false;
if (isset($_SESSION['dle_no_cache']) AND $_SESSION['dle_no_cache']) $config['allow_cache'] = false;
if ($cstart) $cache_id = ($cstart / $config['news_number']) + 1;
else $cache_id = "1";
if ($cache_id < 6 and !isset ( $_POST['login'] )) $active = dle_cache ( "news", $cache_id . $cache_prefix, true );
else $active = false;
}
Заменить на:
if (isset($view_template) AND $view_template == "rss") {
if ($catalog) $active = dle_cache ( "rss", $catalog, false );
else $active = dle_cache ( "rss", $category_id, false );
} elseif ($stop_news === FALSE) {
if ($is_logged and ($user_group[$member_id['user_group']]['allow_edit'] and ! $user_group[$member_id['user_group']]['allow_all_edit'])) $config['allow_cache'] = false;
if (isset($_SESSION['dle_no_cache']) AND $_SESSION['dle_no_cache']) $config['allow_cache'] = false;
if ($cstart) $cache_id = ($cstart / $config['news_number']) + 1;
else $cache_id = "1";
if ($cache_id < 6 and !isset ( $_POST['login'] )) $active = dle_cache ( "news", $cache_id . $cache_prefix, true );
elseif ($actors_config['f_cache'] == "no" AND $a_name != '' AND $do == "actors" ) $active = false;
else $active = false;
}
Найти:
if ($config['allow_quick_wysiwyg'] and ($user_group[$member_id['user_group']]['allow_edit'] or $user_group[$member_id['user_group']]['allow_all_edit'])) $allow_comments_ajax = true;
else $allow_comments_ajax = false;
} else {
include_once (ENGINE_DIR . '/modules/show.short.php');
if (! $config['allow_quick_wysiwyg']) $allow_comments_ajax = false;
if ($config['files_allow'] == "yes") if (strpos ( $tpl->result['content'], "[attachment=" ) !== false) {
$tpl->result['content'] = show_attach ( $tpl->result['content'], $attachments );
}
if (isset($view_template) AND $view_template == "rss" AND $news_found) {
if ($catalog) create_cache ( "rss", $tpl->result['content'], $catalog, false );
else create_cache ( "rss", $tpl->result['content'], $category_id, false );
} elseif ($news_found and $cache_id < 6) create_cache ( "news", $tpl->result['content'], $cache_id . $cache_prefix, true );
}
Заменить на:
if ($config['allow_quick_wysiwyg'] and ($user_group[$member_id['user_group']]['allow_edit'] or $user_group[$member_id['user_group']]['allow_all_edit'])) $allow_comments_ajax = true;
else $allow_comments_ajax = false;
} else {
if ($stop_news === FALSE) {
include_once (ENGINE_DIR . '/modules/show.short.php');
if (! $config['allow_quick_wysiwyg']) $allow_comments_ajax = false;
if ($config['files_allow'] == "yes") if (strpos ( $tpl->result['content'], "[attachment=" ) !== false) {
$tpl->result['content'] = show_attach ( $tpl->result['content'], $attachments );
}
if (isset($view_template) AND $view_template == "rss" AND $news_found) {
if ($catalog) create_cache ( "rss", $tpl->result['content'], $catalog, false );
else create_cache ( "rss", $tpl->result['content'], $category_id, false );
} elseif ($news_found and $cache_id < 6) create_cache ( "news", $tpl->result['content'], $cache_id . $cache_prefix, true );
}
}
Найти ВСЕ:
full_story, xfields, title,
Заменить на:
full_story, xfields, title, actors,
Найти ВСЕ:
p.tags,
Заменить на:
p.tags, p.actors,
Найти:
elseif ($do == 'tags') $nam_e = stripslashes($tag);
Ниже вставить:
elseif ($do == 'actors') $nam_e = $a_title;
Открыть файл .htaccess
Найти:
RewriteRule ^([0-9]+)-(.*).html(/?)+$ index.php?newsid=$1&seourl=$2 [L]
Ниже вставить:
#Актёры
RewriteRule ^films/([^/]*)(/?)+$ index.php?do=actors&action=select&a_name=$1 [L]
RewriteRule ^films/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=actors&action=select&a_name=$1&cstart=$2 [L]
RewriteRule ^biography/([^/]*)(/?)+$ index.php?do=actors&action=biography&a_name=$1 [L]
Открыть файл engine/modules/show.full.php
Найти:
$comments_num = $row['comm_num'];
Ниже вставить:
if ($actors_config['n_links'] == "yes")
foreach ($actors as $alt_name => $name) {
if (strpos($row['full_story'], $name) != FALSE){
if( $config['allow_alt_url'] == "yes" ) {
$link_b = $config['http_home_url'] . "biography/" . $alt_name . "/";
$link_a = $config['http_home_url'] . "films/" . $alt_name . "/";
} else {
$link_b = $config['http_home_url'] . "index.php?do=actors&action=biography&a_name=". $alt_name;
$link_a = $config['http_home_url'] . "index.php?do=actors&action=select&a_name=". $alt_name;
}
$row['full_story'] = str_replace($name, "<a onclick=\"return dropdownmenu(this, event, ActorsMenu('" . $link_b . "', '" . $link_a . "', 'Биография', 'Все фильмы'), '170px')\" href=\"#\">{$name}</a>", $row['full_story']);
}
}
if ($row['actors']) {
foreach (unserialize($row['actors']) as $alt_name => $name){
if( $name ) {
if( $config['allow_alt_url'] == "yes" ) {
$link_b = $config['http_home_url'] . "biography/" . $alt_name . "/";
$link_a = $config['http_home_url'] . "films/" . $alt_name . "/";
} else {
$link_b = $config['http_home_url'] . "index.php?do=actors&action=biography&a_name=". $actors[$element]['alt_name'];
$link_a = $config['http_home_url'] . "index.php?do=actors&action=select&a_name=". $actors[$element]['alt_name'];
}
if ($actors[$alt_name] != '')
$actors_link[] = "<a onclick=\"return dropdownmenu(this, event, ActorsMenu('" . $link_b . "', '" . $link_a . "', 'Биография', 'Все фильмы'), '170px')\" href=\"#\">{$name}</a>";
else
$actors_link[] = "<a href=\"{$link_a}\">{$name}</a>";
}
}
$actors_link = implode( ', ', $actors_link );
}
$tpl->set('{actors}', $actors_link);
Открыть файл engine/modules/show.short.php
Найти:
else $tpl->load_template( 'shortstory.tpl' );
Заменить на:
elseif ($a_name != '' AND $actors_config['f_tpl'] != '') $tpl->load_template( $actors_config['f_tpl'] . '.tpl' );
else $tpl->load_template( 'shortstory.tpl' );
Если нужно выводить список актёров в кратких новостях, то нужно выполнить следующий пункт, ежели не нужно, то пункт исполнять не следует
Найти:
} else {
$go_page = "$PHP_SELF?subaction=userinfo&user=" . urlencode( $row['autor'] );
$tpl->set( '[day-news]', "<a href=\"$PHP_SELF?year=".date( 'Y', $row['date'])."&month=".date( 'm', $row['date'])."&day=".date( 'd', $row['date'])."\" >" );
}
Ниже вставить:
if ($row['actors']) {
$actors_link = array();
foreach (unserialize($row['actors']) as $alt_name => $name){
if( $name ) {
if( $config['allow_alt_url'] == "yes" ) {
$link_b = $config['http_home_url'] . "biography/" . $alt_name . "/";
$link_a = $config['http_home_url'] . "films/" . $alt_name . "/";
} else {
$link_b = $config['http_home_url'] . "index.php?do=actors&action=biography&a_name=". $actors[$element]['alt_name'];
$link_a = $config['http_home_url'] . "index.php?do=actors&action=select&a_name=". $actors[$element]['alt_name'];
}
if ($alt_name == $a_name) $name = "<b>{$name}</b>"; else $name = $name;
if ($actors[$alt_name] != '')
$actors_link[] = "<a onclick=\"return dropdownmenu(this, event, ActorsMenu('" . $link_b . "', '" . $link_a . "', 'Биография', 'Все фильмы'), '170px')\" href=\"#\">{$name}</a>";
else
$actors_link[] = "<a href=\"{$link_a}\">{$name}</a>";
}
}
$actors_link = implode( ', ', $actors_link );
}
$tpl->set('{actors}', $actors_link);
Открыть файл engine/init.php
Найти:
$metatags = array (
'title' => $config['home_title'],
'description' => $config['description'],
'keywords' => $config['keywords'],
'header_title' => "" );
Ниже вставить:
//# Создаём массив с актёрами
$actors = get_vars ( "actors" );
if (! $actors) {
$actors = array ();
$db->query ( "SELECT id, name, alt_name FROM " . USERPREFIX . "_actors ORDER BY id ASC" );
while ( $row = $db->get_row () )
$actors[$row['alt_name']] = $row['name'];
set_vars ( "actors", $actors );
$db->free ();
}
Открыть файл admin.php и engine/inc/options.php и engine/inc/categories.php и engine/inc/banners.php
Найти и удалить:
function makeDropDown($options, $name, $selected) {
$output = "<select name=\"$name\">\r\n";
foreach ( $options as $value => $description ) {
$output .= "<option value=\"$value\"";
if( $selected == $value ) {
$output .= " selected ";
}
$output .= ">$description</option>\n";
}
$output .= "</select>";
return $output;
}
Открыть файл engine/inc/include/functions.inc.php
Найти:
if( ! defined( 'DATALIFEENGINE' ) ) {
die( "Hacking attempt!" );
}
Ниже вставить:
function makeDropDown($options, $name, $selected) {
$output = "<select size=1 name=\"$name\">\r\n";
foreach ( $options as $value => $description ) {
$output .= "<option value=\"$value\"";
if( $selected == $value ) {
$output .= " selected ";
}
$output .= ">$description</option>\n";
}
$output .= "</select>";
return $output;
}
Открыть файл engine/inc/addnews.php
Найти:
if( $user_group[$member_id['user_group']]['allow_fixed'] and $config['allow_fixed'] ) $fix_input = "<input type=\"checkbox\" name=\"news_fixed\" value=\"1\"> $lang[addnews_fix]";
if( $user_group[$member_id['user_group']]['allow_main'] ) $main_input = "<input type=\"checkbox\" name=\"allow_main\" value=\"1\" checked> {$lang['addnews_main']}";
if( $config['allow_admin_wysiwyg'] != "yes" ) $fix_br = "<input type=\"checkbox\" name=\"allow_br\" value=\"1\" checked> {$lang['allow_br']}";
else $fix_br = "";
echo <<<HTML
Ниже вставить:
<tr>
<td colspan="2"><div class="hr_line"></div></td>
</tr>
<tr>
<td height="29" style="padding-left:5px;">Актёры</td>
<td><textarea rows="7" name="actors" style="width:98%;" class="bk"></textarea></td>
</tr>
Найти:
foreach ( $category as $value ) {
$category_list[] = intval($value);
}
$category_list = $db->safesql( implode( ',', $category_list ) );
Ниже вставить:
//Актёры
foreach (explode(", ", $_POST['actors']) as $key => $name) $actors_list[totranslit($name)] = $name;
$actors_list = serialize($actors_list);
//Актёры
Найти:
symbol, tags, metatitle
Заменить на:
symbol, tags, metatitle, actors
Найти:
'$catalog_url', '{$_POST['tags']}', '{$metatags['title']}'
Заменить на:
'$catalog_url','{$_POST['tags']}', '{$metatags['title']}', '{$actors_list}'
Открыть файл engine/inc/editnews.php
Найти:
$exp_action = array();
$exp_action[$expires['action']] = "selected=\"selected\"";
echo <<<HTML
Заменить на:
$exp_action = array();
$exp_action[$expires['action']] = "selected=\"selected\"";
foreach ( unserialize($row['actors']) as $alt_name => $name ) $actors_array[] = $name;
$actors = implode(", ", $actors_array);
echo <<<HTML
<tr>
<td colspan="2"><div class="hr_line"></div></td>
</tr>
<tr>
<td height="29" style="padding-left:5px;">Актёры</td>
<td><textarea rows="7" name="actors" style="width:98%;" class="bk">{$actors}</textarea></td>
</tr>
Найти:
$allow_list = explode( ',', $user_group[$member_id['user_group']]['cat_add'] );
foreach ( $category as $selected ) {
if( $allow_list[0] != "all" and ! in_array( $selected, $allow_list ) and $member_id['user_group'] != 1 ) $approve = 0;
}
Ниже вставить:
//Актёры
foreach (explode(", ", $_POST['actors']) as $key => $name) $actors_array[totranslit($name)] = $name;
$actors_list = serialize($actors_array);
//Актёры
Найти (2 раза):
"UPDATE " . PREFIX . "_post set title='$title',
Заменить на:
"UPDATE " . PREFIX . "_post set title='$title', actors='$actors_list',
В файле шаблона templates/Ваш_Шаблон/fullstory.tpl
в нужное место вставить тег {actors}
Если нужно отобразить список актёров и в кратком виде новостей, то тег следует прописать и в templates/Ваш_Шаблон/shortstory.tpl
Напомню, что на папки uploads/actors/posters/ и uploads/actors/posters/mini/ следует выставить права 777, для того чтобы скрипт мог самостоятельно загружать картинки и не напрягать владельца сайта по мелочам :)
Когда установка модуля завершена и вы убедитесь в том что все действия выполнены правильно, можно конвертировать данные из дополнительных полей (Если таковые имеются).
Вроди и всё. Не забываем о правах на конфигурационные файлы (666) и на права папок с кешами (777). Если что, вы знаете где меня найти :)
Если надо могу скинуть архив с модулем.
Спасибо за помощь товарищи.
Ответил: alexgut
То есть если запись обнуляется то проблема где-то тут
То есть $actors_list не содержит данных.
Формируеться он тут
А берется из поля
В чем тут ошибка? :/
"UPDATE " . PREFIX . "_post set title='$title', actors='$actors_list',
То есть $actors_list не содержит данных.
Формируеться он тут
$exp_action[$expires['action']] = "selected=\"selected\"";
foreach ( unserialize($row['actors']) as $alt_name => $name ) $actors_array[] = $name;
А берется из поля
<tr>
<td colspan="2"><div class="hr_line"></div></td>
</tr>
<tr>
<td height="29" style="padding-left:5px;">Актёры</td>
<td><textarea rows="7" name="actors" style="width:98%;" class="bk">{$actors}</textarea></td>
</tr>
В чем тут ошибка? :/