Отложенная публикация записей Neutrino cms
Суббота, 28 ноября 2009 г.
Просмотров: 7065
Подписаться на комментарии по RSS
Потихоньку .. по маленьку начал вникаться в php все лучше и лучше)))
Есть у меня один сайт для которого заготовлено очень много контента - каждая статья в отдельном файле, ведь не будеш же выкладывать на сайт разом 10000 страниц
, это как то странно будет выглядеть в глазах ПС как мне кажется. Поэтому я добавляю этот контент порциями чтобы не вызывать подозрения ).
Для этого сайта я выбирал движок довольно тщательно, чтобы не было проблем с нагрузкой на сервер, чтобы движок был попроще и занимал не много места.
Тут то мне и приглянулся движок Neutrino Atomic Edition в котором не используется база данных, и весь контент хранится в файлах - что мене как раз было нужно, функционал этой CMS очень даже нечего при весе в 60кб, есть конечно и недостатки, но они малы и незначительны поэтому я выбрал эту cms.
Так вот мне нужно было публиковать статьи порциями но, в этом движке не предусмотренна такая функция в результате чего мне приходилось добавлять порции статей вручную.
Все статьи в этом движке хранятся в файлах и имена этих файлов записываются очень интересным способом - они записываются количеством секунд прошедших с 1 января 1970 года (unix время), для того чтобы статьи опозновались этой cms нужно давать эти статьи в файлах с цифровыми именами, если нам не нужно отображать время публикации, то подойдут имена от 1 2,3,4 и.т.д..., но если мы хотим отображать точную дат публикации нам нужно просчитать время в секундах для каждого файла, а это стока мороки)) чтоб делать это вручную. Изначально я использовал программу для переименования файлов под названием renamer которая поддерживает pascalscript.
Для переименования использовал вот такой код
- var
- I: Integer;
- begin
- I := I + 2400;
- FileName := IntToStr(I + 1256824720);
- end.
2400 - это количество секунд равное 2 часам (разница между файлами, т.е разница между публикуемыми статьями)
1256824720 - это дата от которой я начинал публикацию
Вот таким макаром я переименовывал порции статей)) для постинга вручную.
Недавно меня осенило)), прям проперло на написание скриптов на php, начал понимать что к чему и как писать скрипты, если что не знаю сразу в гугл)) он в помощь!!
вот написал скрипт канечно он банальный и предназначен только на использование на локальном хосте)), хотя..
Во время написания я совсем запутался и мне пришлось написать для себя комментарии.
- <?php
- $fotyu = fopen ("ert", 'r');
- $eooo = fread ($fotyu, filesize("ert"));
- fclose ($fotyu);
- echo'<META HTTP-EQUIV="Refresh" CONTENT="5; URL=1.php?p='.$eooo.'">';
- $eooo++;
- $wertfile=fopen("ert",'w+');
- fputs($wertfile,$eooo);
- fclose($wertfile);
- //получение имени папки откуда брать файлы через адресную строку
- $papka=$_GET["p"];
- //поиск файлов в каталоге
- foreach (glob("./".$papka."/*") as $filename) {
- $ke = pathinfo($filename);
- //считываем константу для прибавления ее к имени файла
- $fo = fopen ("count", 'r');
- $e = fread ($fo, filesize("count"));
- fclose ($fo);
- //начальная точка отсчета
- $b=1258674259;
- //случайное число
- $c=rand(1000,2500);
- //формула для расчета имени файла
- $d=$b+$c+$e;
- //обновление константы для прибавления к имени файла
- $e=$e+$c;
- //запись новой константы для прибавления к след. имени файла
- $wfile=fopen("count",'w+');
- fputs($wfile,$e);
- fclose($wfile);
- //вывод на экран всех файлов в каталоге
- echo $d;
- echo "<br>\r\n";
- // new 2020
- //открываем файл для сравнения с переменной eq1, если она меньше или равна то...
- //проверка не прошли-ли сутки
- $fqo = fopen ("constant", 'r');
- $eq = fread ($fqo, filesize("constant"));
- fclose ($fqo);
- //в сутках 86400 секунд
- //переменная для проверки на 24часа
- $eq1=$eq+86400;
- if ($eq1<=$d)
- {
- //считываем номер папки для копирования
- $fwqo = fopen ("count2", 'r');
- $weq = fread ($fwqo, filesize("count2"));
- fclose ($fwqo);
- $direct = "./ren/".$weq."/";
- if(!mkdir($direct)) {
- echo "Ошибка создания каталога $direct...<br />\n";
- }
- //обновляем даные о сутках
- $wqqfile=fopen("constant",'w+');
- fputs($wqqfile,$d);
- fclose($wqqfile);
- //прибавляем +1 к номеру папки для следующего дня
- $weq++;
- $wgggfile=fopen("count2",'w+');
- fputs($wgggfile,$weq);
- fclose($wgggfile);
- //копируем файл с новым именем
- $source = $filename;
- if(!copy($source, './ren/'.$weq.'/'.$d)) {
- echo "Ошибка копирования файла $source...<br />\n";
- }}
- //или
- else
- {
- //считываем номер папки для копирования
- $fwqo = fopen ("count2", 'r');
- $weq = fread ($fwqo, filesize("count2"));
- fclose ($fwqo);
- //копируем файл с новым именем
- $source = $filename;
- if(!copy($source, './ren/'.$weq.'/'.$d)) {
- echo "Ошибка копирования файла $source...<br />\n";
- }}}
- ?>
Далее нам нужно все автоматизировать уже на сервере, для автоматической публикации этой дневной нормы)).
Скрипт который публикует дневную норму
- <?php
- //присваиваем седняшнюю дату
- $date = date('d.m.Y',time());
- //открываем файло
- $a = fopen ("./ext/autoposting/pablishpsto/datefilo", 'r');
- $c = fread ($a, filesize("./ext/autoposting/pablishpsto/datefilo"));
- fclose ($a);
- //присваеваем переменные значениям в файло через |
- list($datelast,$filo)=explode("|",$c);
- //проверям когда последний раз пстили, если не сеня, то пстим
- if ($date!=$datelast){
- foreach (glob('./ext/autoposting/pablishpsto/filo/'.$filo.'/*') as $filoname) {
- //присваеваем ке инфо по найденному файло в папке для
- //дальнейшей обрубки чегонить от файло расширения или еще чегонить
- $ke = pathinfo($filoname);
- $namefilo = $ke['filename'];
- $filoout ="./data/posts/";
- if(!copy($filoname,$filoout.$namefilo)) {
- echo "Ошибка копирования файла $filoname...<br>\n";
- }}
- //прибавляем к названию последней отпстеной папке +1
- $filo++;
- //опять читаем файло и записываем изменения
- $b=fopen("./ext/autoposting/pablishpsto/datefilo",'w+');
- fputs($b,$datelast."|".$filo);
- fclose($b);
- }else{}
- //вывод всей инфо
- echo'дата последней публикации - ';
- echo $datelast;
- echo "<br>\r\n";
- echo'сегодняшняя дата';
- echo $date;
- echo "<br>\r\n";
- echo'название папки которую последний раз постили';
- echo $filo;
- echo "<br>\r\n";
- ?>
Это мои рабочие варианты)), но последнее я реализовал как плагин к Neutrino для постинга отложенных записей.
Попозже я попробую реализовать версию этого плагина для паблика, думаю сделать админку и усовершенствовать некоторые алгоритмы)).
Комментариев: 9
Скажите - а возможна ли отложенная публикация сразу из написания поста?
Нет, это скрипт только лишь для подготовки статей для будущей публикации и переноса файлов из одной директории в другую - таким образом добовляя новые записи в блог.
Я как нибудь сделаю плагин который позволит из админки определять дату публикации того или иного поста, но пока у меня нет желания чтото делать, попозже... у меня уже были некоторые попытки сделать админку для плагина что то получилось, но нужно еще сделать многое.
Будем с нетерпением ждать этого момента
Идея хорошая, плохо только то, что такой механизм не позволяет работать и тегами. Т.е. теги записям присваивать можно, помещая файлы с теми-же именами в папку data/tags и прописывая теги в этих файлах...
Плохо только то, что потом эти теги не будут автоматически выведены в список тегов. Судя по всему скрипт хеширует информацию по хзаписям-тегам в папке data/tags/cache64, но алгоритм хеширования надо копать в исходном коде Нейтрино.
О тегах я даже и не думал))) потомучто считаю что они бесполезные на латинице((. а про хеш так мне кажется если удалить его то он автоматически сам создастся вновь с уже новыми тегами.
Теги потом очень красиво ложаться в сайдбар сайта (получается как категории в блоге на Вордпрессе), делая сайт еще более похожим на "живой". К тому-же они могут быть кириллические (по-крайней мере на локальном сервере работает)
К сожалению, хеширование не происходит автоматически (очевидно в нормальном режиме это происходит при нажатии кнопки Сохранить пост в админке)
Вроде-бы авторов озадачили отложенными постами. Они как-будто обещали сделать
странно я сколько ни пытался на кириллице теги не работали((, хотя может быть в нормальной версии neutrino (utf-8) все работает, я ее переконвертировал в win1251 для экономии места на сервере.
А рабочий скрипт в виде дополнения уже есть? Очень нужен!!
нет я не делал, мне стало влом с этим возиться)), я только попытался сделать админку для этого скрипта и забросил все.