Этот сайт, проект на WordPress

Этот сайт является полноценным проектом WordPress в котором мной применены собственноручно разработанные решения, из серьезных доработок можно отметить следующие:

  • Поддержка русского и английского языка на уровне сайта и административной панели, корректное переключение локализаций
  • Переключение между двумя разными схемами WordPress на лету
  • Создание shortcodes
  • Доработка платной схемы Wellow
  • Подробно об этих разработках я рассказываю в разделах блока “Решения” на боковой панели сайта.

    Изначально этот сайт был задуман как небольшое портфолио, которое я иногда использовал при поиске работы. Чтобы не заниматься плагиатом, я создал с нуля простую схему, на нее и сейчас можно посмотреть, она оставлена как пример для демонстрации переключения WordPress на лету на разные темы. Затем у меня появились небольшие проекты на зарубежном фрилансе и возникла потребность в англоязычной копии портфолио. Я решил не делать второй сайт и не стал использовать для этой цели какие-то плагины, сделал по-простому, объединив русскую и английскую версию в одном месте, заключив их в шорткоды. В самом начале я переключал языки с помощью cookies, но затем подумал, что английскую версию не будут индексировать поисковые системы и начал искать решение для передачи языка через адресную строку. Были опробованы несколько вариантов, сначала я хотел сделать через редиректы веб-сервера, подключая query vars, но изучив форумы пришел к выводу, что это лучше делать средствами WordPress, в итоге я остановился на использовании endpoints.

    Телеграм чат-бот

    Цель проекта: изучить базовые возможности чат-ботов телеграм.
    Реализованные функции:

    • Создание меню команд
    • Создание inline-клавиатуры
    • Передача сообщений в бот
    • Получение сообщений, команд и callbacks
    • Создание опросников и получение графических результатов
    • Фиксация всей деятельности в базе данных
    • Удаление сообщенний из бота
    • Запуск веб-приложения телеграм
    • Коммуникация с веб-приложением

    Бот доступен по ссылке
    Использовались библиотеки: irazasyed (базовая для работы с telegram), jpgraph (для создания графика), web application сделано в виде обычной HTML-страницы, в нее добавлены библиотеки JQuery и JQuery UI.
    Бот обслуживается программой на PHP, которая работает у меня на хостинге в окне (screen) операционной системы. Запрос сообщений на сервере происходит раз в 5 секунд. Я решил сделать пока только один этот вариант, чтобы не терять сообщения при сбоях программы или связи. Работает следующая общая схема:

    Технологии обучения

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

  • Эльдорадо/М-Видео
  • Билайн
  • Альфа-Банк (Казахстан)
    были еше небольшие проекты у довольно серьезных заказчиков, но эти три наиболее интересны. Я не могу дать ссылки на сайты или страницы, все проекты были внутренними, в подробном описании я не привожу скриншотов и развернутой информации в силу понятных причин.
    Компания работала только с технологией WebSoft, это система управления персоналом, более подробно о ней можно узнать здесь.
    В своих проектах мне приходилось использовать API WebSoft, я делал backend и frontend на Vue, также создавал внутрениие модули системы и новые сущности. В технологию были встроены XAML и ExtJS, которыми я владею и поэтому приходилось делать сложные вещи на сервере и клиенте.
  • Многоязыковая поддержка WordPress


    Данный подход используется на этом сайте, он прост в реализации, но имеет некоторые недостатки и ограничения.
    Это не идеальный код, это просто демонстрация способа, как можно включить многоязыковую поддержку для WordPress.
    Приведенные тексты программ подразумевают поддержку двух языков: английского и русского, языков может быть больше.

    Недостатки:

    • Всегда должны быть русская и английская версия текста во всех местах.
    • В административной панели заголовки выглядят нечитабельно.
    • Нельзя использовать такую разметку для категорий и тегов, если планируется их прямой вывод через функции wp_list_[…] и им подобные.
    • При использовании текста в дополнительном коде PHP всегда необходимо вызывать функцию-транслятор.
    • Поисковики будут всегда получать текст для языка по умолчанию.

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

    Использование в постах и страницах:

    • [ru]Русский текст[/ru]
    • [en]English text[/en]

    Использование в коде PHP:

    <?php 
    //-- echo --
    stringTranslate('[en]English text[/en][ru]Русский текст[/ru]'); 
    //-- value --
    $text = stringTranslate('[en]English text[/en][ru]Русский текст[/ru]', false); 
    ?>
    

    Реализация:

    common.js (файл javascript с вашим кодом):

    function changeLanguage(ob) {
      if (ob == "ru") {
        if (!confirm("Please, confirm changing language interface to English.")) {
          return;
        }
        document.cookie = "lang=en";
      }
      else {
        if (!confirm("Подтвердите, пожалуйста, смену языка интерфейса на Русский.")) {
          return;
        }
        document.cookie = "lang=ru";
      }
      location.reload();
    }
    


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

    index.php:

    //.... HTML markup before
    <img src="<?php bloginfo('template_url'); ?>/images/en.png" 
      <?php echo (($lang == "en")?("title='English language is setting now.'"):
      ("style='opacity: 0.2; cursor: pointer;' onclick='changeLanguage(\"ru\");' 
      title='Set English as interface language.'")); ?>/>
    <img src="<?php bloginfo('template_url'); ?>/images/ru.png" 
      <?php echo (($lang == "ru")?("title='Русский язык интерфейса сейчас установлен.'"):
      ("style='opacity: 0.2; cursor: pointer;' onclick='changeLanguage(\"en\");' 
      title='Установить русский язык интерфейса.'")); ?>/>
    // HTML markup after ...
    


    functions.php:

    add_filter( 'the_content', 'content_translate' );
    
    function content_translate ($content) {
      return stringTranslate($content, false);
    }
    
    function stringTranslate($str, $isEcho = true) {
      $rez = $str;
      if ($_COOKIE['lang']) {
        $lang = $_COOKIE['lang'];
      }
      else {
        $lang = 'en';
      }
      $rStr = 'ru';
      if ($lang == 'ru') {
        $rStr = 'en';
      }
      $am = 0;
      while (true) {
        $pos1 = strpos($rez,"[".$rStr."]");
        if ($pos1 === false) {
          break;
        }
        $pos2 = strpos($rez,"[/".$rStr."]");
        if ($pos2 === false) {
          $pos2 = strpos($rez,"[".$lang."]",$pos1);
          if (!$pos2) {
            $pos2 = strlen($rez);
          }
        }
        else {
          $pos2 += strlen("{/".$rStr."}");
        }
        $rez = str_replace(substr($rez, $pos1, $pos2 - $pos1), "", $rez);
        //-- decline endless cycle --
        $am++;
        if ($am > 100) {
          return "Cycle error!";
        }
      }
      if ($isEcho) {
        echo str_replace('[/'.$lang.']', "", str_replace('['.$lang.']', "", $rez));  
      }
      else {
        return str_replace('[/'.$lang.']', "", str_replace('['.$lang.']', "", $rez));      
      }
    }
    


    Вот собственно и все, желаю всем удачи.