Magento Create, Read dan Delete Session

Berikut adalaha cara bagaimana untuk create/set, read dan delete/remove/hapus session pada website Magento.
Kode berikut bisa diaplikasikan pada controller ataupun file .phtml pada Magento.

Create/Set Session

$string = 'Hello World'
$awbaliSession = Mage::getSingleton('core/session');
$awbaliSession->setTestSession($string);

Pada kode diatas, kita akan menset sebuah session bernama TestSession dengan value ‘Hello World‘. Gunakanlah set dan diikuti nama session untuk menset session pada magento website.

Read Session

$awbaliSession = Mage::getSingleton('core/session');
$awbaliSession->getTestSession();
//untuk menampilkan
echo $awbaliSession->getTestSession(); 

Untuk membaca sebuah session pada magento gunakanlah get kemudian diikuti nama session yang sudah kita set sebelumnya.

Delete/Remove/Unset/Hapus Session

$awbaliSession = Mage::getSingleton('core/session');
$awbaliSession->unsTestSession();

Untuk Delete/Remove/Unset/Hapus Session gunakanlah uns kemudia diikuti nama session.

Semoga bermanfaat 😀

Konfirmasi Pembayaran Magento Module

AW Bali Konfirmasi Pembayaran Magento Module

AW Bali Konfirmasi Pembayaran Magento Module

Di kebanyakan Toko Online yang ada di Indonesia masih menggunakan pembayaran secara manual, seperti Setor Tunai, Internet Banking, SMS Banking dll pada saat pelanggan melakukan transaksi. Lalu, bagaimana cara agar pemilik Toko Online tahu bahwa pelanggan sudah melakukan pembayaran terhadap barang atau jasa yang dibeli? Tentunya dibutuhkan sebuah konfirmasi oleh pembeli yang sudah melakukan pembayaran. Bisa menghubungi pemilik Toko Online lewat SMS, email atau pemilik Toko Online menyediakan sebuah form yang dapat diakses oleh pembeli untuk melakukan konfirmasi terhadap pembayaran yang sudah dilakukan.

Disini saya membuat sebuah Modul Konfirmasi Pembayaran / Payment Confirmation yang dapat digunakan pada Toko Online yang menggunakan Magento sebagai engine nya. Di dalam Module Konfirmasi Pembayaran/ Payment Confirmation ini, pembeli yang sudah melakukan pembayaran dapat mengisikan form-form yang berisi data-data transfer yang sudah dilakukan. Kemudian, data-data tersebut akan tersimpan di Backend Magento. Dan, sebagai notifikasi akan terkirim sebuah email kepada pemilik Toko Online / Store Owner.

Untuk Demo Magento Module Konfirmasi Pembayaran Backend dan Frontend, silakan Klik link dibawah :

Magento Backend Username dan password :
Username : demo
Password : admin1234

Magento Module Frontend

Pada halaman frontend, terdapat form yang berisi inputan dan wajib diisi oleh pembeli yang sudah melakukan pembayaran. Halaman ini terdapat di app\design\frontend\base\default\template\konfirmasipembayaran\index.phtml. Anda bisa mengedit halaman ini untuk menambahkan kalimat penjelasan sesuai keperluan. Setelah data di submit, makaann akan muncul halaman sukses. Halaman ini ada di app\design\frontend\base\default\template\konfirmasipembayaran\sukses.phtml

Magento Module Backend

Pada demo backend, login telebih dahulu menggunakan username dan password diatas. Data-data yang diinput di frontend akan tampil di halaman backend ini. Notifikasi email diterima oleh store owner. Jika ingin mengganti masuk ke magento backend-> System->Configuration->Store Email Address. Email notofikasi akan diterima oleh General Contact. Sedangkan email yang tertera pada halaman sukses adalah support email (Customer Support).

Module ini dapat anda download melalui link dibawah. Semoga membantu teman-teman pemilik Toko Online magento agar bisnis nya lebih berrkembang. 😀
Jika memiliki kesulitan dalam menginstall module silakan masukkan komentar di bawah atau email saya melalui info@adisthana.com

Autocomplete Search Magento Customer by API Call

Hi, today i’m gonna show you how to add ‘Autocomplete Search for Magento Customer by API Call‘. I assume you already read my first post about calling Magento API ‘Play with Magento API SOAP V1‘. This method using jQuery Autocomplete, here is the link.

As i mention in ‘Play with Magento API SOAP V1‘, first of all you gonna need is to make connection between our application and Magento API. Since post before use indonesian language i’ll repeat again here to make sure you follow correct instruction.

Connection

Setting SOAP Account

We need SOAP account to integrate with system and getting the roles we want.

  1. Login to backend magento
  2. System -> Web Services -> SOAP/XML-RPC – Roles
  3. Add New Role
  4. Resource Access -> All -> Save Role
  5. System -> Web Services -> SOAP/XML-RPC – Users
  6. Add New User
  7. On ‘User Role’ Tab, choose role we’ve made before
  8. Save User

Login with SOAP Account

In your host, create php file (ex. magehost.php) and put script below to login using SOAP account you’ve created.

$config=array();
$config["hostname"] = "namahost.com"; //ini adalah host magento anda
$config["login"] = "apiuser"; //ini adalah user API anda
$config["password"] = "apipassword"; //ini adalah password magento anda

$proxy = new SoapClient('http://'.$config["hostname"].'/index.php/api/soap/?wsdl', array('trace'=>1));
$sessionId = $proxy->login($config["login"], $config["password"]);

Hold it here, then we’re gonna make one file to handle autocomplete processing.

jQuery Autocomplete and API Call

jQuery Autocomplete

After we’ve done download jQuery UI, we need to include it on file processing. On this article, i’ll use “Default Functionality” method to request customer name and ID via API SOAP. You can see the full source example method here.
Remember to put jQuery file before jQuery and add css file.

API Call

To call customer data on magento we use ‘customer.list‘. This will allow you to retrieve all customer list on Magento.

Let’s create one file on host (ex. autocomplete.php) and put the code below.

<?php
	require_once('magehost.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Autocomplete Customer Magento Call by API</title>
<link href="your_style.css" rel="stylesheet" type="text/css">
<link href="jquery-ui-1.10.4.custom.min.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="jquery-1.10.2.js"></script>
<script type="text/javascript" src="jquery-ui-1.10.4.custom.min.js"></script>
</head>

<body>
	<input type="text" class="input-text" id="fName" name="customerName" />
    <script type="text/javascript">
		$(document).ready(function() {
			var customerName = [
				<?php
					try { 
						$action = "customer.list"; // action for calling customer data
						$customers = $proxy->call($sessionId, $action);
						foreach($customers as $customer) {
							$lastname = str_replace("'", "", $customer['lastname']);
							echo "'".$customer['firstname'].' '.$lastname.' '.$customer['customer_id']."',";
						}
					}
					catch (Exception $e) { //while an error has occured
						echo "==> Error: ".$e->getMessage(); //we print this
						   exit();
					}
				?>
			];
			$( "#fName" ).autocomplete({
				source: customerName
			});
		});
	</script>
</body>
</html>

Explanation

In the code above , at first we will include our host which is magehost.php => require_once(‘magehost.php’).
Then we make textbox with id fName, the ID will use as identifier for jQuery Autocomplete. And we retrieve all customer list using customer.list and make loop for data. Please remember, the acceptable array format for ‘default fuctionality’ autocomplete is like this [“ActionScript”, “AppleScript”, “Asp”]. Other than that your script will show error. Use console log to debug the script. And to handled error from API call we use Exception something like $e->getMessage(). And if you succes all Magento Customer will retrieve on textbox as autocomplete.

Magento Customer Autocomplete

Magento Customer Autocomplete

Noted : This will make your website slower if you have thousands customer list. Use filter to manipulated it. For example you can use :

$filters = array( array('firstname' => array('like'=>'your_input_text%')));
$customers = $proxy->call($sessionId, $action, $filters);

Hope this help 😀

Play with Magento API SOAP V1

Sesuai judul, kali ini saya akan mencoba untuk berbagi tips dan trik bagaimana membuat Aplikasi di luar Magento tapi dengan mengandalkan API dari magento itu sendiri. Banyak sekali hal yang dapat kita lakukan pada penggunaan Magento API ini, seperti dijelaskan disini “The Magento SOAP v1 API provides you with the ability to manage your eCommerce stores by providing calls for working with resources such as customers, categories, products, and sales orders. It also allows you to manage shopping carts and inventory.” Kita juga bisa mengembangkan aplikasi iOS dan Android dengan menggunakan API SOAP method ini.

Koneksi

Setting SOAP account
Hal pertama yang harus dilakukan adalah membuat koneksi antara aplikasi yang kita buat dengan API dari magento. Untuk itu kita membutuhkan SOAP account yang terintegrasi dan mendapatkan role-role seperti yang kita inginkan. Caranya :

  1. Login ke backend magento
  2. System -> Web Services -> SOAP/XML-RPC – Roles
  3. Add New Role
  4. Resource Access -> All -> Save Role
  5. System -> Web Services -> SOAP/XML-RPC – Users
  6. Add New User
  7. Pada Tab ‘User Role’ pilih role yang kita buat tadi
  8. Save User

Sekarang kita sudah mempunyai username dan password yang akan kita gunakan untuk login nanti.

Login dengan SOAP account
Masuk ke server/hosting aplikasi anda, dan buat sebuah file baru dengan nama magehost.php. Kita akan membuat simple script untuk login dengan SOAP account.

$config=array();
$config["hostname"] = "namahost.com"; //ini adalah host magento anda
$config["login"] = "apiuser"; //ini adalah user API anda
$config["password"] = "apipassword"; //ini adalah password magento anda

$proxy = new SoapClient('http://'.$config["hostname"].'/index.php/api/soap/?wsdl', array('trace'=>1));
$sessionId = $proxy->login($config["login"], $config["password"]);

Tahan sampai disini, kemudian kita akan membuat sebuah file lagi untuk testing koneksi dan script kita apakah sukses atau gagal.

Get Customer via API SOAP
Untuk testing, kita akan mencoba memanggil data customer dengan sudah mengetahui ID dari customer tersebut. Buat file dengan nama getcustomer.php, dan isikan script di bawah :

require_once('magehost.php');
$customerId = '2';
$result = $proxy->call($sessionId, 'customer.info', $customerId);
var_dump($result);

Buka browser, masukkan url : namahost.com/getcustomer.php . Jika sukses data-data customer akan tampil pada browser anda dan jika gagal akan tampil juga pesan gagal. Pesan gagal bisa dilihat disini

Diatas adalah contoh yang sangat sederhana sekali pada penggunaan Magento API SOAP. Pada tulisan berikutnya kita akan mencoba hal yang lebih menantang yaitu memangil list customer dan memanfaatkan jQuery Autocomplete.

Semoga membantu 😀

Magento Send Email dengan Custom Email Template

Setelah membaca judul artikel pastilah muncul pertanyaan, kenapa mengirim email dengan custom email template? Saya mempunyai 2 alasan. Yang pertama adalah email yang kita kirimkan akan memiliki desain yg lebih cantik daripada hanya sekedar email text saja. Tentu akan menarik lebih banyak pengunjung ke website kita (untuk SEO). Yang kedua adalah kita dapat mengontrol variabel yang kita kirimikan kepada klien.

Jika anda seorang web developer pastilah anda pernah sesekali menemukan kebutuhan pengiriman email menggunakan custom template, baik itu equest dari klien ataupun untuk kerperluan sendiri.

Disini saya mendesain email menggunakan Transactional Email pada magento tepatnya di System -> Transactional Emails
Buatlah email baru dengan Add New Template. Disini saya menggunakan template yang sudah ada. Misalkan kita pilih template ‘New Invoice’. Kemudian Load Template.
Template Name dan Template Subject kita isi dengan ‘Test Custom Email’.

Dengan isinya :

Nama1(email1) mendapat undangan dari Nama2(email2) untuk datang pada tanggal : (tanggal) menghadiri acara pertemuan Magento Indonesia di Bali

Dengan Variable =>

{{htmlescape var=$nama1.nama1}}({{htmlescape var=$email1.email1}}) mendapat undangan dari {{htmlescape var=$nama2.nama2}}({{htmlescape var=$email2.email2}}) untuk datang pada tanggal : {{htmlescape var=$tanggal.tanggal}} menghadiri acara pertemuan Magento Indonesia di Bali

Edit Template content sesuai keinginan anda. Save template.

Kemudian buatlah sebuah file .phtml untuk tampilan frontend dan tampilkan melalui CMS.
Misalkan form dan proses pengirimannya sebagai berikut.

if(!empty($_GET['name1']) && !empty($_GET['name2']) && !empty($_GET['email1']) && !empty($_GET['email2'])){
	
	$mailTemplate = Mage::getModel('core/email_template');
	/* @var $mailTemplate Mage_Core_Model_Email_Template */

	$translate  = Mage::getSingleton('core/translate');
	 
	$templateId = 56; //id transactional email template yang anda buat tadi
	$template_collection =  $mailTemplate->load($templateId);                               
	$template_data = $template_collection->getData();
	if(!empty($template_data))
	{
		$templateId = $template_data['template_id'];
		$mailSubject = $template_data['template_subject'];                         
		 
		//Mengambil data pengirim dari Backend > System > Configuration > Store Email Addresses > General Contact
		$from_email = Mage::getStoreConfig('trans_email/ident_general/email'); //email pengirim
		$from_name = Mage::getStoreConfig('trans_email/ident_general/name'); //nama pengirim
 
		$sender = array('name'  => $from_name,
						'email' => $from_email);                                
		 
		$vars = array('name1'=>$_GET['name1'],
						'name2'=>$_GET['name2'],
						'email1'=>$_GET['email1'],
						'email2'=>$_GET['email2'],
						'tanggal'=>$_GET['tanggal']);                   
		
		$storeId = Mage::app()->getStore()->getId();
		$model = $mailTemplate->setReplyTo($sender['email'])->setTemplateSubject($mailSubject);
		
		$email = $_GET['email1'];
		$name = $_GET['name1'];                                           
		$model->sendTransactional($templateId, $sender, $email, $name, $vars, $storeId);                    
		if (!$mailTemplate->getSentSuccess()) {
				throw new Exception();
		}
		$translate->setTranslateInline(true);

	} 
}

<h1>Undang Teman Untuk Bergabung pada Workshop Magento di Bali 15-10-2013 dan dapatkan diskon 10%</h1>
<form method="GET" action="url-action" name="form_name" id="form_id">
	<input type="text" name="name1" />
	<input type="text" name="name2" />
	<input type="text" name="email1" />
	<input type="text" name="email2" />
	<input type="text" name="tanggal" value="15-10-2013" readonly="readonly" />
	<input type="submit" value="Kirim" />
</form>

Penjelasan : Pada email yg dikirimkan (email1) sebagai email pengirim adalah email website pada magento anda ($from_email) dan Nama Pengirim adalah nama website Magento anda ($from_name).

Violaaa , anda sudah bisa mengirim email dengan custom template pada Magento.

Selamat mencoba dan semoga artikel saya membantu 😀

Magento Maintenance Mode

Magento Maintenance Mode

Magento 1.4 + mempunyai fitur bagus yang memungkinkan kita untuk mengubah website ke “maintenance mode/ modus pemeliharaan” saat melakukan perubahan. Fiturnya nya sangat bagus, sehingga semua orang tidak dapat membuka link-link pada situs kita. Tapi, kita juga tidak dapat melakukan perubahan apapun. Nah berikut caranya agar orang lain melihat situs kita dalam ‘maintenance mode’ sedangkan kita dapat melakukan perubahan dalam web.

Yang harus kita lakukan adalah dengan mengedit 3 baris di index.php

Buka file index.php di folder root dan di atas line 57 tambahkan :

$ip = $_SERVER['REMOTE_ADDR'];
$allowed = array('4.2.0.0','1.8.2.2'); // ini adalah IP yang dibolehkan untuk melihat site tanpa maintenance mode

dan ganti code:

if (file_exists($maintenanceFile)) {

menjadi :

if (file_exists($maintenanceFile) && !in_array($ip, $allowed)) {

Buat file kosong dengan nama maintenance.flag dan upload pada root folder.
Gampang kan? Sekarang anda dapat mengakses web anda sementara orang lain melihatnya dalam maintenance mode.
Jika ingin mengganti designnya masuk ke :
errors -> local.xml -> pada default ganti dengan nama_skin_baru
Buat folder nama_skin_baru di errors. Ubah 503.phtml dan masukkan css dan file-file yang diperlukan.

Semoga membantu 🙂