Введение


Когда я пытался продвигать свой последний проект (веб-чат), я столкнулся с тем, что о нем фактически негде написать. Ситуация касается не только wiki-проектов, а вообще всего рунета. Крупные сайты ведут такую политику, что Вы не можете написать о своем проекте — Вы должны либо купить рекламу, либо о Вас должен написать кто-то еще. Если рассматривать конкретно wiki-сайты, то даже на Лурк или Викиреальность попасть проблематично, не говоря уже о таком гиганте как Википедия. Хотя потом я нашел пару небольших wiki-порталов без цензуры, для которых написал два уникальных обзора на свой чат. Они меня и вдохновили на создание свободного wiki-ресурса для IT-разработок.

Зачем писать свой wiki-движок когда есть готовые?


Ну во-первых мне это было интересно. Создать готовый сайт по шаблону в несколько кликов — скучно и не заслуживает внимания аудитории. А новая разработка со своим интерфейсом вероятно активнее будет привлекать интерес. К тому же мне кажется проще написать код под определенные задачи с нуля, взяв за основу какой-либо фреймворк для упрощения разработки, чем переделывать нагромождения чужого кода под себя.

image

Подробнее о wikiclick.ru


Wikiclick.ru — это свободная веб-энциклопедия об IT-разработках. Здесь Вы можете написать о своем сайте, приложении, сервисе, игре или другой разработке, например о своем фреймворке или библиотеке и Ваша статья не будет расценена как спам. А навигатор автоматически создаст древовидное оглавление для Вашей страницы по h1-h6 заголовкам. На странице с Вашим проектом также будет доступно обсуждение в виде дерева комментариев. Созданную страницу можно будет найти в журнале версий, в поиске по сайту, выборке по указанным тегам, или в соответствующем разделе, к которому относится Ваша разработка. В обзоре проекта можно ограничиться лишь небольшим описанием, а сообщество со временем дополнит статью. Также Вы можете прикрепить картинки.

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

О движке WikiClick


Сервер написан тяп-ляп — много дублирующегося кода, комментарии полностью отсутствуют, а некоторые строки написаны в обход методов фреймворка, например визуализация. Но в остальном я его причесал: он отлично работает и быстро настраивается под себя (если только Вас не смущает отсутствие админки). Вся разработка WikiClick заняла у меня около месяца.

Мне нравится, каким получился движок WikiClick — он компактный, красивый, быстро работает, код сервера уложился в 1000 строк. В журнал версий новая запись идет только в том случае если страница написана с другого ip или в другой день — этот механизм позволяет сохранять все ключевые версии страницы, не набирая кучу идентичных дубликатов с правками от одного пользователя. Свои комментарии сохраняются в сессию, и пока она не истекла, их можно отредактировать. Хорошая адаптивная верстка почти сходу налезла на мобильную версию. Обсуждение в виде дерева комментариев внизу страницы кажется более удобным чем на Википедии или на Лурке (Хотя я не являюсь активным участником этих проектов и мое мнение спорное). Использование HTML-кода в содержании страниц выглядит более гибким и скорее всего будет более привычно разработчикам. А навигатор по заголовкам получился гораздо проще тех, что я нашел в интернете, и работает на стороне клиента, не создавая нагрузку на сервер. Он выполнен на jquery и подходит для повторного использования, хотя требует от автора соблюдения последовательности заголовков:

if ($('.cords').length) {
  $h = 'h1, h2, h3, h4, h5, h6';
  $ah = $('article').find($h);
  if ($ah.length >=3) {
    $('.cords').html('<div>Справка</div><ul class="level0" data-level="0"><ul>');
    $ol = $('.level0');
    $str = '';
    $.each($ah, function(i, elm) {
      if (i < $ah.length-1) {			
        a = $ah.eq(i).prop('tagName'); b = $ah.eq(i+1).prop('tagName');
      }
      $(this).html('<selection id="H'+i+'">'+$(this).html()+'</selection>');
      $str += '<li><a href="#H'+i+'">'+$(this).text()+'</li>';
      if (i < $ah.length-1 && a>b) $str+='</ul>';
      if (a<b && !(a=='H1' && b=='H2')) $str += '<ul>';
      if (i == $ah.length-1) {
        for (i = parseInt($(this).prop('tagName').substring(1)); i>=3; i--) {
          $str += '</ul>';
        }
        console.log($str);
        $ol.html($str);
      }
    });
  }
}

P.S.: надеюсь, мой велосипед смог Вас заинтересовать (будем считать это бета-тестом).

Ссылки


wikiclick.ru
Проект на GitHub