판매 부스터
간단한 PHP 조회 시스템을 만드는 방법에 대한 자습서와 예제에 오신 것을 환영합니다.
따라서 이미 일부 제품을 판매하고 판매량을 늘리려는 웹 사이트가 있습니다.
추천 시스템이 도움이 될 수 있지만,이를 구현하려면 약간의 기술적 인 기술이 필요합니다. 우리는 어떻게 합니까? 이 안내서는 단계를 안내합니다. 계속 읽으십시오!
ⓘ이 튜토리얼의 시작 부분에 모든 소스 코드가 포함 된 zip 파일이 포함되어 있으므로 모든 것을 복사하여 붙여 넣을 필요가 없습니다.
소스 코드 다운로드
먼저 약속 한대로 소스 코드에 대한 다운로드 링크가 있습니다.
소스 코드 다운로드
소스 코드를 다운로드하려면 여기를 클릭하십시오. MIT 라이센스에 따라 릴리스되었으므로 그 위에 빌드하거나 자신의 프로젝트에서 자유롭게 사용하십시오.
폴더
다음은 zip 파일에서 폴더를 구성하는 방법에 대한 간략한 소개입니다.
빠른 시작
개요 및 가정
코드를 살펴보기 전에 먼저 시스템 작동 방식에 대한 개요를 시작하겠습니다. 또한 다음은 내 가정 중 일부입니다. 따라서 이 안내서에서 무엇을 기대해야 하는지 알 수 있습니다.
가정 및 참고 사항
여기에 있는 대부분의 사람들은 이미 물건을 판매하고 있는 추천 웹 사이트 인“확장”을 원하는 기존 웹 사이트를 가지고 있어야 합니다. 이를 통해 우리는 바퀴를 재발견하지 않고 또 다른 쇼핑 카트, 사용자 시스템 또는 로그인 시스템을 만들 수 없습니다.
또한 이 가이드는 광범위한 역학에 대해서만 다룰 것입니다. 우리는 "Shopify, Magento, Drupal, WordPress를 구현하는 방법"에 대한 세부 사항으로 들어 가지 않을 것입니다 – 또는 이 안내서는 결코 끝나지 않을 것입니다 ... 더 중요한 것은, 작업 중인 사람들에게는 무료 점심이 제공되지 않습니다 유료 프로젝트. 당신은 당신의 자신의 지불 수표를 적립해야 합니다. ?
시스템 개요
이것은 일반적으로 전체 시스템의 프로세스 흐름입니다.
그러나 위의 메모와 마찬가지로 모든 사람은 다른 시스템과 다른 승인 프로세스를 갖게 됩니다. 추천 가입에 깊이 들어가거나 전체 장바구니를 다시 만들지 않습니다.
데이터베이스
이제 시스템 개요를 완료 했으므로 시스템의 기초 인 데이터베이스 테이블에 대해 소개하겠습니다.
REFERRALS TABLE
먼저, 귀하의 진료 의뢰에 관한 모든 정보를 담을 테이블이 있어야 합니다.
CREATE TABLE `referral` ( `referral_id` int(11) NOT NULL, `referral_name` varchar(255) NOT NULL, `referral_email` varchar(255) NOT NULL, `referral_password` varchar(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; ALTER TABLE `referral` ADD PRIMARY KEY (`referral_id`), ADD UNIQUE KEY `referral_name` (`referral_name`), ADD UNIQUE KEY `referral_email` (`referral_email`); ALTER TABLE `referral` MODIFY `referral_id` int(11) NOT NULL AUTO_INCREMENT; COMMIT;
Field | Description |
referral_id | 기본 키, 자동 증분. |
referral_name | 추천 링크에 사용되는 고유 한 사용자 이름입니다. |
referral_email | 복수 등록을 방지 할 수 있는 고유 한 추천 이메일. |
referral_password | 추천 포털을 생성하기로 결정한 경우 추천 로그인을 위한 비밀번호입니다. |
이것은 사용자 테이블이 아닙니까? 예, 일종의 원하는 경우 기존 사용자 테이블을 실제로 수정하고 다른“사용자 역할”열을 추가하여 관리자, 고객 및 추천을 구분할 수 있습니다. 그러나 "비파괴적인"예를 위해 이 표를 대신 사용할 것입니다.
REFERRAL SALES TABLE
다음으로 모든 추천 판매를 보관할 테이블이 필요합니다.
CREATE TABLE `referral_sales` ( `referral_id` int(11) NOT NULL, `order_id` int(11) NOT NULL, `order_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `order_amount` decimal(10,2) NOT NULL, `order_commission` decimal(10,2) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; ALTER TABLE `referral_sales` ADD PRIMARY KEY (`referral_id`,`order_id`), ADD KEY `order_date` (`order_date`); COMMIT;
Field | Description |
referral_id | Partial primary key and foreign key. |
order_id | Partial primary key and foreign key. |
order_date | Date of sale. |
order_amount | Total order amount. |
order_commission | Commission amount given to the referral. |
다시 한 번 기존 주문 표에 추천 ID를 추가 할 수 있었습니다. 그러나 기존 프로젝트를 망설이지 않기 위해 별도의 판매 테이블에서 작업합니다.
핵심 라이브러리
이제 데이터베이스 테이블을 설정 했으므로 이제 스크립트로 넘어 갑시다. 이 섹션에서는 모든 처리 작업을 수행 할 서버 측 라이브러리 파일을 소개합니다. 이미 자신의 프로젝트를 위한 프레임 워크를 선택했을 수도 있습니다. –이 예제를 예로 들어서 자신의 프로젝트에서 자신의 프레임 워크를 사용하도록 전환하십시오.
구성 파일
// MUTE NOTICES error_reporting(E_ALL & ~E_NOTICE); // DATABASE SETTINGS - CHANGE THESE TO YOUR OWN define('DB_HOST', 'localhost'); define('DB_NAME', 'test'); define('DB_CHARSET', 'utf8'); define('DB_USER', 'root'); define('DB_PASSWORD', ''); // AUTO FILE PATH define('PATH_LIB', __DIR__ . DIRECTORY_SEPARATOR);
우리가 가지고 있는 첫 번째 스크립트는 설정 파일이며 모든 설정과 내용을 저장할 수 있는 장소입니다. 데이터베이스 설정을 원하는 대로 변경하십시오.
데이터베이스 라이브러리
class DB { private $pdo = null; private $stmt = null; public $lastID = null; function __construct () { // __construct() : connect to the database // PARAM : DB_HOST, DB_CHARSET, DB_NAME, DB_USER, DB_PASSWORD // ATTEMPT CONNECT try { $str = "mysql:host=" . DB_HOST . ";charset=" . DB_CHARSET; if (defined('DB_NAME')) { $str .= ";dbname=" . DB_NAME; } $this->pdo = new PDO( $str, DB_USER, DB_PASSWORD, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false ] ); } // ERROR - CRITICAL STOP - THROW ERROR MESSAGE catch (Exception $ex) { print_r($ex); die(); } } function __destruct () { // __destruct() : close connection when done if ($this->stmt !== null) { $this->stmt = null; } if ($this->pdo !== null) { $this->pdo = null; } } function exec ($sql, $data=null) { // exec() : run insert, replace, update, delete query // PARAM $sql : SQL query // $data : array of data try { $this->stmt = $this->pdo->prepare($sql); $this->stmt->execute($data); $this->lastID = $this->pdo->lastInsertId(); } catch (Exception $ex) { $this->error = $ex; return false; } $this->stmt = null; return true; } function start () { // start() : auto-commit off $this->pdo->beginTransaction(); } function end ($commit=1) { // end() : commit or roll back? if ($commit) { $this->pdo->commit(); } else { $this->pdo->rollBack(); } } function fetchAll ($sql, $cond=null, $key=null, $value=null) { // fetchAll() : perform select query (multiple rows expected) // PARAM $sql : SQL query // $cond : array of conditions // $key : sort in this $key=>data order, optional // $value : $key must be provided. If string provided, sort in $key=>$value order. If function provided, will be a custom sort. $result = []; try { $this->stmt = $this->pdo->prepare($sql); $this->stmt->execute($cond); // Sort in given order if (isset($key)) { if (isset($value)) { if (is_callable($value)) { while ($row = $this->stmt->fetch(PDO::FETCH_NAMED)) { $result[$row[$key]] = $value($row); } } else { while ($row = $this->stmt->fetch(PDO::FETCH_NAMED)) { $result[$row[$key]] = $row[$value]; } } } else { while ($row = $this->stmt->fetch(PDO::FETCH_NAMED)) { $result[$row[$key]] = $row; } } } // No key-value sort order else { $result = $this->stmt->fetchAll(); } } catch (Exception $ex) { $this->error = $ex; return false; } // Return result $this->stmt = null; return count($result)==0 ? false : $result ; } function fetch ($sql, $cond=null, $sort=null) { // fetch() : perform select query (single row expected) // returns an array of column => value // PARAM $sql : SQL query // $cond : array of conditions // $sort : custom sort function $result = []; try { $this->stmt = $this->pdo->prepare($sql); $this->stmt->execute($cond); if (is_callable($sort)) { while ($row = $this->stmt->fetch(PDO::FETCH_NAMED)) { $result = $sort($row); } } else { while ($row = $this->stmt->fetch(PDO::FETCH_NAMED)) { $result = $row; } } } catch (Exception $ex) { $this->error = $ex; return false; } // Return result $this->stmt = null; return count($result)==0 ? false : $result ; } function fetchCol ($sql, $cond=null) { // fetchCol() : yet another version of fetch that returns a flat array // I.E. Good for one column SELECT `col` FROM `table` $this->stmt = $this->pdo->prepare($sql); $this->stmt->execute($cond); $result = $this->stmt->fetchAll(PDO::FETCH_COLUMN, 0); return count($result)==0 ? false : $result; } }
다음으로 모든 SQL 무거운 작업을 수행 할 데이터베이스 라이브러리가 있습니다. 이것은 PDO를 기반으로 하므로 MySQL뿐만 아니라 다른 많은 데이터베이스와도 작동해야 합니다.
Function | Description |
__construct | The constructor, which will automatically connect to the database when the object is created. |
__destruct | The destructor, which will automatically close the database connection when the object is destroyed. |
exec | This will run a single insert, replace, update, or delete query. |
start | Auto-commit off. Used in conjunction with end, when you have multiple queries to run. |
end | Used in conjunction with start, commit or rollback all the previous queries. |
fetchAll | Run a select query, returns an associative array of with multiple rows of results. |
fetch | Run a select query, returns an associative array of column > value. |
fetchCol | Run a select query, returns a flat array with values from the specified column. |
프로세스 단계
필요한 모든 데이터베이스 테이블과 핵심 라이브러리 파일을 소개 했으므로 참조 영업 프로세스 단계를 살펴 보겠습니다.
1 단계) 추천 계정 만들기
/* [STEP 1 : CREATE REFERRAL ACCOUNT] */ // INIT require "lib/config.php"; require PATH_LIB . "lib-db.php"; $libDB = new DB(); // CREATE NEW REFERRAL ACCOUNT $pass = $libDB->exec( "INSERT INTO `referral` (`referral_name`, `referral_email`, `referral_password`) VALUES (?, ?, ?)", ["johndoe", "john@doe.com", "123456"] ); echo $pass ? "OK" : $libDB->error;
추천 시스템의 첫 번째 단계는 추천 가입 페이지를 만드는 것입니다… 간단한 HTML 양식부터 복잡한 수동 심사 프로세스에 이르기까지 모든 것이 가능합니다. 파트너를 위한 전체 추천 로그인 포털을 만들 수도 있습니다.
2 단계) 참조 링크 생성
/* [STEP 2 : GENERATING AFFILIATE LINKS] */ // INIT require "lib/config.php"; require PATH_LIB . "lib-db.php"; $libDB = new DB(); // ! PLEASE CHANGE YOUR OWN URL HERE ! $url = "http://localhost/test/3-use-link.php"; // GET REFERRAL INFORMATION $rID = 1; $referral = $libDB->fetch( "SELECT * FROM `referral` WHERE `referral_id`=?", [$rID] ); if (is_array($referral)) { echo $url . "?ref=" . $referral['referral_name']; } else { echo $url; }
다음으로 파트너가 홍보 할 수 있는 추천 링크를 생성해야 합니다. 조회 로그인 이름이 –? ref = REFERRAL NAME 인 조회 로그인 이름으로 방문 페이지를 가리키는 것만 큼 쉽습니다.
3 단계) 추천 링크 방문 페이지
/* [STEP 3 : AFFILIATE LINK LANDING PAGE] */ // WHEN THE CUSTOMER USES THE AFFILIATE LINK // !! SESSION MUST BE STARTED !! // INIT require "lib/config.php"; require PATH_LIB . "lib-db.php"; $libDB = new DB(); session_start(); // ! PLEASE CHANGE TO YOUR OWN REDIRECT URL HERE ! $redirect = "http://localhost/test/3-use-link.php"; // VERIFY GIVEN REFERRAL LINK if ($_GET['ref']) { $referral = $libDB->fetch( "SELECT * FROM `referral` WHERE `referral_name`=?", [$_GET['ref']] ); if (is_array($referral)) { // We put the referral id into the session $_SESSION['ref'] = $referral['referral_id']; } // Redirect user to another page when done // This is to hide the referral link & stop users from messing with it header("Location: " . $redirect); die(); } print_r($_SESSION);
이제 고객은 제휴사 링크를 사용하여 지정된 방문 페이지로 이동합니다. 이에 대한 속임수도 많지 않으므로 $_SESSION['ref'] 세션에서 추천 ID를 유지하면 해당 파트너가 특정 고객을 소개 할 수 있습니다. 또한 일정 종류의 타임 스탬프 또는 시간 초과를 설정하려고 할 수 있습니다. 따라서 정해진 시간 내에 주문이 처리됩니다.
4 단계) 추천 판매
/* [STEP 4 : SALES CREDIT] */ // WHEN THE CUSTOMER CHECKS OUT // !! SESSION MUST BE STARTED !! // !! $_SESSION['ref'] MUST BE SET !! // INIT require "lib/config.php"; require PATH_LIB . "lib-db.php"; $libDB = new DB(); session_start(); // PROCEED TO CHECKOUT YOUR OWN ORDER FIRST // $yourCart->checkout() or something... // Then calculate the own referral commission $rID = $_SESSION['ref']; $oID = 999; $date = date("Y-m-d H:i:s"); $amount = 999.99; $commission = 88.88; $pass = $libDB->exec( "INSERT INTO `referral_sales` (`referral_id`, `order_id`, `order_date`, `order_amount`, `order_commission`) VALUES (?, ?, ?, ?, ?)", [$rID, $oID, $date, $amount, $commission] ); echo $pass ? "OK" : $libDB->error; // END THE REFERRAL SESSION IF YOU WANT unset($_SESSION['ref']);
고객이 주문을 확인할 때 파트너에게 수수료를 주어야 합니다. 다시 한 번 간단 함 – 주 주문을 처리 한 후 커미션을 계산하여 추천 판매 테이블에 넣습니다.
5 단계)보고
/* [STEP 5 : SALES REPORT] */ // INIT require "lib/config.php"; require PATH_LIB . "lib-db.php"; $libDB = new DB(); session_start(); // GET REPORT $rid = 1; $start = date("Y-m-01 00:00:00"); $end = date("Y-m-t 23:59:59"); $sales = $libDB->fetchAll( "SELECT * FROM `referral_sales` WHERE `referral_id`=? AND `order_date` BETWEEN ? AND ?", [$rid, $start, $end], "order_id" ); print_r($sales);
마지막 단계는 월별 판매 보고서를 생성하여 파트너에게 보내는 것입니다.
유용한 비트
이것으로 코드가 완성되었으며 여기에 유용한 추가 정보가 있습니다.
링크 및 참조
등록된 댓글이 없습니다.