вопрос
Ситуация такая:
На сайте есть раздел с афишей города. Пользователи с помощью addnews добавляют события и в качестве даты события используется дата публикации новости публикации{date},(если кому интересно, могу рассказать ,как это сделать) то есть события на будущее. Как сделать так, чтобы по достижению времени публикации события, категория у новости менялась на другую категорию(архив)?
На сайте есть раздел с афишей города. Пользователи с помощью addnews добавляют события и в качестве даты события используется дата публикации новости публикации{date},(если кому интересно, могу рассказать ,как это сделать) то есть события на будущее. Как сделать так, чтобы по достижению времени публикации события, категория у новости менялась на другую категорию(архив)?
Ответил: hakypuhbiu
Вот лови.
1. Выполнить запрос заменив префикс на свой:
CREATE TABLE IF NOT EXISTS `dle_post_expcat` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`news_id` int(11) NOT NULL DEFAULT '0',
`expires` varchar(15) NOT NULL DEFAULT '',
`category` varchar(200) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `news_id` (`news_id`),
KEY `expires` (`expires`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
2. Открыть engine/inc/addnews.php
- Найти:
<div class="form-group">
<label class="control-label col-lg-2">{$lang['date_expires']}</label>
<div class="col-lg-10">
<input type="text" name="expires" data-rel="calendardate" size="20"> {$lang['cat_action']} <select class="uniform" name="expires_action"><option value="0">{$lang['edit_dnews']}</option><option value="1" >{$lang['mass_edit_notapp']}</option><option value="2" >{$lang['mass_edit_notmain']}</option><option value="3" >{$lang['mass_edit_notfix']}</option></select> <span class="help-button" data-rel="popover" data-trigger="hover" data-placement="right" data-content="{$lang['hint_expires']}" >?</span>
</div>
</div>
- Добавить ниже:
<div class="form-group">
<label class="control-label col-lg-2">Когда наступит дата:</label>
<div class="col-lg-10">
<input type="text" name="expires_cat" data-rel="calendardate" size="20"> Перенести в: <select data-placeholder="{$lang['addnews_cat_sel']}" name="expires_category[]" id="category" onchange="onCategoryChange(this)" $category_multiple style="width:100%;max-width:350px;">{$categories_list}</select> <span class="help-button" data-rel="popover" data-trigger="hover" data-placement="right" data-content="По наступлению даты новость будет перенесена в выбранные категории" >?</span>
</div>
</div>
- Найти:
} else $expires = '';
- Добавить ниже:
if( trim( $_POST['expires_cat'] ) != "" ) {
$expires_cat = $_POST['expires_cat'];
if( (($expires_cat = strtotime( $expires_cat )) === - 1) OR !$expires_cat ) {
msg( "error", $lang['addnews_error'], $lang['addnews_erdate'], "javascript:history.go(-1)" );
}
} else $expires_cat = '';
- Найти:
if( $_POST['tags'] != "" and $approve ) {
- Добавить ВЫШЕ:
if( $expires_cat ) {
$expires_category = $_POST['expires_category'];
if( !count( $expires_category ) ) {
$expires_category = array ();
$expires_category[] = '0';
}
$expires_category_list = array();
foreach ( $expires_category as $value ) {
$expires_category_list[] = intval($value);
}
$expires_category_list = $db->safesql( implode( ',', $expires_category_list ) );
$db->query( "INSERT INTO " . PREFIX . "_post_expcat (news_id, expires, category) VALUES('{$row}', '$expires_cat', '$expires_category_list')" );
}
2. Открыть engine/inc/editnews.php
- Найти:
$cat_list = explode( ',', $row['category'] );
$have_perm = 0;
- Добавить ниже:
$sql_expcat = $db->query( "SELECT category FROM " . PREFIX . "_post_expcat WHERE news_id='{$row['id']}'" );
$sql_expcat = $db->get_row( $sql_expcat );
$cat_list_exp = explode( ',', $sql_expcat['category'] );
$db->free( $sql_expcat );
- Найти:
$categories_list = CategoryNewsSelection( $cat_list, 0 );
- Добавить ниже:
$categories_list_exp = CategoryNewsSelection( $cat_list_exp, 0 );
- Найти:
if ( $expires['expires'] ) $expires['expires'] = date("Y-m-d", $expires['expires']);
- Добавить ниже:
$expires_cat = $db->super_query( "SELECT * FROM " . PREFIX . "_post_expcat where news_id = '{$row['id']}'" );
if ( $expires_cat['expires'] ) $expires_cat['expires'] = date("Y-m-d", $expires_cat['expires']);
- Найти:
<div class="form-group">
<label class="control-label col-lg-2">{$lang['date_expires']}</label>
<div class="col-lg-10">
<input type="text" name="expires" data-rel="calendardate" size="20" value="{$expires['expires']}"> {$lang['cat_action']} <select class="uniform" name="expires_action"><option value="0" {$exp_action[0]}>{$lang['edit_dnews']}</option><option value="1" {$exp_action[1]}>{$lang['mass_edit_notapp']}</option><option value="2" {$exp_action[2]}>{$lang['mass_edit_notmain']}</option><option value="3" {$exp_action[0]}>{$lang['mass_edit_notfix']}</option></select> <span class="help-button" data-rel="popover" data-trigger="hover" data-placement="right" data-content="{$lang['hint_expires']}" >?</span>
</div>
</div>
- Добавить ниже:
<div class="form-group">
<label class="control-label col-lg-2">Когда наступит дата:</label>
<div class="col-lg-10">
<input type="text" name="expires_cat" data-rel="calendardate" size="20" value="{$expires_cat['expires']}"> Перенести в: <select class="uniform" name="expires_category[]">{$categories_list_exp}</select> <span class="help-button" data-rel="popover" data-trigger="hover" data-placement="right" data-content="По наступлению даты новость будет перенесена в выбранные категории" >?</span>
</div>
</div>
- Найти:
$no_permission = FALSE;
$okdeleted = FALSE;
$okchanges = FALSE;
- Добавить ВЫШЕ:
if ($_POST['expires_cat'] ) {
$expires_cat_change = true;
} else $expires_cat_change = false;
- Найти:
// Смена автора публикации
if( $member_id['user_group'] == 1 AND $_POST['new_author'] != $_POST['old_author'] ) {
Добавить ВЫШЕ:
if ( $expires_cat_change ) {
if( trim( $_POST['expires_cat'] ) != "" ) {
$expires_cat = $_POST['expires_cat'];
if( (($expires_cat = strtotime( $expires_cat )) === - 1) OR !$expires_cat ) {
msg( "error", $lang['addnews_error'], $lang['addnews_erdate'], "javascript:history.go(-1)" );
}
} else $expires_cat = '';
if( $expires_cat ) {
$db->query( "DELETE FROM " . PREFIX . "_post_expcat WHERE news_id='$item_db[0]'" );
$expires_category = $_POST['expires_category'];
if( !count( $expires_category ) ) {
$expires_category = array ();
$expires_category[] = '0';
}
$expires_category_list = array();
foreach ( $expires_category as $value ) {
$expires_category_list[] = intval($value);
}
$expires_category_list = $db->safesql( implode( ',', $expires_category_list ) );
$db->query( "INSERT INTO " . PREFIX . "_post_expcat (news_id, expires, category) VALUES('$item_db[0]', '$expires_cat', '$expires_category_list')" );
} else {
$db->query( "DELETE FROM " . PREFIX . "_post_expcat WHERE news_id='$item_db[0]'" );
}
}
3. Открыть engine/modules/cron.php
- Найти:
$db->query( "DELETE FROM " . USERPREFIX . "_banned WHERE days != '0' AND date < '$_TIME' AND users_id = '0'" );
@unlink( ENGINE_DIR . '/cache/system/banned.php' );
- Добавить ниже:
$sql_cron = $db->query( "SELECT news_id, category FROM " . PREFIX . "_post_expcat WHERE expires <= '" . $_TIME . "'" );
while ( $row = $db->get_row( $sql_cron ) ) {
$db->query( "UPDATE " . PREFIX . "_post SET category='{$row['category']}' WHERE id='{$row['news_id']}'" );
}
$db->query( "DELETE FROM " . PREFIX . "_post_expcat WHERE expires <= '" . $_TIME . "'" );
$db->free( $sql_cron );