29 мая 2013 в 19:21

Разное → Переделываем OpenCart в CMS сайта-визитки, или OpenCart «витрина» style

Меня часто спрашивают, как превратить CMS интернет-магазина OpenCart в обычную витрину без возможности покупок, регистрации etc. То есть чтобы на этом движке можно было организовать аналог сайта-визитки, но с витриной товаров.

OpenCart очень распространенная в наших широтах CMS, в основном из-за простоты кода и понятной структуры каталогов в движке, в отличии от PrestaShop, где чуть сложнее разобраться, или Magento, где вообще черт ногу сломит (обещали 2-ю версию сделать намного проще), что позволяет довольно быстро начинающему создателю сайтов разобраться в системе и переделать ее под себя.

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



И так начнем. Все действия проводились на сборке ocStore 1.5.4.1, но больших отличий от 1.5.1.3, 1.5.3.1, 1.5.5.1 не наблюдается, так что вы можете пробовать на других версиях движка. Все действия желательно проводить на свежеустановленом движке, дабы не нарушить правки кода, если они были до этого. И естественно не вздумайте проделывать все махинации на рабочем проекте в интернете, только локалка или тестовый домен, иначе рискуете уложить рабочий проект! Я обязан был это написать, так как статью будут читать не только многоуважаемые хабраюзеры, а и новички, забредшие сюда из ПС, которые тут же полезут к себе на сайт править все подряд.

Немного теории. OpenCart построен на модели MVC (Model-View-Controller). Model содержит функционал по работе с БД. Находится по адресу /catalog/model и /admin/catalog/model. View – это шаблон, то есть та часть, которая отвечает за вывод данных в браузер. Находится по адресу /catalog/view и /admin/catalog/view. Controller – обрабатывает данные из model и формирует данные для view. Находится по адресу /catalog/controller и /admin/catalog/controller. Все, что мы будем делать, относится только к шаблону, так что все действия будем проводить с view.

Часть 1. Фронт-энд


Для начала отключим ненужные функции, такие как язык и валюта. В админ-панели идем по пути Система – Локализация – Языки и удаляем английский язык. Далее идем в Система – Локализация – Валюты и удаляем евро и рубль, так чтоб осталась одна валюта – доллар. Можно оставить и рубль, но сначала придется ее поставить валютой по умолчанию. Можно, конечно попытать свое счастье в удалении и последней валюты, но тогда мы увидим красивую надпись на красном фоне, глаголящую «Валюту нельзя удалить, поскольку она назначена по умолчанию!». Да в прочем она нам и не мешает.

Далее давайте уберем с шапки корзину, поиск, вход/регистрацию и ссылки под ними. Идем по пути /catalog/view/theme/default/template/common/header.tpl и удаляем строки 52-70:

Код
<?php echo $language; ?>
  <?php echo $currency; ?>
  <?php echo $cart; ?>
  <div id="search">
    <div class="button-search"></div>
    <?php if ($filter_name) { ?>
    <input type="text" name="filter_name" value="<?php echo $filter_name; ?>" />
    <?php } else { ?>
    <input type="text" name="filter_name" value="<?php echo $text_search; ?>" onclick="this.value = '';" onkeydown="this.style.color = '#000000';" />
    <?php } ?>
  </div>
  <div id="welcome">
    <?php if (!$logged) { ?>
    <?php echo $text_welcome; ?>
    <?php } else { ?>
    <?php echo $text_logged; ?>
    <?php } ?>
  </div>
  <div class="links"><a href="<?php echo $home; ?>"><?php echo $text_home; ?></a><a href="<?php echo $wishlist; ?>" id="wishlist-total"><?php echo $text_wishlist; ?></a><a href="<?php echo $account; ?>"><?php echo $text_account; ?></a><a href="<?php echo $shopping_cart; ?>"><?php echo $text_shopping_cart; ?></a><a href="<?php echo $checkout; ?>"><?php echo $text_checkout; ?></a></div>


На освободившееся место можно добавить телефон, skype, icq, email, live support, адрес и другие средства коммуникации. Да в принципе все, что пожелаете. Как это сделать, я думаю, писать не стоит – с принципами блочной верстки все знакомы, а если не знакомы, то в интернете полно материала по данной теме.

Теперь взглянем на главную. Что нам здесь не нравится:
  • Слайдшоу
  • Рекомендуемые
  • Производители

Сначала отключим слайдшоу. Идем в Дополнения – Модули – Слайдшоу и удаляем единственный баннер, который там есть.

Далее у нас на главной висит модуль Рекомендуемые товары, вот его то мы и будем использовать в качестве витрины, поэтому для красоты переименуем его в «Витрина». Идем по пути
/catalog/language/russian/module/featured.php и меняем «Рекомендуем» на «Витрина». Теперь нам нужно переделать вывод самого модуля. Идем по пути /catalog/view/theme/default/template/module/featured.tpl и удаляем строки 11-23:

Код
<?php if ($product['price']) { ?>
        <div class="price">
          <?php if (!$product['special']) { ?>
          <?php echo $product['price']; ?>
          <?php } else { ?>
          <span class="price-old"><?php echo $product['price']; ?></span> <span class="price-new"><?php echo $product['special']; ?></span>
          <?php } ?>
        </div>
        <?php } ?>
        <?php if ($product['rating']) { ?>
        <div class="rating"><img src="catalog/view/theme/default/image/stars-<?php echo $product['rating']; ?>.png" alt="<?php echo $product['reviews']; ?>" /></div>
        <?php } ?>
        <div class="cart"><input type="button" value="<?php echo $button_cart; ?>" onclick="addToCart('<?php echo $product['product_id']; ?>');" class="button" /></div>


Этим мы отключили показ цены, рейтинга товара, а так же кнопку Купить. Кому нужен рейтинг товаров, может оставить строки 20-22.

Теперь увеличим картинки товаров в модуле, уж очень они мелкие. Идем в Дополнения – Модули – Рекомендуемые и ставим размер картинок равным 140.

Далее идет модуль Карусель, в котором показываются лого производителей со ссылками на страницу производителя. Если у вас много производителей и вы хотите показывать информацию о них, то можно этот модуль оставить. Ну а если же он не нужен, то идем в Дополнения – Модули – Карусель и удаляем баннер Производители.

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



Далее идем в категории. Для начала сменим размер картинок товаров. Идем в Система – Настройки – Мой Магазин – Изображения и меняем размер изображения в списке товаров на 140. Далее поставим режим отображения Сетка по умолчанию. Идем по пути /catalog/view/theme/default/template/product/category.tpl и в 179 строке меняем list на grid:

Код
display('grid');


Далее нам надо убрать цену, кнопку покупки и ссылки В закладки и В сравнение. В этом же файле убираем стоки 77-97:

Код
     <?php if ($product['price']) { ?>
      <div class="price">
        <?php if (!$product['special']) { ?>
        <?php echo $product['price']; ?>
        <?php } else { ?>
        <span class="price-old"><?php echo $product['price']; ?></span> <span class="price-new"><?php echo $product['special']; ?></span>
        <?php } ?>
        <?php if ($product['tax']) { ?>
        <br />
        <span class="price-tax"><?php echo $text_tax; ?> <?php echo $product['tax']; ?></span>
        <?php } ?>
      </div>
     <?php } ?>
     <?php if ($product['rating']) { ?>
      <div class="rating"><img src="catalog/view/theme/default/image/stars-<?php echo $product['rating']; ?>.png" alt="<?php echo $product['reviews']; ?>" /></div>
      <?php } ?>
      <div class="cart">
        <input type="button" value="<?php echo $button_cart; ?>" onclick="addToCart('<?php echo $product['product_id']; ?>');" class="button" />
      </div>
      <div class="wishlist"><a onclick="addToWishList('<?php echo $product['product_id']; ?>');"><?php echo $button_wishlist; ?></a></div>
      <div class="compare"><a onclick="addToCompare('<?php echo $product['product_id']; ?>');"><?php echo $button_compare; ?></a></div>


Вроде бы все, но после сохранения у нас на месте бывших элементов появились загадочные надписи “null”. Это скрипт выбора list/grid отдает теперь уже пустые строки. Поэтому удаляем строки 117-119:

Код
html += '  <div class="cart">' + $(element).find('.cart').html() + '</div>';
html += '  <div class="wishlist">' + $(element).find('.wishlist').html() + '</div>';
html += '  <div class="compare">' + $(element).find('.compare').html() + '</div>';


и 181-183:

Код
html += '<div class="cart">' + $(element).find('.cart').html() + '</div>';
html += '<div class="wishlist">' + $(element).find('.wishlist').html() + '</div>';
html += '<div class="compare">' + $(element).find('.compare').html() + '</div>';


Еще в категориях можно убрать надпись «В этой категории нет товаров». Это нужно тогда, когда вы будете вставлять текст (описание категорий), допустим О нас, Наше портфолио, Наши партнеры, Сотрудничество etc. и соответственно в этих разделах не будет товаров, то будет появляться эта, никому не нужная надпись. Так что в этом же файле убираем строку 104:

Код
<div class="content"><?php echo $text_empty; ?></div>


Теперь все красиво.



Аналогично убираем лишнее в сравнении товаров. Идем по пути /catalog/view/theme/default/template/product/compare.tpl и убираем строки 35-46:

Код
       <tr>
        <td><?php echo $text_price; ?></td>
        <?php foreach ($products as $product) { ?>
        <td><?php if ($products[$product['product_id']]['price']) { ?>
          <?php if (!$products[$product['product_id']]['special']) { ?>
          <?php echo $products[$product['product_id']]['price']; ?>
          <?php } else { ?>
          <span class="price-old"><?php echo $products[$product['product_id']]['price']; ?></span> <span class="price-new"><?php echo $products[$product['product_id']]['special']; ?></span>
          <?php } ?>
          <?php } ?></td>
        <?php } ?>
      </tr>


и 101-106:

Код
    <tr>
      <td></td>
      <?php foreach ($products as $product) { ?>
      <td><input type="button" value="<?php echo $button_cart; ?>" onclick="addToCart('<?php echo $product['product_id']; ?>');" class="button" /></td>
      <?php } ?>
    </tr>


Теперь идем на страницу товара. Для начала убираем ненужные Бонусные баллы и Наличие. Идем по пути /catalog/view/theme/default/template/product/product.tpl и убираем строки 30-33, оставляя в конце 33-й строки закрывающий тег :

Код
       <?php if ($reward) { ?>
        <span><?php echo $text_reward; ?></span> <?php echo $reward; ?><br />
       <?php } ?>
        <span><?php echo $text_stock; ?></span> <?php echo $stock; ?>


Далее там же уберем цену. Убираем строки 34-57:

Код
      <div class="price"><?php echo $text_price; ?>
        <?php if (!$special) { ?>
        <?php echo $price; ?>
        <?php } else { ?>
        <span class="price-old"><?php echo $price; ?></span> <span class="price-new"><?php echo $special; ?></span>
        <?php } ?>
        <br />
        <?php if ($tax) { ?>
        <span class="price-tax"><?php echo $text_tax; ?> <?php echo $tax; ?></span><br />
        <?php } ?>
        <?php if ($points) { ?>
        <span class="reward"><small><?php echo $text_points; ?> <?php echo $points; ?></small></span><br />
        <?php } ?>
        <?php if ($discounts) { ?>
        <br />
        <div class="discount">
          <?php foreach ($discounts as $discount) { ?>
          <?php echo sprintf($text_discount, $discount['quantity'], $discount['price']); ?><br />
          <?php } ?>
        </div>
        <?php } ?>
      </div>
      <?php } ?>


Убираем так же кнопку Купить, количество, добавление в закладки и в сравнение. Убираем строки 204-218:

Код
      <div class="cart">
        <div><?php echo $text_qty; ?>
          <input type="text" name="quantity" size="2" value="<?php echo $minimum; ?>" />
          <input type="hidden" name="product_id" size="2" value="<?php echo $product_id; ?>" />
           
          <input type="button" value="<?php echo $button_cart; ?>" id="button-cart" class="button" />
        </div>
        <div><span>   <?php echo $text_or; ?>   </span></div>
        <div><a onclick="addToWishList('<?php echo $product_id; ?>');"><?php echo $button_wishlist; ?></a><br />
          <a onclick="addToCompare('<?php echo $product_id; ?>');"><?php echo $button_compare; ?></a></div>
        <?php if ($minimum > 1) { ?>
        <div class="minimum"><?php echo $text_minimum; ?></div>
        <?php } ?>
      </div>


Теперь страница товара выгладит так:



Остался футер. Идем по пути /catalog/view/theme/default/template/common/footer.tpl и убираем строки 29-37:

Код
  <div class="column">
    <h3><?php echo $text_account; ?></h3>
    <ul>
      <li><a href="<?php echo $account; ?>"><?php echo $text_account; ?></a></li>
      <li><a href="<?php echo $order; ?>"><?php echo $text_order; ?></a></li>
      <li><a href="<?php echo $wishlist; ?>"><?php echo $text_wishlist; ?></a></li>
      <li><a href="<?php echo $newsletter; ?>"><?php echo $text_newsletter; ?></a></li>
    </ul>
  </div>


Этим мы убрали блок Личный Кабинет в футере. На его место можно добавить твиттер ленту или же вконтакте/фейсбук плагин, в прочем все, что прийдется по вкусу.

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



В данном примере все товары перекочевали в раздел Наша продукция.

С фронт-эндом закончено.

Часть 2. Бек-энд


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

Поехали. Идем по пути /admin/view/template/common/header.tpl и удалим из раздела Каталог «Загрузки», из раздела Дополнения «Доставка», «Оплата», «Учитывать в заказе», разделы Продажи и Отчеты, а так же удалим из раздела Система – Локализация все, кроме единиц измерения и единиц веса (это может пригодиться для описания продукции). Удаляем строки 78:

Код
<li><a href="<?php echo $download; ?>"><?php echo $text_download; ?></a></li>


86-88:

Код
<li><a href="<?php echo $shipping; ?>"><?php echo $text_shipping; ?></a></li>
<li><a href="<?php echo $payment; ?>"><?php echo $text_payment; ?></a></li>
<li><a href="<?php echo $total; ?>"><?php echo $text_total; ?></a></li>


92-113:

Код
      <li id="sale"><a class="top"><?php echo $text_sale; ?></a>
        <ul>
          <li><a href="<?php echo $order; ?>"><?php echo $text_order; ?></a></li>
          <li><a href="<?php echo $return; ?>"><?php echo $text_return; ?></a></li>
          <li><a class="parent"><?php echo $text_customer; ?></a>
            <ul>
              <li><a href="<?php echo $customer; ?>"><?php echo $text_customer; ?></a></li>
              <li><a href="<?php echo $customer_group; ?>"><?php echo $text_customer_group; ?></a></li>
              <li><a href="<?php echo $customer_blacklist; ?>"><?php echo $text_customer_blacklist; ?></a></li>
            </ul>
          </li>
          <li><a href="<?php echo $affiliate; ?>"><?php echo $text_affiliate; ?></a></li>
          <li><a href="<?php echo $coupon; ?>"><?php echo $text_coupon; ?></a></li>
          <li><a class="parent"><?php echo $text_voucher; ?></a>
            <ul>
              <li><a href="<?php echo $voucher; ?>"><?php echo $text_voucher; ?></a></li>
              <li><a href="<?php echo $voucher_theme; ?>"><?php echo $text_voucher_theme; ?></a></li>
            </ul>
          </li>
          <li><a href="<?php echo $contact; ?>"><?php echo $text_contact; ?></a></li>
        </ul>
      </li>


131-150:

Код
      <li><a href="<?php echo $language; ?>"><?php echo $text_language; ?></a></li>
      <li><a href="<?php echo $currency; ?>"><?php echo $text_currency; ?></a></li>
      <li><a href="<?php echo $stock_status; ?>"><?php echo $text_stock_status; ?></a></li>
      <li><a href="<?php echo $order_status; ?>"><?php echo $text_order_status; ?></a></li>
      <li><a class="parent"><?php echo $text_return; ?></a>
        <ul>
          <li><a href="<?php echo $return_status; ?>"><?php echo $text_return_status; ?></a></li>
          <li><a href="<?php echo $return_action; ?>"><?php echo $text_return_action; ?></a></li>
          <li><a href="<?php echo $return_reason; ?>"><?php echo $text_return_reason; ?></a></li>
        </ul>
      </li>
      <li><a href="<?php echo $country; ?>"><?php echo $text_country; ?></a></li>
      <li><a href="<?php echo $zone; ?>"><?php echo $text_zone; ?></a></li>
      <li><a href="<?php echo $geo_zone; ?>"><?php echo $text_geo_zone; ?></a></li>
      <li><a class="parent"><?php echo $text_tax; ?></a>
        <ul>
          <li><a href="<?php echo $tax_class; ?>"><?php echo $text_tax_class; ?></a></li>
          <li><a href="<?php echo $tax_rate; ?>"><?php echo $text_tax_rate; ?></a></li>
        </ul>
      </li>


159-191:

Код
      <li id="reports"><a class="top"><?php echo $text_reports; ?></a>
        <ul>
          <li><a class="parent"><?php echo $text_sale; ?></a>
            <ul>
              <li><a href="<?php echo $report_sale_order; ?>"><?php echo $text_report_sale_order; ?></a></li>
              <li><a href="<?php echo $report_sale_tax; ?>"><?php echo $text_report_sale_tax; ?></a></li>
              <li><a href="<?php echo $report_sale_shipping; ?>"><?php echo $text_report_sale_shipping; ?></a></li>
              <li><a href="<?php echo $report_sale_return; ?>"><?php echo $text_report_sale_return; ?></a></li>
              <li><a href="<?php echo $report_sale_coupon; ?>"><?php echo $text_report_sale_coupon; ?></a></li>
            </ul>
          </li>
          <li><a class="parent"><?php echo $text_product; ?></a>
            <ul>
              <li><a href="<?php echo $report_product_viewed; ?>"><?php echo $text_report_product_viewed; ?></a></li>
              <li><a href="<?php echo $report_product_purchased; ?>"><?php echo $text_report_product_purchased; ?></a></li>
            </ul>
          </li>
          <li><a class="parent"><?php echo $text_customer; ?></a>
            <ul>
              <li><a href="<?php echo $report_customer_online; ?>"><?php echo $text_report_customer_online; ?></a></li>
              <li><a href="<?php echo $report_customer_order; ?>"><?php echo $text_report_customer_order; ?></a></li>
              <li><a href="<?php echo $report_customer_reward; ?>"><?php echo $text_report_customer_reward; ?></a></li>
              <li><a href="<?php echo $report_customer_credit; ?>"><?php echo $text_report_customer_credit; ?></a></li>
            </ul>
          </li>
          <li><a class="parent"><?php echo $text_affiliate; ?></a>
            <ul>
              <li><a href="<?php echo $report_affiliate_commission; ?>"><?php echo $text_report_affiliate_commission; ?></a></li>
            </ul>
          </li>
        </ul>
      </li> 


Теперь у нас в админ-панели нет ничего лишнего.

На этом, пожалуй, все.