Тема: Групповое изменение даты в админке

Strawberry 1.1.1 / MySQL

Доброго дня! Есть необходимость сделать возможность изменения даты публикации для группы новостей в админке (т.е. как есть по умолчанию групповое удаление и  групповое изменение категории).
Именно даты - не меняя время публикации, может у кого есть нужный код для editnews.mdu ?

Re: Групповое изменение даты в админке

не встречал такой ))

Идея интересная...

Здесь молодость бродит крылато, и старость не клонит голов...
Демо площадка Strawberry 1.2 - заходим и тестируем!

Re: Групповое изменение даты в админке

Сделал сам smile
Уточню задачу - существует расписание передач (дата записи - есть дата эфира), которое почти без изменений повторяется каждые несколько дней, задача была изменить дату группы записей, не меняя время. Свёл к изменению даты на N дней вперёд - что в принципе поставленную задачу решает.

В editnews.mdu добавляем:

/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  Mass chengdata
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
if ($action == 'chengdata'){
    if (!$selected_news){
        msg('error', t('Ошибка'), t('Не выбрано записей для изменения даты.'), $PHP_SELF.'?mod=editnews');
    }

    echoheader('options', t('Изменение даты'));
?>

<form action="<?=$PHP_SELF; ?>" method="post">
<table border="0" cellpading="0" cellspacing="0" width="100%" height="100%">
 <tr>
  <td><?=t('Изменить дату для выбранных (<b>%selected</b>) записей на:', array('selected' => count($selected_news))); ?>
   <select name="move_to_chengdata"><option value=""> </option>
   <option value="86400"><?=t('на 1 день'); ?></option>
   <option value="172800"><?=t('на 2 дня'); ?></option>
   <option value="259200"><?=t('на 3 дня'); ?></option>
   <option value="345600"><?=t('на 4 дня'); ?></option>
   <option value="432000"><?=t('на 5 дней'); ?></option>
   <option value="518400"><?=t('на 6 дней'); ?></option>
   <option value="604800"><?=t('на 7 дней'); ?></option>
   </select>

<?
    foreach ($selected_news as $newsid){
?>

<input type="hidden" name="selected_news[]" value="<?=$newsid; ?>">

<?
    }
?>

<input type="hidden" name="action" value="dochengdata">
<input type="hidden" name="mod" value="editnews">
<input type="submit" value="OK">
</table>
</form>

<?
    echofooter();
}

/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  DO Mass chengdata
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
if ($action == 'dochengdata'){
    if (!$selected_news){
        msg('error', t('Ошибка'), t('Не выбрано записей для изменения даты.'), $PHP_SELF.'?mod=editnews');
    }

    if (cute_get_rights('edit_all') or (cute_get_rights('edit') and $member['username'] == $row['author'])){
        $righ_have = true;
    } else {
        $righ_have = false;
    }

    run_actions('mass-chengdata');

    $query = $sql->select(array(
             'table'  => 'news',
             'where'  => array('id = ['.join('|', $selected_news).']')
             ));

    foreach ($query as $row){
        if ($righ_have){
        
        $move_to_chengdata_end = $row['date'] + $move_to_chengdata;
        
            $sql->update(array(
            'table'  => 'news',
            'where'  => array("id = $row[id]"),
            'values' => array('date' => $move_to_chengdata_end)
            ));

            $moved_news++;
        }
    }

    msg('info', t('Изменение даты'), t('Для <b>%moved</b> из <b>%selected</b> записей дата была изменена.', array('moved' => $moved_news, 'selected' => count($selected_news))), $PHP_SELF.'?mod=editnews');
}

А так же добавляем там-же в выпадающий список действий:

<select name="action">
<option value=""><?=t('- Действие -'); ?></option>
<option value="chengdata"><?=t('Изменить дату'); ?></option>
<option value="delete"><?=t('Удалить'); ?></option>
<option value="movetocat"><?=t('Изменить категорию'); ?></option>
<option value="publish"><?=t('Опубликовать'); ?></option>
</select>

У кого будет необходимость в подобном - можете сделать так, подредактировав под свою задачу.