Яндекс.Метрика

    Реклама

    Simpla — движок для великолепных интернет-магазинов



    Последние 5 лет я создавал интернет-магазины. Много магазинов. Хороших и разных. Я был сам себе программистом, верстальщиком, дизайнером и менеджером.

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

    Обычная история


    Думаю, многим знакома ситуация, когда после создания сайта, на протяжении нескольких месяцев вам звонят с вопросом «как вставить картинку на сайт» сначала заказчик, потом его секретарша, потом новая секретарша, потом менеджер по продажам (секретарша в отпуске). А потом звонит их новый «компьютерщик», чтобы узнать какой файл ковырять, чтобы вставить красную бегущую строку справа от логотипа. И так далее, и тому подобное.




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

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

    Итак, я пиарюсь


    Как я писал в начале, вот уже 5 лет как я создаю интернет-магазины. И все эти 5 лет я использовал собственный движок интернет-магазина, постоянно улучшая его. Недавно я произвел полную переработку кода, структуры и дизайна движка. В результате появился скрипт интернет-магазина Simpla.

    Основное приеимущество Simpla — в его простоте. Простоте с точки зрения посетителя сайта, администратора, верстальщика и программиста. В нем нет 9999 возможностей. Но в нем есть все что нужно хорошему интернет-магазину.

    Требования


    Так как я заранее не знаю где будет установлена Simpla, я старался сделать ее как можно менее требовательной к параметрам сервера:
    • сервер Apache + mod_rewrite
    • MySQL 4.1 и выше (возможно и меньше, не тестировал на более ранних)
    • PHP4 или PHP5
    • не требуется Zend Optimizer
    • желатетен GD2 для авторесайза картинок
    • UPD --enable-bcmath

    Установка


    Скрипт поставляется в виде архива source.zip и инсталлятора install.php, который работает в виде мастера установки, и состоит из нескольких шагов:


    После установки мы имеем магазин с тестовым контентом и минималистичным дизайном. Этот шаблон удобен как основа для будущего дизайна — все что можно вынесено в css, все прокомментировано по полной программе.



    С точки зрения покупателя


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

    Добавим товар в корзину:


    Далее остается ввести информацию о получателе, и нажать «заказать»:


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


    Среди способов онлайн-оплаты сейчас есть webmoney и visa/mastercard, но скоро добавится еще несколько популярных способов.
    Пользователь всегда может увидеть состояние своего заказа, несмотря на то что он не зарегистрирован. Это очень удобно.

    Магазин с точки зрения админиcтратора


    Панель управления выглядит вот так:


    Для примера попробуем отредактировать какой-то товар:


    Обратите внимание, что картинки к товару можно загружать непостредственно с другого сайта (что актуально для 70% заказчиков, а-я-яй).
    Естественно, картинки автоматически приводятся к необходимому размеру.

    Так же, не могу не упомянуть о плагине загрузки картинок во встроенном редакторе tinymce, который я купил в Германии (а так же и плагин для загрузки файлов).
    Вот как он выглядит, но я советую пощупать его вживую:



    Счастье админа


    Для наиболее частых действие создана функция, которую я назвал «счастье админа» — большинство операций с объектами интернет-магазина администратор может осуществлять непосредственно на сайте (а не в панели управления):



    Чаще всего ошибки контента обнаруживаются администратором при просмотре сайта, а не в панели управления. И для исправления достаточно нажать «редактировать», исправить ошибку, нажать сохранить и автоматически вернуться туда, где мы нажимали «редактировать».

    Как менять дизайн


    Внешний вид магазина задается «темами» дизайна. Каждая тема — это просто папка, которая содержит подпапки css, images и html.


    Хотя в большинстве случаев достаточно взять стандартный дизайн и изменить css.

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



    Для мелких правок это очень удобно. А некоторым людям удобно и для крупных.

    С точки зрения программиста


    Большинство cms сделаны по принципу «добавим 9999 функций, авось какая-то пригодится». Конечно какие-то функции действительно пригождаются в разных случаях. Но они загромождают код и панель управления. Я же выбрал немного другой принцип — если необходимость функции сомнительна, я ее не включаю в cms. Это позволило сделать код проще, и облегчает добавление действительно необходимой функции для конкретного сайта. В качестве примера я просто приведу исходный код, допустим, модуля ленты новостей:

    <?PHP
    /**
    * Simpla CMS
    *
    * @copyright   2009 Denis Pikusov
    * @link     simplacms.ru
    * @author     Denis Pikusov
    *
    * Отображение новостей на сайте
    * Использует шаблон news.tpl для ленты новостей, и news_item.tpl для вывода одной новости
    */

    require_once('Widget.class.php');

    class NewsLine extends Widget
    {
      /**
       * Конструктор
       */
      function NewsLine(&$parent)
      {
        Widget::Widget($parent);
      }
      
      /**
       * Отображение
       */
      function fetch()
      {
        // Какую новость нужно вывести?
        $news_url = $this->url_filtered_param('news_url');

        if (!empty($news_url))
        {
          // Если передан url новости, выводим ее
          return $this->fetch_item($news_url);
        }
        else
        {
          // Если нет, выводим список всех новостей
          return $this->fetch_list();
        }
      }

      /**
       * Отображение списка новостей
       */  
      function fetch_list()
      {
        // Выбераем новости из базы
        $this->db->query('SELECT *, DATE_FORMAT(date, \'%d.%m.%Y\') as date FROM news WHERE enabled=1 ORDER BY date DESC');
        $news = $this->db->results();

        // Передаем в шаблон
        $this->smarty->assign('news', $news);
        $this->body = $this->smarty->fetch('news.tpl');
        
        return $this->body;
      }

      /**
       * Отображение отдельной новости
       */  
      function fetch_item($url)
      {
        // Выбираем новость из базы
        $query = sql_placeholder('SELECT *, DATE_FORMAT(date, \'%d.%m.%Y\') as date FROM news WHERE url = ? AND enabled=1 LIMIT 1', $url);
        $this->db->query($query);

        // Если не существует такая новость - ошибка 404
        if ($this->db->num_rows() == 0)
        {
          return false;
        }
        $item = $this->db->result();

        // Устанавливаем метатеги для страницы с этой новостью
        $this->title = $item->meta_title;
        $this->keywords = $item->meta_keywords;
        $this->description = $item->meta_description;

        // Передаем в шаблон
        $this->smarty->assign('news_item', $item);
        $this->body = $this->smarty->fetch('news_item.tpl');
        return $this->body;
      }
    }


    * This source code was highlighted with Source Code Highlighter.


    С точки зрения здравого смысла



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

    Я приглашаю вас поближе познакомиться с Simpla на моём скромном сайте: simplacms.ru

    Онлайн-демонстрация:
    simplacms.ru/demo
    simplacms.ru/demo/admin

    Благодарю тех, кто уделил мне свое время, и надеюсь, что это поможет вам сэкономить его в дальнейшем.

    UPD Если онлайн-демка кривая или не работает — значит до вас там кто-то сильно похозяйничал. Просто зайдите в автоматизацию — бекап — и восстановите default.zip а то я сам не успеваю беспрерывено мониторить. Извините, просто не рассчитывал на такой эффект ) А лучше — ставьте себе локально

    UPD2 Огромное спасибо всем, кто уделил внимание, мне очень приятно слышать что многим понравилось, и критика это тоже приятно (лучше чем равнодушие, и полезней). Если кто-то нашел реальные дыры в безопасности — очень прошу не молчать. Любый замечания, гадости и комплименты приветствуются :)