Поддержка пользователей!

Передовые знания в области IT

  • Наши контакты

    Страна:
    Город:
    Адрес:
    Телефон:
    Email:

    Офис

    Создание интернет магазина на платформе Opencart с нуля до продакшн.

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

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

      Итак ценник составил 15 950 руб, и приглядитесь, за что.

    Интернет магазин. Расчет.

     11 950 руб взяли за установку магазина и применение типового шаблона. По сути - при самом медленном подходе - полчаса работы. 2 500 руб Слайдер в шапке!!! Это вообще по умолчанию в любом opencart дистрибутиве стоит, и задача здесь сводится к тому, чтобы закачать 3-4 пользовательских изображения. 5 минут! 1 500 руб Копирайт за две тысячи символов, при расценках 5 баксов за тысячу, и это еще хорошо для копирайтера найти работу по таким расценкам (обычно еще ниже).

    Вобщем, наварились абсолютно бессовестно. Да, и в эти деньги не вошло наполнение магазина, а это бОльшая часть работы. Ну и потом, если присмотритесь, 3 200 руб ушло на оплату хостинга, я так понимаю, за год, точно не уверен, но хотелось бы надеятся, что не за месяц . Как потом выяснилось, это еще не было концом беспредела, и когда знакомый отказался от их услуг и попросил, совершенно справедливо, между нами, свой магазин, Эти злые, нехорошие люди отдали ему не рабочий скрипт, а тупую граббер-выгрузку, ведь магазин может работать только на их хостинге, либо у них нау-хау на скрипт магазина и они считают возможным не раздавать его глупым клиентам, тогда за что они взяли 11 950? Короче, все это здесь пишется не для того, что бы создать фирме, имя которой я не назову антипиар, а для того, чтобы предостеречь читателя от подобного рода услуг. Уверенность есть, что эта фирма не одна такая на рынке.

    Скрипт интернет магазина Opencart. Рекомендации по установке и настройке.

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

     Несколько советов по установке и последующих шагах. Содержимое папки upload нужно разместить в корне хостинга, если мы хотим, чтобы наш магазин был доступен по УРЛ типа http://mydomen.myzone. Также нужно будет создать два пустых файла config.php в корне и каталоге admin, базу данных My SQL или PostgreSQL. По установке вроде бы все. После установки часто возникает проблема, что при добавлении/редактировании товара или каталога возникает ошибка типа "не заполнены необходимые поля". Лечится просто удалением английской локализации в настройках магазина. Очень рекомендую установить модуль export/import от производителя Opencart. Он бесплатный и нужен для загрузки/выгрузки товаров и категорий в формате excel. Следует обратить внимание, что установка модулей в системе Opencart - процесс не очень тривиальный. Нужно разрешить FTP в настройках магазина (вкладка фтп), прописать реальную учетку фтп, действующую на хостинге. И далее, в установщике модулей, загружать архив модуля в виде install_ocmod.zip. Потом еще добавить права на этот модуль группе администраторов. И только так, и никак по другому. Про украшение нашего магазина, в интернетах есть много бесплатных шаблонов. Из всего этого многообразия очень приятно удивил шаблон Journal 2. Шаблон имеет несколько тысяч настроек, и позволяет сделать ваш магазин практически любым. Из многочисленных опций хочется отметить создание и настройка анимированных слайдшоу, причем анимируется не только графика, но и текст. Детальная настройка карточки товара, категории, материала. Включение и выключение отдельных блоков сайта за щелчок. В общем, не стоит тратить время на поиск других шаблонов. Ниже картинка внешнего вида панели управления шаблона Journal 2.

    Контрольная панель Journal 2

     С установкой и настройкой магазина мы немного разобрались выше, пришла пора поговорить про наполнение, собственно то, ради чего магазин и создается. В идеале это должно выглядеть так: продумываем структуру категорий/товаров, определяем необходимые характеристики, пишем описания, делаем по 1-4 фотографий наших товаров и далее ручками, по одному заполняем наш магазин через соответствующий в Opencart интерфейс. Однако идеал редко реализуется на практике и мы приходим к теме автоматического и полуавтоматического парсинга. Собственно, термин парсинг означает сбор информации из ресурсов интернета, интернет магазинов и пр. Для любителей программных решений могу порекомендовать продвинутый инструмент для парсинга Datacol 7


    Datacol 7 Парсинг сайтов

     Datacol имеет действительно обширный функционал, позволяющий спарсить практически любые данные из интернета, оснащен встроенным браузером, который может имитировать любые пользовательские действия, такие как клики, заполнение полей, скролл/прокрутка для подгружающегося контента. И возможность сводить это все в таблички excel и даже в БД типа SQL. На ютюбе есть обучающие видео материалы по Datacol.

     Ну а тем, кто любит пописать, в помощь будет PHP с библиотекой phpQuery и библиотекой PHPExcel.php для сведения спарсенных данных в табличку типа excel. Второй вариант, конечно, более гибкий по сравнению с Datacol и позволяет больше возможностей, однако требует навыков программирования вообще и на php в частности. Преимущество Datacol же состоит во встроенном браузере, который может имитировать Скрол/прокрутку с подгружающимся контентом, что на php реализовать затруднительно. Ниже привожу пример php кода для парсинга.

    													
    require("phpQuery.php");
    require_once 'Classes/PHPExcel.php';
    /////подключаем библиотеку для работы с excel
    $pExcel = new PHPExcel();
    /////Инициализируем новую книгу excel
    $pExcel = new PHPExcel();
    $pExcel->createSheet();
    //////Создаем новый лист
    $pExcel->setActiveSheetIndex(0);
    $aSheet = $pExcel->getActiveSheet();
    ///////Устанавливаем указатель на активный Лист
    ///Здесь переменные, которые могут понадобится
    
    $l = '';
    $k = 1;
    $n = 0;
    $i = 2;
    $p = 2;
    $z = 'stroka';
    /////Начинаем готовить запрос
    class Parser{
       private static $error_codes = [
    	"CURLE_UNSUPPORTED_PROTOCOL",
    	"CURLE_FAILED_INIT",
    	"CURLE_FTP_BAD_FILE_LIST",
    	"CURLE_CHUNK_FAILED"
    ];
    
    	public static function getPage($params = []){
    
    		if($params){
    
    			if(!empty($params["url"])){
    
    				$url = $params["url"];
                    
    //////Прописываем браузер, имя которого отобразиться на удаленном сервере             
    $useragent      = !empty($params["useragent"]) ? $params["useragent"] : "Mozilla/5.0 (Windows NT 6.3; W…) Gecko/20100101 Firefox/57.0";
    ////Сколько ждать страницу
    $timeout        = !empty($params["timeout"]) ? $params["timeout"] : 5;
    $connecttimeout = !empty($params["connecttimeout"]) ? $params["connecttimeout"] : 5;
    $head           = !empty($params["head"]) ? $params["head"] : false;
    ////Принимаем/Не принимаем cookie
    $cookie_file    = !empty($params["cookie"]["file"]) ? $params["cookie"]["file"] : false;
    $cookie_session = !empty($params["cookie"]["session"]) ? $params["cookie"]["session"] : false;
    //////Используем/Не используем прокси
    $proxy_ip   = !empty($params["proxy"]["ip"]) ? $params["proxy"]["ip"] : false;
    $proxy_port = !empty($params["proxy"]["port"]) ? $params["proxy"]["port"] : false;
    $proxy_type = !empty($params["proxy"]["type"]) ? $params["proxy"]["type"] : false;
    $headers = !empty($params["headers"]) ? $params["headers"] : false;
    $post = !empty($params["post"]) ? $params["post"] : false;
                    
        
                    if($cookie_file){
    
    	file_put_contents(__DIR__."/".$cookie_file, "");
    }
                    $ch = curl_init();
    
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLINFO_HEADER_OUT, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $connecttimeout);
    if(strpos($url, "https") !== false){
    
    	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);
    	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
    }
    if($cookie_file){
    
    	curl_setopt($ch, CURLOPT_COOKIEJAR, __DIR__."/".$cookie_file);
    	curl_setopt($ch, CURLOPT_COOKIEFILE, __DIR__."/".$cookie_file);
    
    	if($cookie_session){
    
    	curl_setopt($ch, CURLOPT_COOKIESESSION, true);
    	}
    }
    if($proxy_ip && $proxy_port && $proxy_type){
    
    	curl_setopt($ch, CURLOPT_PROXY, $proxy_ip.":".$proxy_port);
    	curl_setopt($ch, CURLOPT_PROXYTYPE, $proxy_type);
    }
    
    if($headers){
    
    	curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    }
    
    if($post){
    
    	curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    }
    $content = curl_exec($ch);
    $info 	 = curl_getinfo($ch);
    $error = false;
    
    if($content === false){
    
    	$data = false;
    	$error["message"] = curl_error($ch);
    	$error["code"] 	  = self::$error_codes[
    		curl_errno($ch)
    	];
    }else{
    
    	$data["content"] = $content;
    	$data["info"] 	 = $info;
    }
    
    curl_close($ch);
    
    return [
    	"data" 	=> $data,
    	"error" => $error
    ];
                                
    			}
    		}
    
    		return false;
    	}
    }
    //////!!!!!!!!!!!!!!!
    //////Здесь прописываем строку запроса к серверу
    //////!!!!!!!!!! 
    $final_string = 'https://сайт.домейн/';
        $html = Parser::getPage([
    	"url" => $final_string ]);
    
    if(!empty($html["data"])){
    
    	$content = $html["data"]["content"];
    	phpQuery::newDocument($content);
    /////// здесь делаем первую выборку HTML блоков если в виде ".some-text", то
    ////////выборка будет производиться по тэгам с class="some-text", если  "#some-text"
    ///////то поиск будет по id="some-text" 
    	$categories = pq(".some-text");    
    	$tmp = [];
    	foreach($categories as $key => $category){
    	$category = pq($category);
        $tmp[$key] = [
    ////здесь делаем детальный поиск по отобранным выше блокам HTML
    ////и наполняем ими массив tmp[], таких элементов можно добавить по необходимости столько, сколько нужно 			
    "url"  => trim($category->find(".caption")->html()),
    "name" => trim($category->find("#product-name")->text()),
    "cena" => trim($category->find(".price")->text())
            
    		];
        }
        ////Выгружаем HTML документ
        phpQuery::unloadDocuments();
    } 
    
    ///// ну и имея наполненный массив, заполняем табличку excel
    
    foreach($tmp as $value){        
        $aSheet->setCellValue('A'.($k), $value["url"]);
        $aSheet->setCellValue('B'.($k), $value["name"]);
        $aSheet->setCellValue('C'.($k), $value["cena"]);
        
        
        ////Здесь же можно и фотки забрать например так, если $value["url"] у нас адрес изображения то
         $ctx = stream_context_create(array(
        'http' => array(
            'timeout' => 15
            ////таймаут, сколько ждать запроса
                       )
                                            )
                                     );
        $u_str = $value["url"];
        $path = 'локальный путь для сохранения';
        file_put_contents($path, file_get_contents($u_str,0,$ctx)); 
        /////записать в excel новый путь до изображения
        $aSheet->setCellValue('D'.($k), $path);
        ///не забываем переключать счетчик строк на новую строку
        $k++;
        
    }    
    
    ////записываем табличку в файл
    
    $objWriter = PHPExcel_IOFactory::createWriter($pExcel, 'Excel2007');
    $objWriter->save('sample.xlsx');
    /////////конец
    
    

     

    Обратная связь

    Ваше имя:
    Ваш E-mail:
    Сообщение: