• avatar paic
  • 0
Дык, в том то и дело, что елки — с моделями у меня пока совсем туго, хотя замечаю что все чаще в постах мелькают именно они, так что предстоит еще засаживаться за уроки.

Пользуясь случаем, а как сделать, если $period на разных страницах разный?

Т.е. на странице есть параметр TV c названием period типа radio вида
10 суток==4320000||20 суток==8640000||30 суток==3592000 и админ каждой странице назначает свой период обновления
  • avatar paic
  • 0
Спасибо за разъяснения
  • avatar webber
  • 1
Или он тоже ждет, чтобы админ или посетитель сайта совершит какое-то событие, чтобы по этому событию сделать нужное действие
При каждом заходе на фронт сайта, если сайт не выключен, проверяются. Сама дата наступления следующей проверки хранится в файле assets/cache/sitePublishing.idx.php. Т.е. если наступила эта дата, то соответственно все неопубликованные, у которых наступила дата публикации — публикуются, а все опубликованные, у которых она закончилась — снимаются с публикации. Соответственно, при построении нового кэша формируется новая дата проверки в файлик из минимальных будущих даты начала публикации/даты окончания публикации.
  • avatar 1px
  • 1
Ну ёлки же =)
$doc->save(false,true);
итак чистит кэш
  • avatar Segr
  • 0
Есно взломали, просто рассказал.
Получается, что ломается экранирование. Можно убрать эту строку и все.
  • avatar Temus
  • 0
Нашёл, где ломается. Строка 269 в вашем фиксе. Это можно как-то исправить?
  • avatar AxelS
  • 0
Не нашли в чём проблема? Сегодня столкнулся с такой же проблемой
  • avatar paic
  • 0
Благодаря помощи 1px получился такой плагин
$e = &$modx->Event;
if ($e->name == "OnWebPageInit") {

$table = $modx->getFullTableName('site_content');
$period = "432000"; //5 суток
$tek = time();
$res = $tek-$period;
$template = "7";
$result = $modx->db->select("id,createdon", $table, "createdon < '".$res."' AND template = '".$template."'");
include_once(MODX_BASE_PATH."assets/lib/MODxAPI/modResource.php");
$data = $modx->db->makeArray($result);
foreach ($data as $el) {
    $doc = new modResource($modx);
    $doc->edit($el['id']);
	$news = ($el['createdon'])+$period;
        $doc->set('createdon',$news);
    $doc->save(false,true);
}
	
}

Но для полного счастья остались пару вопросов, если кто подскажет:

1. Есть какая-то возможность очищать кэш страниц одновременно с изменением даты? На случай если OnWebPageInit будет с чем то конфликтовать и все же придется ставить OnWebPagePrerender?

2. В админке EVO есть возможность установить дату публикации и дату отмены публикации — как EVO отслеживает эти даты? Или он тоже ждет, чтобы админ или посетитель сайта совершит какое-то событие, чтобы по этому событию сделать нужное действие. Или там какой то таймер установлен и нужные действия совершаются независимо ни от кого?
  • avatar paic
  • 0
Спасибо, подумаю над такой идеей, главное не прибавить лишнего, чтобы дата не оказалась из будущего))
  • avatar 1px
  • 1
Ну если ставить одинаковую дату, то да, так и будет. Но ведь можно даты и прибавлять, а не просто ставить всё одинаково? =)
$newDate = strtotime('+1 month',$oldDate);

Кстати, вообще-то можно всё сделать и средствами mySQL, но я с датами и update ненавижу работать, так что это уж сами.
  • avatar paic
  • 0
Спасибо, я примерно так и думал, для теста сделал для одного документа так
$table = $modx->getFullTableName('site_content');
$period = "432000"; //5 суток
$tek = time();
$res = $tek-$period;

$doc = $modx->getDocument($id);
$createdon = $doc['createdon'];
$template = $doc['template'];
	
$fields = array('createdon'  => $tek); 
if($res > $createdon && $template="7"){$modx->db->update($fields, $table, "id IN ($id)");}


Но потом понял, что если в выборке окажется несколько документов, то после обновления все они окажутся с одинаковыми датами, если вешать, например на OnWebPagePrerender, а посещаемость у молодого сайта стремится к нулю((

Или мои опасения беспочвенны?
  • avatar 1px
  • 2
Все ресурсы расположены в таблице site_content
У каждого есть несколько разных полей с датами — pub_date, createdon и т.д. В зависимости от того, на какое из них завязана сортировка у вас, нужно их и обновлять.
Можно сделать плагин на любое событие, которое у вас часто возникает на сайте, перебрать все доки с датой, меньшей чем текущая, модифицировать нужное поле.
Примерно такое что-то. Выборку под себя поправьте, чтобы скажем менять только нужные шаблоны/доки и т.п.

$sql = "select * from $modx->getFullTableName('site_content')  WHERE FROM_UNIXTIME( createdon,  '%Y-%m-%d' ) < CURDATE()";
include_once(MODX_BASE_PATH."assets/lib/MODxAPI/modResource.php");
$data = $modx->db->makeArray($modx->db->query($sql));
foreach ($data as $el) {
    $doc = new modResource($modx);
    $doc->edit($el['id']);
	$doc->set('createdon','ТУТ НУЖНАЯ ДАТА В ФОРМАТЕ UNIXTIME');
    $doc->save(false,false);
}
  • avatar Temus
  • 0
Я бы $_SERVER['REQUEST_URI'] проверял, а не $_GET['q'], а то с ссылками вида page.php?id=111 проблема
  • avatar Redduck
  • 0
C русскими символами работает нормально?
Так получилось что мне пришлось сделать пару сайтов в доменной зоне РФ и соответсвенно адрес домена на кириллице. А раз сам адрес на кириллице то и внутреннии страницы не имеет смысла делать на английском. Даже наверно будет лучше и красивей если у домена на русском то и внутренние страницы будут на русском.

Пришлось немного перепрограммировать RedirectMap для выбора функций — rawurlencode,urlencode или none.
  • avatar Temus
  • 0
с кодировками всё в порядке
  • avatar dzhuryn
  • 1
Сори, репозиторий получился private исправил
Ссылка на гит битая.
А с кодировками все в порядке? И файлы и база в юникоде?
  • avatar Temus
  • 0
На правильных страницах слеши в коде направлены в другую сторону:
\u0421\u0438\u043d\u0438\u0439
Страницы отличаются количеством вызовов OnRichTextEditorInit