Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как сделать смену категории новости по достижении даты публикации?

Как сделать смену категории новости по достижении даты публикации?


     17.07.2017    Все вопросы » Общие вопросы по PHP    1790

вопрос
Ситуация такая:
На сайте есть раздел с афишей города. Пользователи с помощью addnews добавляют события и в качестве даты события используется дата публикации новости публикации{date},(если кому интересно, могу рассказать ,как это сделать) то есть события на будущее. Как сделать так, чтобы по достижению времени публикации события, категория у новости менялась на другую категорию(архив)?

Ответил: hakypuhbiu


Вот лови.

10 комментариев

alukardua
Юзер

alukardua - 17 июля 2017 08:47 -

Есть Хак Dle смена категории по наступлению даты, сразу говорю он немой, найден на просторах интернета
1. Выполнить запрос заменив префикс на свой:
- Для utf-8:
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=utf8 AUTO_INCREMENT=1 ;

- Для cp-1251
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 ;


alukardua
Юзер

alukardua - 17 июля 2017 08:48 -

2. Открыть engine/inc/addnews.php

- Найти:

    Calendar.setup({
        inputField     :    "e_date_c",     // id of the input field
        ifFormat       :    "%Y-%m-%d",      // format of the input field
        button         :    "e_trigger_c",  // trigger for the calendar (button ID)
        align          :    "Br",           // alignment
        singleClick    :    true
    });
</script></td>
    </tr>
    <tr>
        <td colspan="2"><div class="hr_line"></div></td>
    </tr>
    
- Добавить ниже:

    <tr>
        <td height="29" style="padding-left:5px;">Когда наступит дата:</td>
        <td><input type="text" name="expires_cat" id="e_date_cat" size="20"  class="edit bk">
<img src="engine/skins/images/img.gif"  align="absmiddle" id="e_trigger_cat" style="cursor: pointer; border: 0" /> То перенести в: 
<select data-placeholder="{$lang['addnews_cat_sel']}" name="expires_category[]" id="expires_category" onchange="onCategoryChange(this)" $category_multiple style="width:350px;">
		{$categories_list}
</select>
<a href="#" class="hintanchor" onMouseover="showhint('Когда наступит указанная дата, то новость будет перемещена в указанные категории.', this, event, '320px')">[?]</a>
<script type="text/javascript">
    Calendar.setup({
        inputField     :    "e_date_cat",     // id of the input field
        ifFormat       :    "%Y-%m-%d",      // format of the input field
        button         :    "e_trigger_cat",  // trigger for the calendar (button ID)
        align          :    "Br",           // alignment
        singleClick    :    true
    });
</script></td>
    </tr>
    <tr>
        <td colspan="2"><div class="hr_line"></div></td>
    </tr>

- Найти:

} else $expires = '';

- Добавить ниже:

	/*
	// Получаем время истечения категории
	// в переменную $expires_cat
	*/
	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')" );
	}	

alukardua
Юзер

alukardua - 17 июля 2017 08:48 -

2. Открыть engine/inc/addnews.php

- Найти:

    Calendar.setup({
        inputField     :    "e_date_c",     // id of the input field
        ifFormat       :    "%Y-%m-%d",      // format of the input field
        button         :    "e_trigger_c",  // trigger for the calendar (button ID)
        align          :    "Br",           // alignment
        singleClick    :    true
    });
</script></td>
    </tr>
    <tr>
        <td colspan="2"><div class="hr_line"></div></td>
    </tr>
    
- Добавить ниже:

    <tr>
        <td height="29" style="padding-left:5px;">Когда наступит дата:</td>
        <td><input type="text" name="expires_cat" id="e_date_cat" size="20"  class="edit bk">
<img src="engine/skins/images/img.gif"  align="absmiddle" id="e_trigger_cat" style="cursor: pointer; border: 0" /> То перенести в: 
<select data-placeholder="{$lang['addnews_cat_sel']}" name="expires_category[]" id="expires_category" onchange="onCategoryChange(this)" $category_multiple style="width:350px;">
		{$categories_list}
</select>
<a href="#" class="hintanchor" onMouseover="showhint('Когда наступит указанная дата, то новость будет перемещена в указанные категории.', this, event, '320px')">[?]</a>
<script type="text/javascript">
    Calendar.setup({
        inputField     :    "e_date_cat",     // id of the input field
        ifFormat       :    "%Y-%m-%d",      // format of the input field
        button         :    "e_trigger_cat",  // trigger for the calendar (button ID)
        align          :    "Br",           // alignment
        singleClick    :    true
    });
</script></td>
    </tr>
    <tr>
        <td colspan="2"><div class="hr_line"></div></td>
    </tr>

- Найти:

} else $expires = '';

- Добавить ниже:

	/*
	// Получаем время истечения категории
	// в переменную $expires_cat
	*/
	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')" );
	}	

freemans
Юзер

freemans - 17 июля 2017 08:50 -

а чтобы новость не в указанную отдельно дату, а именно по наступлению времени публикации?!

alukardua
Юзер

alukardua - 17 июля 2017 08:49 -

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 );


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']);


- Найти:

        button         :    "e_trigger_c",  // trigger for the calendar (button ID)
        align          :    "Br",           // alignment 
        singleClick    :    true
    });
</script></td>
    </tr>

- Добавить ниже:

     <tr>
        <td colspan="2"><div class="hr_line"></div></td>
    </tr>
    <tr>
        <td height="29" style="padding-left:5px;">Когда наступит дата:</td>
        <td><input type="text" name="expires_cat" id="e_date_cat" size="20"  class="edit bk" value="{$expires_cat['expires']}">
<img src="engine/skins/images/img.gif"  align="absmiddle" id="e_trigger_cat" style="cursor: pointer; border: 0" /> Перенести в: 
<select data-placeholder="{$lang['addnews_cat_sel']}" name="expires_category[]" id="expires_category" onchange="onCategoryChange(this)" $category_multiple style="width:350px;">
		{$categories_list_exp}
</select>
<a href="#" class="hintanchor" onMouseover="showhint('По наступлению даты новость будет перенесена в выбранные категории', this, event, '320px')">[?]</a>
<script type="text/javascript">
    Calendar.setup({
        inputField     :    "e_date_cat",     // id of the input field
        ifFormat       :    "%Y-%m-%d",      // format of the input field
        button         :    "e_trigger_cat",  // trigger for the calendar (button ID)
        align          :    "Br",           // alignment 
        singleClick    :    true
    });
</script></td>
    </tr>


- Найти:

	$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 ) {
          /*
          // Получаем время истечения категории
          // в переменную $expires_cat
          */
          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]'" );
					}
				}

alukardua
Юзер

alukardua - 17 июля 2017 08:52 -

я его не ковырял по этому не знаю

freemans
Юзер

freemans - 17 июля 2017 08:54 -

Выводить на сайте новости, дата публикации которых, еще не наступила(CHECK)
При включении данной настройки, на сайте будут выводится новости, дата публикации которых, еще не наступила. При отключении данной настройки, новости будут появляться на сайте по мере наступления времени публикации.

Может так лучше получится объяснить) Чтобы новости , дата публикации которых еще не наступила публиковались в одной категории, а по наступлению переводились в другую категорию.

alukardua
Юзер

alukardua - 17 июля 2017 08:55 -

Этот хак это и делает по крону

freemans
Юзер

freemans - 17 июля 2017 08:56 -

я понял, что вы написали) Но это не то, что нужно было

freemans
Юзер

freemans - 17 июля 2017 09:02 -

Предполагаю, что нужно переопределить [news_future]

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх