safa Posted May 5, 2010 Share Posted May 5, 2010 prestashop'ta modül egeliştirme olayı tamamen gizli kalmış durumda. artık bu ödeme modüllerini nasıl yapıldığını anlatmak istiyorum. sadece bu ortadaki karışıklık ve herkesin birbirine hakaret etmesinden bıktığımdan dolayı.----------------------------------------------------------------------------------------------------------------bilindi gibi prestashop smarty ye uyumlu şekilde çalışmaktadır, ve prestashop içinde gelen class yapılarının bütün modülleri kontrol ettiğini unutmayalım.ilk adım.Modül ismi:modül isimlendirmesini yaparken. örnek "offlinecardpayment" diye bir klasör açığımız zaman bu klasörün içinde aynı isimde offlinecardpayment.php dosyasının olması gerekir. ilk adım olarak offlinecardpayment diye bir klasör açın ve içinde offlinecardpayment.php diye bir dosya oluşturun. eğer safa diye bir klasör açasanız içine safa.php dosyasını oluşturmak zorundasınız. ve bu dosyanın içine biraz kod yazalım <?php class offlinecardpayment extends PaymentModule //burada dikkat edilirse bu class in bir payment modülü olduğunu prestashop class larına bildiyoruz. işte bu sayade her modülün işlevi birbirinden ayrılmış oluyor. { private $_html = ''; private $_postErrors = array(); function __construct() { $this->name = 'offlinecardpayment'; $this->tab = 'Payment';// admin panelindeki modül guruplarından payment modülü katagorisine atama işlemi $this->version = 1; parent::__construct(); // bu parent yazılan modülün çevirilerine izin verilmesini açıklıyor. $this->page = basename(__FILE__, '.php'); $this->displayName = $this->l('Offline Payments Module');// bu modülün admin panelinde görünen ismi $this->description = $this->l('Take Payment Card details for offline processing'); // burasıda yine admin panelindeki modülün açıklaması } } ?> bu şekilde dosyayı kaydettiğiniz zaman admin panelinde ilk modülünüzü görebilirsiniz.adım adım açıklanacaktır. arkadaşlar lütfen modül bitmeden yorum yazmayın. Link to comment Share on other sites More sharing options...
safa Posted May 5, 2010 Author Share Posted May 5, 2010 modülün install function yazılmasıadmin bölümünde her modülün yanında install butonu vardır. yine prestashop class yapılarına uygun olarak kur va kaldır. sistemine göre tasarlanmıştır. ilk aşamada bu install function inı yazalım. public function install() { if (!parent::install() OR !$this->createPaymentcardtbl() //girilen kredi kartı bilgilerini veritabanında tutumak için için ayrı bir function yazacaz ilerde. ilerleyen postlarda bunu görebilrisiniz OR !$this->registerHook('invoice') OR !$this->registerHook('payment') OR !$this->registerHook('paymentReturn')) return false; return true; } ------------------------------------------ OR !$this->createPaymentcardtbl() işte bu fonsiyonda girilen kart bilgilerini tutacaz. OR !$this->registerHook('invoice') OR !$this->registerHook('payment') OR !$this->registerHook('paymentReturn') bu üç satırında temel işlevi bize ödeme modül boyunca işimize yarayacak. .tpl dosyalarını oluşma izninin prestashop class ları tarafında verilmesini sağlamaktır. Link to comment Share on other sites More sharing options...
safa Posted May 5, 2010 Author Share Posted May 5, 2010 createPaymentcardtbl()işte şimdi modülün install functionu içinde işimize yarayacak createPaymentcardtbl() functionunu yazlaım ve girilen kart bilgilerini veritabanımıza tutmak için önemli:)id_payment = her sipariş için bir numara kaydediyoruz.id_order = girilen kart bilgilerini hangi spairiş için ilşkilendiriyoruzcardholder_name = kredi kartı üzerinde yazlılan ismi tutuyoruzcardnumber = kredi kartı numarasını tutuyoruzexpiry date = kredi kartının son kullanma tarihini tutuyoruz. function createPaymentcardtbl() { $db = Db::getInstance(); $query = "CREATE TABLE `"._DB_PREFIX_."order_paymentcard` ( `id_payment` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `id_order` INT NOT NULL , `cardholdername` TEXT NOT NULL , `cardnumber` TEXT NOT NULL ) ENGINE = MYISAM "; $db->Execute($query); return true; } bu satırlarıda offlinecardpayment.php doaysına yaerleştirip modülü kur emri verildikten sonra veritabanınızdaps_module tablosunda offlinecardpayment diye bir alan açıldığına bakabilirsiniz. Link to comment Share on other sites More sharing options...
safa Posted May 5, 2010 Author Share Posted May 5, 2010 /order.php?step=3 şimdide müşterinin kargo seçimini, fatura adress seçimi yaptıktan sonra ödeme türlerini seçtiği alanda bir işret verelim yani kredi kartı ile ödeme yapmak için tıklayınız gibi.dikkat ederseniz yukarda hookPayment() diye bir function sayasinde .tpl dosyaları yağtığımızı söylemiştim. işte bu fonsiyonla. payment.tpl ve payment.php dosyalarıyla bir ödeme alanı yapacağız. function hookPayment($params) { global $smarty; $smarty->assign(array( 'this_path' => $this->_path, 'this_path_ssl' => Configuration::get('PS_FO_PROTOCOL').$_SERVER['HTTP_HOST'].__PS_BASE_URI__."modules/{$this->name}/")); return $this->display(__FILE__, 'payment.tpl'); } --------------------------------- global $smarty; bu fonsiyon yardımıyla smarty template i yaratıyoruz.---------------------- $smarty->assign(array( 'this_path' => $this->_path, 'this_path_ssl' => Configuration::get('PS_FO_PROTOCOL').$_SERVER['HTTP_HOST'].__PS_BASE_URI__."modules/{$this->name}/")) bu satırlarla bilgileri smarty temlplateine gönderiyoruz. Link to comment Share on other sites More sharing options...
safa Posted May 5, 2010 Author Share Posted May 5, 2010 şimdi sıra geldi payment.tp ve payment.php dosyalarını yazmaya. payment.tpl {l s='Pay with a credit card' mod='offlinecardpayment'} görüldüğü gibi html bilen biri için gayet basit kodlar ödeme seçimi yaparken bir tane resim tıyoruz ve kredi kartı ile ödeme diye bir yazı sunuyoruz. modülü çevirilere uyumlu dzğzenlendiğinden seçimler ing oluyor.ihtiyarcınız olalan bitan uygun büyüklükte cards.png resmi googlan bir sürü bulabilirsiniz. payment.php <?php include(dirname(__FILE__).'/../../config/config.inc.php'); include(dirname(__FILE__).'/../../header.php'); include(dirname(__FILE__).'/offlinecardpayment.php'); if (!$cookie->isLogged()) Tools::redirect('authentication.php?back=order.php'); $offlinecardpayment = new offlinecardpayment(); echo $offlinecardpayment->execPayment($cart); include_once(dirname(__FILE__).'/../../footer.php'); ?> bu içerikleri ilgili dosyaları yaratıp içine kaydediniz. bu aşamada yine daha sona yazacağımız bir tane execPayment() fonsiyonu çağıyoruz bu aşamda bu fonsiyona sahip değiliz. Link to comment Share on other sites More sharing options...
safa Posted May 5, 2010 Author Share Posted May 5, 2010 execPayment() fonsiyonunu müşteri kredi kartı bilgilerini girdiği zaman veritabanında gönder dediği zaman kontrol sağlanacak ve bu şekilde veritabanına bilgiler gönderilecek.offlinecardpayment.php doyasını açın ve bu function ıda içne atın:) public function execPayment($cart) { if (!$this->active) return ; global $cookie, $smarty; $smarty->assign(array( 'this_path' => $this->_path, 'this_path_ssl' => (Configuration::get('PS_SSL_ENABLED') ? 'https://' : 'http://').htmlspecialchars($_SERVER['HTTP_HOST'], ENT_COMPAT, 'UTF-8').__PS_BASE_URI__.'modules/'.$this->name.'/' )); return $this->display(__FILE__, 'payment_execution.tpl'); } dikkat ederseniz kodun en sonundareturn $this->display(__FILE__, 'payment_execution.tpl'); diye bir komut veriyoruz burdaki payment_execution.tpl dosyadında kredi kartı bilgilerini girme alanı belirtiyoruz. bu soya şimdilik elimizde yok:) Link to comment Share on other sites More sharing options...
safa Posted May 5, 2010 Author Share Posted May 5, 2010 ve şimdide müşterinin kredi kartı bilgilerini girdiği payment_execution.tpl dosyasını yazalım. >capture name=path}{l s='Shipping'}{/capture} {include file=$tpl_dir./breadcrumb.tpl} {l s='Order summary' mod='offlinecardpayment'} {assign var='current_step' value='payment'} {include file=$tpl_dir./order-steps.tpl} {l s='Payment Card Details' mod='offlinecardpayment'} <form action="{$this_path_ssl}validation.php" method="post"> </pre> <table border="0"> {l s='Name on Card:' mod='offlinecardpayment'} <input type="text" name="cardholderName" id="cardholderName" value="{$cardholderName}"/> {l s='Credit Card Number:' mod='offlinecardpayment'} <input type="text" name="cardNumber" id="cardNumber" value="{$cardNumber}" /> </table> <br><br><p> {l s='Other payment methods' mod='offlinecardpayment'} <input type="submit" name="paymentSubmit" value="{l s='Submit Order' mod='creditcard'}" class="exclusive_large" /> </p> <br></fo dikkat ederseniz form un action kısmına validation.php dosyasına gönderiyoruz yani girilen bilgileri validation .php dosyasına POST ediyoruz..bunu yazınca sitemizde negibi bir görüntü sağladı bakalım:) Link to comment Share on other sites More sharing options...
safa Posted May 5, 2010 Author Share Posted May 5, 2010 ve şimdide kredi kartı bilgilerini post metoduyla aldığımız validation.php dosyasını yazalım. bu bilgilerle şimdiye kadar yazdığımız fonsiyonlrı kullanarak. bilgileri veritabanımıza gönderilim. <?php include(dirname(__FILE__).'/../../config/config.inc.php'); include(dirname(__FILE__).'/../../header.php'); include(dirname(__FILE__).'/offlinecardpayment.php'); /* Gather submitted payment card details */ $cardholderName = $_POST['cardholderName']; $cardNumber = $_POST['cardNumber']; $currency = new Currency(intval(isset($_POST['currency_payement']) ? $_POST['currency_payement'] : $cookie->id_currency)); $total = floatval(number_format($cart->getOrderTotal(true, 3), 2, '.', '')); $offlinecardpayment = new offlinecardpayment(); $offlinecardpayment->validateOrder($cart->id, _PS_OS_PREPARATION_, $total, $offlinecardpayment->displayName, NULL, NULL, $currency->id); $order = new Order($offlinecardpayment->currentOrder); $offlinecardpayment->writePaymentcarddetails($order->id, $cardholderName, $cardNumber); Tools::redirectLink(__PS_BASE_URI__.'order-confirmation.php?id_cart='.$cart->id.'&id;_module='.$offlinecardpayment->id.'&id;_order='.$offlinecardpayment->currentOrder.'&key;='.$order->secure_key); ?> gördüğünüz gibi kodlar gayet basit:) bilgileri veritabanına gönderme işlemi ve sitede yeni bir sipariş kaydı yapıyoruz. ardaki fonctionlar genelde prestashop 'a sipariş tutarını ödeme bilgilerini tutan değişkenler yardmıyla sitede sipariş kaydını gerçekleiştiriyoruz.burada ilginç bişey var ve bir fonksiyona daha ihtiyarç duyduğumuz şey. $offlinecardpayment->writePaymentcarddetails($order->id, $cardholderName, $cardNumber); bu fonsiyonu tekrarofflinecardpayment.php dosyasını açarak içine kaydedin. function writePaymentcarddetails($id_order, $cardholderName, $cardNumber) { $db = Db::getInstance(); $result = $db->Execute(' INSERT INTO `ps_order_paymentcard` ( `id_order`, `cardholdername`,`cardnumber`) VALUES ("'.intval($id_order).'","'.$cardholderName.'","'.$cardNumber.'")'); return; } işte bu fonsiyon bilgileri veritabanımıza gönderiyor. Link to comment Share on other sites More sharing options...
safa Posted May 5, 2010 Author Share Posted May 5, 2010 şimdiye kadar modülün müşteri tarafındaki ksımlarını tamamen hallettik. müşteri kredi kartı bilgilerini giriyor ve bu bilgiler veritabanına kaydediliyor. şimdi sıra geldi sitenin admin bölüme:)hatırlarsanız OR !$this->registerHook('invoice') böyle bir kod kullanmıştık. işte bu kod sayesinde şimdi zaırlayacağımız funtion ve tpl dosyaları sayesinde veritabanındaki kredi kartı bilgilerini okuyacağız.tekrar offlinecardpayment.php dosyasını açın ve bu function ını içine yazın bu function veritabanındaki verileri okumammınızı sağlıyor. function hookInvoice($params) { $id_order = $params['id_order']; global $smarty; $paymentCarddetails = $this->readPaymentcarddetails($id_order); $smarty->assign(array( 'cardHoldername' => $paymentCarddetails['cardholdername'], 'cardNumber' => $paymentCarddetails['cardnumber'], 'id_order' => $id_order, 'this_page' => $_SERVER['REQUEST_URI'], 'this_path' => $this->_path, 'this_path_ssl' => Configuration::get('PS_FO_PROTOCOL').$_SERVER['HTTP_HOST'].__PS_BASE_URI__."modules/{$this->name}/")); return $this->display(__FILE__, 'invoice_block.tpl'); } ve bunu:) function readPaymentcarddetails($id_order) { $db = Db::getInstance(); $result = $db->ExecuteS(' SELECT * FROM `ps_order_paymentcard` WHERE `id_order` ="'.intval($id_order).'";'); return $result[0]; } ve şimdide bu verileri adminde görmemizi sağlayaninvoice_block.tpl dosyasını yazalım. {l s='Payment Card Information' mod='offlinecardpayment'} Card Holder Name: {$cardHoldername}Card Number: {$cardNumber} bu şekilde modül tamamlanıyor hemen admin görünümüne bakalım. Link to comment Share on other sites More sharing options...
safa Posted May 5, 2010 Author Share Posted May 5, 2010 bu bilgileri sadece öğrenme amaçlı verdim , bir modül nasıl geliştirildiği hakkında php ve smarty si iyi olan arkadaşlar bunu online çevirebilir. benim gibi. tabiki bu modül kullanılacak bişey değil çünkü kredi kart bilgilerini görmek etik değil. bu çevrim sışı kredi kartı modülünü geliştiren forumda bir arkadaş var açtığı konularhttp://www.prestashop.com/forums/viewthread/3684/third_party_modules/offline_credit_card_module_current_v2_dot_0_dot_5http://www.prestashop.com/forums/viewthread/53591/third_party_modules/beta_testing_offline_credit_card_module_v_dot_3_dot_01_dot_betaburdan detaylsını indirebilrisinz. tabiki bu yazıan modül şu anda basit bir işlem bu çok geliştirilebilir.çalışmanın bitmiş dosyaları ekte... offlinecardpayment.zip 1 Link to comment Share on other sites More sharing options...
MahmutGulerce Posted May 5, 2010 Share Posted May 5, 2010 güzel Link to comment Share on other sites More sharing options...
Ferdem Posted May 5, 2010 Share Posted May 5, 2010 mantığını gayet güzel açıklamışın safam emeğine sağlık kardeşim cidden süper bir anlatım olmuş Link to comment Share on other sites More sharing options...
safa Posted May 5, 2010 Author Share Posted May 5, 2010 güzel mantığını gayet güzel açıklamışın safam emeğine sağlık kardeşim cidden süper bir anlatım olmuş teşekkürler:-) Link to comment Share on other sites More sharing options...
eXspet Posted January 30, 2012 Share Posted January 30, 2012 Merhaba, buradaki invoice block her faturada görünüyor, bunu sadece o modül kullanılarak yapılan siparişlerde gösterilecek şekilde ayarlayamaz mıyız? Şimdiden teşekkürler. Link to comment Share on other sites More sharing options...
MEG Venture Posted January 30, 2012 Share Posted January 30, 2012 Güzel anlatım. Tebrikler. Link to comment Share on other sites More sharing options...
safa Posted February 17, 2012 Author Share Posted February 17, 2012 konu açalı bir yılı geçti aradan geçen süre zarfında prestahop gelişti tabi bizde geliştik. işlerden bir boş vakit ayarlasam modul yazmanın videolu anlatımlarını hazırlıyacağım Link to comment Share on other sites More sharing options...
snlbyr Posted March 24, 2012 Share Posted March 24, 2012 bide privateshop modulu yapsanız harika olacak uye olmadan siteye girilmemesi için... Link to comment Share on other sites More sharing options...
safa Posted May 30, 2012 Author Share Posted May 30, 2012 bide privateshop modulu yapsanız harika olacak uye olmadan siteye girilmemesi için... modul anlatımı yaparsam genel bir tne basit modul anlatımı yaparım böyle özel istekleri yapamam herkesin farklı bir ihtiyarcı oluyor Link to comment Share on other sites More sharing options...
Recommended Posts