Toto Prayogo

Toto Prayogo

Update Batch Cart

Pada Codeigniter 3.2.0 mendatang akan dihapus Cart Library dan Smiley Helper terkait kabar sedih yang dirilis pada Forum Resmi Codeigniter. Sedangkan saya sendiri sedang gemar menggunakan salah satunya, yakni Cart Library utnuk membangun web Toko Online atau sering disebut web e-commerce. Tapi untung saja kita masih dapat emnggunakannya. dan pihak BCIT sebagai pengembang Codeigniter menyajikannya dalam repositorynya utnuk dikembangkan secara independen.

Untuk Smiley Helper dapat difork disini. Sedangkan Cart Librarynya disini

Oops, cukup sekian intermezonya, berikut adalah cara untuk update cart secara masal. Contoh ini diambil dari dokumentasi Codeigniter yang pernah ada.

View

Sebagai asumsi nya, untuk view cart menampilkan daftar keranjang seperti kode berikut :

<?php echo form_open('cart/update'); ?>
<table cellpadding="6" cellspacing="1" style="width:100%" border="0">
 <tr>
        <th>QTY</th>
        <th>Item Description</th>
        <th style="text-align:right">Item Price</th>
        <th style="text-align:right">Sub-Total</th>
 </tr>

 <?php foreach ($this->cart->contents() as $items): ?>
        <?php echo form_hidden('rowid[]', $items['rowid']); ?>
        <tr>
         <td><?php echo form_input(array('name' => 'qty[]', 'value' => $items['qty'], 'maxlength' => '3', 'size' => '5')); ?></td>
         <td>
          <?php echo $items['name']; ?>
          <?php if ($this->cart->has_options($items['rowid']) == TRUE): ?>
           <p>
            <?php foreach ($this->cart->product_options($items['rowid']) as $option_name => $option_value): ?>
             <strong><?php echo $option_name; ?>:</strong> <?php echo $option_value; ?><br />
            <?php endforeach; ?>
           </p>
          <?php endif; ?>
         </td>
         <td style="text-align:right"><?php echo $this->cart->format_number($items['price']); ?></td>
         <td style="text-align:right">$<?php echo $this->cart->format_number($items['subtotal']); ?></td>
        </tr>

    <?php endforeach; ?>

    <tr>
     <td colspan="2"> </td>
     <td class="right"><strong>Total</strong></td>
     <td class="right">$<?php echo $this->cart->format_number($this->cart->total()); ?></td>
    </tr>

</table>

<p><?php echo form_submit('', 'Update your Cart'); ?></p>

Controller

Untuk asumsi file pada controller dengan nama Cart.php dan function update

public function update() {

 $rowid = $this->input->post('rowid[]');
 $qty = $this->input->post('qty[]');

 $data = array();
 for ($i = 0; $i < count($rowid); $i++) { 

  $data[] = array(
   'rowid' => $rowid[$i],
   'qty'   => $qty[$i]
  );
 }

 $this->cart->update($data);

 redirect('cart');
}

Dynamic Form #1

Sedang melakukan maintenance untuk aplikasi pencatatan data penjualan menggunakan PHP dengan kombinasi jQuery dan plugin lainnya. Dynamic Field Form ini sangat dibutuhkan untuk pencatatan apabila data barang lebih dari satu pada setiap transaksi. Berikut kode sederhana dan ulasannya.

Code Sample

Setelah membuat yang namanya elemen utama atau elemen baku, selanjutnya kita bangun sebuah elemen pembantu yang siap diduplikasi. Sebagai contoh, elemen baku seperti berikut (ingat, kode sample ini menggunakan Bootstrap, jadi jangan lupa custom ke elemen mu sendiri ya):

 <div id="form">
  <div class="row">
   <div class="col-sm-3">
    <input type="text" class="form-control" name="nameText[]" />
   </div>
   <div class="col-sm-3">
    <button type="button" class="btn btn-primary addBtn">Add</button>
   </div> 
  </div>
  <div class="row" id="submit">
   <div class="col-xs-2">
    <button type="button" class="btn btn-primary">Sumbit</button>
   </div>
  </div>
 </div>


Sedangkan untuk elemen pembantu yang siap dicopy (duplikat) sebagai berikut:

 
 <div class="row hide clone" id="duplikat">
  <div class="col-sm-3">
   <input type="text" class="form-control" name="nameText[]" />
  </div>
  <div class="col-sm-3">
   <button type="button" class="btn btn-primary delBtn">Del</button>
  </div> 
 </div>

Bila semua sudah, kita hanya perlu mengatur menggunakan jQuery agar dynamic form ini dapat berjalan sebagaimana mestinya. Untuk kode pada part kali ini menggunakan kode sebagai berikut:

 <script>
  $(document).ready(function() {
   var dataIndex = 0;
   $('#form').on('click', '.addBtn', function() {
    dataIndex++;
    var $template = $('#duplikat'),
     $clone    = $template
      .clone()
      .removeClass('hide')
      .removeAttr('id')
      .attr('data-index', dataIndex)
      .insertBefore($('#submit'));
    // jika ada custom bisa disini
    $clone.end();

   });

   $('#form').on('click', '.delBtn', function() {
    var $row  = $(this).parents('.clone');

    $row.remove();
   });
  });
 </script>

Demo











Yup, segitu dulu ya, besok masih ada cara kedua nya dan mungkin lebih. Terimakasih dan semoga sukses.

Fungsi regex (pattern) yang sering ku gunakan

Berikut adalah pattern (regular expression) yang sering ku gunakan dalam aplikasi yang sedang dikerjakan atau maintenance:


No Handphone

Dikarenakan masih banyak project yang menggunakan nomer hape (hp), maka regex ini sangat membantu untuk proses validasi inputnya, ^(0)[0-9]{9,11}$ dengan fungsi tersebut maka akan memvalidasi hanya yang berawalan angka 0 (nol) hingga 10 atau 12 digit, selain itu maka dianggap salah. Untuk penggunaan pada PHP seperti berikut:

$re = '/^(0)[0-9]{9,11}$/';
$str = '081234567890';

preg_match_all($re, $str, $matches);

// Print the entire match result
print_r($matches);
Sedangkan untuk javascript:
const regex = /^(0)[0-9]{9,11}$/g;
const str = `081234567890`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

Digit Angka Uang

Meski Rupiah sedang berganti wajah dengan rupa yang penuh kontroversi karena mirip dengan Mata Uang negara lain, namun regex nya untuk validasi masih tetap sama yakni ^(?:[1-9]\d*|0)$. Function ini akan mengijinkan hanya 0 (nol) atau angka berapapun tanpa diawali 0 dan tanpa tanda baca seperti titik (.) maupun koma (,).
Untuk penggunaan pada PHP seperti berikut :

$re = '/^(?:[1-9]\d*|0)$/';
$str = '20000';

preg_match_all($re, $str, $matches);

// Print the entire match result
print_r($matches);
Sedangkan untuk javascript sebagai berikut:
const regex = /^(?:[1-9]\d*|0)$/g;
const str = `20000`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

Mungkin itu saja, selebihnya jika ada perubahan atau update akan disampaikan melalui post ini.

Web Jacket Blazer

Web baru dengan title Jacket BLazer ini adalah web terbaru. Web e-commerce ini menggunakan blogspot sebagai publishing toolnya dan masih tetap menggunakan Bootstrap dalam pembangunan layoutnya. Pada web ini sebenarnya sudah dilengkapi fungsi keranjang belanja namun belum dimaksimalkan. Ada tambahan fitur dari sekian banyak web shop menggunakan bloger yang telah ku buat, yakni Quick View. Fungsinya melihat detail produk pada halaman utama maupun halaman archive maupun kategori tanpa harus mengunjungi link produk tersebut.
Dan beberapa elemen masih belum selesai digarap, namun sudah pantas dipublikasikan dan diakses khalayak umum.

Untuk melihat secara live, silakan akses ke halaman http://jacketblazer.com.

Terimakasih telah berkunjung, jangan lupa berkunjung kembali di http://totoprayogo.com