Отложенная публикация записей Neutrino cms

Рубрика: Новости -> Скрипты -> Neutrino
Суббота, 28 ноября 2009 г.
Просмотров: 6977
Подписаться на комментарии по RSS

Потихоньку .. по маленьку начал вникаться в php все лучше и лучше)))

Есть у меня один сайт для которого заготовлено очень много контента - каждая статья в отдельном файле, ведь не будеш же выкладывать на сайт разом 10000 страниц smile

, это как то странно будет выглядеть в глазах ПС как мне кажется. Поэтому я добавляю этот контент порциями чтобы не вызывать подозрения ).

Для этого сайта я выбирал движок довольно тщательно, чтобы не было проблем с нагрузкой на сервер, чтобы движок был попроще и занимал не много места.

Тут то мне и приглянулся движок Neutrino Atomic Edition в котором не используется база данных, и весь контент хранится в файлах - что мене как раз было нужно, функционал этой CMS очень даже нечего smile при весе в 60кб, есть конечно и недостатки, но они малы и незначительны поэтому я выбрал эту cms.

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

Все статьи в этом движке хранятся в файлах и имена этих файлов записываются очень интересным способом - они записываются количеством секунд прошедших с 1 января 1970 года (unix время), для того чтобы статьи опозновались этой cms нужно давать эти статьи в файлах с цифровыми именами, если нам не нужно отображать время публикации, то подойдут имена от 1  2,3,4 и.т.д..., но если мы хотим отображать точную дат публикации нам нужно просчитать время в секундах для каждого файла, а это стока мороки)) чтоб делать это вручную. Изначально я использовал программу для переименования файлов под названием renamer которая поддерживает pascalscript.

Для переименования использовал вот такой код

  1. var
  2.   I: Integer;
  3.  
  4. begin
  5.     I := I + 2400;
  6.   FileName := IntToStr(I + 1256824720);
  7. end.
I - это имя файла

2400 - это количество секунд равное 2 часам (разница между файлами, т.е разница между публикуемыми статьями)

1256824720 - это дата от которой я начинал публикацию

Вот таким макаром я переименовывал порции статей)) для постинга вручную.

Недавно меня осенило)), прям проперло на написание скриптов на php, начал понимать что к чему и как писать скрипты, если что не знаю сразу в гугл)) он в помощь!!

вот написал скрипт канечно он банальный и предназначен только на использование на локальном хосте)), хотя..

Во время написания я совсем запутался и мне пришлось написать для себя комментарии.

  1. <?php
  2. $fotyu = fopen ("ert", 'r');
  3. $eooo = fread ($fotyu, filesize("ert"));
  4. fclose ($fotyu);
  5. echo'<META HTTP-EQUIV="Refresh" CONTENT="5; URL=1.php?p='.$eooo.'">';
  6. $eooo++;
  7. $wertfile=fopen("ert",'w+');
  8. fputs($wertfile,$eooo);
  9. fclose($wertfile);
  10. //получение имени папки откуда брать файлы через адресную строку
  11. $papka=$_GET["p"];
  12. //поиск файлов в каталоге
  13. foreach (glob("./".$papka."/*") as $filename) {
  14. $ke = pathinfo($filename);
  15. //считываем константу для прибавления ее к имени файла
  16. $fo = fopen ("count", 'r');
  17. $e = fread ($fo, filesize("count"));
  18. fclose ($fo);
  19. //начальная точка отсчета
  20. $b=1258674259;
  21. //случайное число
  22. $c=rand(1000,2500);
  23. //формула для расчета имени файла
  24. $d=$b+$c+$e;
  25. //обновление константы для прибавления к имени файла
  26. $e=$e+$c;
  27. //запись новой константы для прибавления к след. имени файла
  28. $wfile=fopen("count",'w+');
  29. fputs($wfile,$e);
  30. fclose($wfile);
  31. //вывод на экран всех файлов в каталоге
  32. echo $d;
  33. echo "<br>\r\n";
  34. // new 2020
  35. //открываем файл для сравнения с переменной eq1, если она меньше или равна то...
  36. //проверка не прошли-ли сутки
  37. $fqo = fopen ("constant", 'r');
  38. $eq = fread ($fqo, filesize("constant"));
  39. fclose ($fqo);
  40. //в сутках 86400 секунд
  41. //переменная для проверки на 24часа
  42. $eq1=$eq+86400;
  43. if ($eq1<=$d)
  44. {
  45. //считываем номер папки для копирования
  46. $fwqo = fopen ("count2", 'r');
  47. $weq = fread ($fwqo, filesize("count2"));
  48. fclose ($fwqo);
  49. $direct = "./ren/".$weq."/";
  50. if(!mkdir($direct)) {
  51. echo "Ошибка создания каталога $direct...<br />\n";
  52. }
  53. //обновляем даные о сутках
  54. $wqqfile=fopen("constant",'w+');
  55. fputs($wqqfile,$d);
  56. fclose($wqqfile);
  57. //прибавляем +1 к номеру папки для следующего дня
  58. $weq++;
  59. $wgggfile=fopen("count2",'w+');
  60. fputs($wgggfile,$weq);
  61. fclose($wgggfile);
  62. //копируем файл с новым именем
  63. $source = $filename;
  64. if(!copy($source, './ren/'.$weq.'/'.$d)) {
  65. echo "Ошибка копирования файла $source...<br />\n";
  66. }}
  67. //или
  68. else
  69. {
  70. //считываем номер папки для копирования
  71. $fwqo = fopen ("count2", 'r');
  72. $weq = fread ($fwqo, filesize("count2"));
  73. fclose ($fwqo);
  74. //копируем файл с новым именем
  75. $source = $filename;
  76. if(!copy($source, './ren/'.$weq.'/'.$d)) {
  77. echo "Ошибка копирования файла $source...<br />\n";
  78. }}}
  79. ?>
В результате его работы мы получаем папки с дневной нормой постинга)), эта норма регулируется генерируемым случайным числом (rand(200,1500)).

Далее нам нужно все автоматизировать уже на сервере, для автоматической публикации этой дневной нормы)).

Скрипт который публикует дневную норму

  1. <?php
  2. //присваиваем седняшнюю дату
  3. $date = date('d.m.Y',time());
  4. //открываем файло
  5. $a = fopen ("./ext/autoposting/pablishpsto/datefilo", 'r');
  6. $c = fread ($a, filesize("./ext/autoposting/pablishpsto/datefilo"));
  7. fclose ($a);
  8. //присваеваем переменные значениям в файло через |
  9. list($datelast,$filo)=explode("|",$c);
  10. //проверям когда последний раз пстили, если не сеня, то пстим
  11. if ($date!=$datelast){
  12. foreach (glob('./ext/autoposting/pablishpsto/filo/'.$filo.'/*') as $filoname) {
  13. //присваеваем ке инфо по найденному файло в папке для
  14. //дальнейшей обрубки чегонить от файло расширения или еще чегонить
  15. $ke = pathinfo($filoname);
  16. $namefilo = $ke['filename'];
  17. $filoout ="./data/posts/";
  18. if(!copy($filoname,$filoout.$namefilo)) {
  19. echo "Ошибка копирования файла $filoname...<br>\n";
  20. }}
  21. //прибавляем к названию последней отпстеной папке +1
  22. $filo++;
  23. //опять читаем файло и записываем изменения
  24. $b=fopen("./ext/autoposting/pablishpsto/datefilo",'w+');
  25. fputs($b,$datelast."|".$filo);
  26. fclose($b);
  27. }else{}
  28. //вывод всей инфо
  29. echo'дата последней публикации - ';
  30. echo $datelast;
  31. echo "<br>\r\n";
  32. echo'сегодняшняя дата';
  33. echo $date;
  34. echo "<br>\r\n";
  35. echo'название папки которую последний раз постили';
  36. echo $filo;
  37. echo "<br>\r\n";
  38. ?>
Вод так вот)), теперь все автоматизированно

Это мои рабочие варианты)), но последнее я реализовал как плагин к Neutrino для постинга отложенных записей.

Попозже я попробую реализовать версию этого плагина для паблика, думаю сделать админку и усовершенствовать некоторые алгоритмы)).

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru rutvit.ru myspace.com technorati.com digg.com friendfeed.com pikabu.ru blogger.com liveinternet.ru livejournal.ru memori.ru google.com bobrdobr.ru mister-wong.ru yahoo.com yandex.ru del.icio.us

Комментариев: 9

  1. Скажите - а возможна ли отложенная публикация сразу из написания поста?

  2. Нет, это скрипт только лишь для подготовки статей для будущей публикации и переноса файлов из одной директории в другую - таким образом добовляя новые записи в блог.

    Я как нибудь сделаю плагин который позволит из админки определять дату публикации того или иного поста, но пока у меня нет желания чтото делатьLOL, попозже... у меня уже были некоторые попытки сделать админку для плагина что то получилось, но нужно еще сделать многое.

  3. Будем с нетерпением ждать этого момента grin

  4. 2010-01-22 в 17:43:28 | Happy Oyster

    Идея хорошая, плохо только то, что такой механизм не позволяет работать и тегами. Т.е. теги записям присваивать можно, помещая файлы с теми-же именами в папку data/tags и прописывая теги в этих файлах...

    Плохо только то, что потом эти теги не будут автоматически выведены в список тегов. Судя по всему скрипт хеширует информацию по хзаписям-тегам в папке data/tags/cache64, но алгоритм хеширования надо копать в исходном коде Нейтрино.

  5. О тегах я даже и не думал))) потомучто считаю что они бесполезные на латинице((. а про хеш так мне кажется если удалить его то он автоматически сам создастся вновь с уже новыми тегами.

  6. 2010-01-22 в 18:20:40 | Happy Oyster

    Теги потом очень красиво ложаться в сайдбар сайта (получается как категории в блоге на Вордпрессе), делая сайт еще более похожим на "живой". К тому-же они могут быть кириллические (по-крайней мере на локальном сервере работает)

    К сожалению, хеширование не происходит автоматически (очевидно в нормальном режиме это происходит при нажатии кнопки Сохранить пост в админке)

    Вроде-бы авторов озадачили отложенными постами. Они как-будто обещали сделать smile

  7. странно я сколько ни пытался на кириллице теги не работали((, хотя может быть в нормальной версии neutrino (utf-8) все работает, я ее переконвертировал в win1251 для экономии места на сервере.

  8. А рабочий скрипт в виде дополнения уже есть? Очень нужен!!

  9. нет я не делал, мне стало влом с этим возиться)), я только попытался сделать админку для этого скрипта и забросил все.

Оставьте комментарий!

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

(войти без комментирования)

Имя и сайт используются только при регистрации

Если указать email (зарегистрироваться), то будет уведомление о новых комментариях.

Выберите человечка с поднятой рукой!