Начинаем создавать календарь событий в InstantCMS 1.9

1487
Сайт у меня на Instant старой версии 1.9, поэтому не знаю, подойдёт ли то что я сделал, для других версий.
Итак - нужен календарь предстоящих событий.
Я сделал его на основе существующих статей/новостей.
То есть любой Контент в разделе "Разделы и статьи" после этого может быть в Календаре предстоящих событий.

1. Первым дело добавляем 3 поля в таблицу cms_content:
is_cal тип int(11) по умолчанию 0
cal_bdate тип datetime
cal_edate тип datetime
первое поле будет означать - будет ли статья отражаться в календаре и поля дат - это дата начала события и дата конца события.

2. Теперь нам нужно, чтобы в админке можно было работать с этими полями, то есть чтобы мы в админке у статей/новостей могли указывать дату начала и конца события и ставить галочку, нужно ли показывать статью в календаре или не нужно.
Вот как это должно будет выглядеть в админке после внесения изменений:


Открываем файл \admin\applets\content.php
находим строчки примерно 246
Код PHP:
  1. if ($do == 'update'){
  2. if(isset($_REQUEST['id'])) {
после них вставляем:
Код PHP:
  1. $article['is_cal'] = $inCore->request('is_cal', 'int', 0);
  2. $article['cal_bdate'] = $inCore->request('cal_bdate', 'str', '');
  3. $article['cal_edate'] = $inCore->request('cal_edate', 'str', '');
  4.  
далее находим строчку
Код PHP:
  1. if ($do == 'submit'){
после неё вставляем:
Код PHP:
  1. $article['is_cal'] = $inCore->request('is_cal', 'int', 0);
  2. $article['cal_bdate'] = $_REQUEST['cal_bdate'];
  3. $article['cal_edate'] = $_REQUEST['cal_edate'];
далее находим строчки
Код PHP:
  1. <?php ob_start(); ?>
  2. {tab=Публикация}
и после них вставляем:
Код PHP:
  1. <table width="100%" cellpadding="0" cellspacing="0" border="0" class="checklist">
  2. <tr>
  3. <td width="20"><input type="checkbox" name="is_cal" id="is_cal" value="1" <?php if ($mod['is_cal'] || $do=='add') { echo 'checked="checked"'; } ?>/></td>
  4. <td><label for="published"><strong>Публиковать событие в календаре</strong></label></td>
  5. </tr>
  6. </table>
  7.  
  8. <div style="margin-top:20px">
  9. <strong>Дата начала события:</strong>
  10.  
  11. <span class="hinttext">В формате ГГГГ-ММ-ДД</span>
  12. </div>
  13. <div><input name="cal_bdate" type="text" style="width:99%" <?php if(@!$mod['is_cal']) { echo 'value="'.date('Y-m-d').'"'; } else { echo 'value="'.$mod['cal_bdate'].'"'; } ?>id="cal_bdate" /></div>
  14.  
  15. <div style="margin-top:20px">
  16. <strong>Дата окончания события:</strong>
  17.  
  18. <span class="hinttext">В формате ГГГГ-ММ-ДД</span>
  19. </div>
  20. <div><input name="cal_edate" type="text" style="width:99%" <?php if(@!$mod['is_cal']) { echo 'value="'.date('Y-m-d').'"'; } else { echo 'value="'.$mod['cal_edate'].'"'; } ?>id="cal_edate" /></div>
Сохраняем изменения, закрываем этот файл.

3. Теперь нужно, чтобы введенная в эти новые поля информация записывались в базу данных.
открываем файл components\content\model.php
нужно вставить значения этих полей в SQL-запросы к базе данных.
Находим функцию
Код PHP:
  1. public function addArticle($article){
в ней строчку
Код PHP:
  1. $sql = "INSERT INTO cms_content
и перед VALUES и после
Код PHP:
  1. url, tpl
дописываем
Код PHP:
  1. ,is_cal, cal_bdate, cal_edate
и там-же после
Код PHP:
  1. '{$article['tpl']}'
дописываем
Код PHP:
  1. ,'{$article['is_cal']}', '{$article['cal_bdate']}', '{$article['cal_edate']}'
это мы добавили вставку этих полей в базу данных.
Теперь находим функцию, код
Код PHP:
  1. public function updateArticle
и в ней перед кодом
Код PHP:
  1. WHERE id = '$id'
  2. LIMIT 1";
вставляем код
Код PHP:
  1. ,
  2. is_cal='{$article['is_cal']}',
  3. cal_bdate='{$article['cal_bdate']}',
  4. cal_edate='{$article['cal_edate']}'
это при редактировании в админке данные этих полей в базе данных будут изменяться.
Сохраняем изменения, закрываем этот файл.

4. Ну и последнее, нужен какой-то модуль, в котором будет выводиться календарь.
Делаем этот модуль и всё работает. Я сделал модуль на основании стандартного модуля "mod_latest" из папки modules.
Не помню как именно. Кажется сделал копию папки "mod_latest" и переименовал её в "mod_latest_calendar" и изменил там названия внутри файлов с mod_latest на mod_latest_calendar, а в админке добавил через Добавить модуль.
Если кому будет интересно конечно поделюсь файлами этого модуля.
Вот ссылка на модуль.
Распаковываем файл и папку mod_latest_calendar кладём в папку /modules,
файл шаблона mod_latest_calendar.tpl кладем в папку /templates/шаблон/modules
и языковой файл mod_latest_calendar.php кладем в /languages/ru/modules

Ну вроде ничего не забыл рассказать... ну разве что стили, но у каждого они свои...
впрочем, раз уж стал рассказывать, то чтобы было как у меня в styles.css добавляем следующие стили из данного файла. Посмотреть как выглядит можно тут: http://okrug.info модуль "Календарь предстоящих событий" на главной странице.
Вот так:


P.S. Тестировать можно на Денвере, чтобы не напортачить с рабочим сайтом.
Как с другими версиями - не знаю. Вероятно примерно также.
Внешний вид модуля наверняка многие сумеют сделать в 100 раз лучше, поскольку я не дизайнер.
Фильтр/поиск для InstantMaps первой ветки
Комментарии (1)
Jestik 20 февраля 2016 в 10:49 0
Спасибо! Надо будет попробовать