Archive

Archive for the ‘Zend framework’ Category

zend db update theo 2 điều kiện

Khi sử dụng zend_db có đôi khi gặp các bài toàn về update CSDL theo 2 điều kiện, một phát biểu mysql thông


UPDATE products SET product_name='ten san pham' WHERE id=1 AND category_id = 2

Nhưng khi sử dụng lớp zend db chúng ta đưa điều kiện sau WHERE như thế nào để zend_db hiểu


$data = array('product_name'=>'ten san pham');
$where[] = "id = '1'";
$where[] = "category_id = '1'";
$this->_db->update('products', $data, $where);
// Các bạn lưu ý từng dấu ' & " cho đúng

Chúc thành công

nhantam
PHP Developer
Web design & development in Ho Chi Minh (Saigon), Vietnam

Zend commit -transaction db

nhantam giới thiệu với các bạn một cách commit với zend db hay còn gọi là zend transaction

Các bạn tham khảo thêm thư  viện zend db tại link: http://framework.zend.com/manual/1.9/en/zend.db.html

 

Cây thư mục trang web panpic.vn của nhantam

my_web/modules/admin/  //phần quản lý nội dung administrator, hay còn gọi là back-end
my_web/modules/front/  //phần giao diện người dùng hay còn gọi là front-end

my_web /configs/panpic.ini
my_web/modules/front/Boostrap.php
my_web/modules/admin/models/Admin_Model_News.php
my_web/modules/admin/controller/Admin_NewsController.php

0. tạo table table_news()
Engine: InnoDB
Primary Key: kiểu dữ liệu là int, AUTO_INCREMENT

Hình ảnh
zend table

 

1.  khai báo file panpi.ini


[database]
db.adapter = PDO_MYSQL
db.params.host = "localhost"
db.params.username = "root"
db.params.password = "1234567"
db.params.dbname = "db_panpic"
db.params.charset = "utf8"
db.params.prifex = "pp_"

Hình
zend config ini

 

2. Khai báo Boostrap.php


class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{


/**
* connect to database
* @return bridge connection
*/
protected function _initDb() {

// đọc giá chuỗi trong file panpic.ini từ đoạn [database]
$config = new Zend_Config_Ini(APPLICATION_PATH.'/configs/panpic.ini', 'database');
$config = $config->toArray(); // Chuyển thành mảng array
$params = $config['db']['params'];
$params['options'] = array(Zend_Db::ALLOW_SERIALIZATION => false);

$db = Zend_Db::factory($config['db']['adapter'], $params); // connection database
Zend_Db_Table::setDefaultAdapter($db);
Zend_Registry::set('db', $db); // khai báo biến db (connection)
$db->closeConnection(); // đóng kết nối
}
}

Hình ảnh

zend bootstrap

3. Khai báo Admin_Model_News.php


function init(){
$this->_db = Zend_Registry::get('db'); //connection
}
/**
* Insert News
*
* @param array $data
* @return bool
*/
function insertCommit($data){

$this->_db->beginTransaction();

try {
$this->_db->insert('table_news', $data);
$this->_db->commit();
$news_id = $this->_db->lastInsertId('table_news');
return $news_id;
} catch (Exception $e){
$this->_db->rollBack();
return false;
}
}


/**
* Update News
*
* @param array $data
* @param int $news_id
* @return bool
*/
function updateCommit($data, $news_id){

$this->_db->beginTransaction();

try {
$this->_db->update('table_news', $data, "news_id =$news_id");
$this->_db->commit();
return true;
} catch (Exception $e){
$this->_db->rollBack();
return false;
}
}

 

Hình ảnh

zend model

4. Khai báo Admin News Controller


<?php
/**
* Controller News
* Last update Jul 10 2014
*
* @package admin/controller
* @copyright Panpic.vn
* @author thandongdv2004@yahoo.com
* @author pos PHP Developer
* @since Feb 15 2011
*/

class Admin_NewsController extends Zend_Controller_Action {


private $_model;


function init(){
//.....
$this->_model = Admin_Model_Weblink::getInstance(); // instance model news
}
/**
* Add News
*/
function addAction() {

$title = $this->_getParam('title');
$content= $this->_getParam('content');

$data = array(
'title' => $title,
'content' => $content
);

$update = $this->_model->insertCommit($data);
}
}

//END class

 

Chúc các bạn thành công

 

nhantam
PHP Developer
thiết kế web

Cấu hình file index với zend framework (phần I)

Bài viết chỉ đúng khi bạn sử dụng thư viện Zend 1.

Khi cấu hình file index.php dùng zend framework 1, chúng ta hay sử dụng Zend Autoloader:
config zend index performance

 


require_once('Zend/Loader/Autoloader.php');
$autoloader = Zend_Loader_Autoloader::getInstance();

 

Ưu điểm:

Điều này sẽ giúp chúng ta dễ dàng gọi bất cứ  class library nào của trong my_libray/Zend/ khi đang đứng ở bất cứ đâu trong file php coding

Nhước điểm:

Zend Autoloader sẽ gọi toàn bộ thư viên zend mỗi khi có request. Zend library là một thư viện không lồ, đôi khi có  những class library của zend chúng ta thực sự không dùng tới với các dự án web vừa và nhỏ. Và sẽ làm chậm tốc độ load web (rất chậm).

 

Vậy làm thế nào để cải thiện tốc độ load web mà vẫn đảm bảo gọi các thư viện cần dùng của Zend

Chúng ta thay đoạn code trên như  sau:


require_once('Zend/Loader.php');
require_once 'Zend/Application.php';
require_once 'Zend/Registry.php';

file index.php đã chỉnh sửa & có tốc độ load web tốt hơn (higher performance)

config zend higher performance

 

Các bạn tham khảo thêm Performance applications 

 

Chúc các bạn thành công

 

nhantam
PHP Developer
Panpic Technology

 

Cach sử dụng zend session (v1)

Cách sử dụng zend session trong zend framework  version < 2

Có rất nhiều cách khác nhau, ở đây nhantam đề cập tới sử dụng Zend_Session_Namespace

Cách dùng:

Ví dụ tạo một giỏ hàng đơn giản

Tại controller các bạn khai báo

Zend_Session::start();

$sessionNamespace = new Zend_Session_Namespace(‘giohang’);

if ($sessionNamespace->isLocked()) {
$sessionNamespace->unLock();
}

$product_id = 123
$qty = 1
$sessionNamespace->array[$product_id] = $qty;

 

Cách Gọi
$sessionNamespace = new Zend_Session_Namespace(‘giohang’);
$array = $sessionNamespace->array

echo ‘<pre>’
print_r($array)
echo ‘<pre>’

 

PHP Developer
nhantam
thiết kế web

 

 

 

 

zend framewok query insert update longtext

Zend Framework v1.5 + PHP + MySQL

Trong một vài trường hợp, trang web có dữ liệu lớn, trường dữ liệu lưu trữ dạng text lớn hiện tại của MySQL có kiểu dữ liệu là longtext.

Nếu bạn nào sử dụng zend framework version 1 & dung getAdapter insert hoặc update dữ liệu, thường các bạn phát biểu câu truy vấn dạng:


$sql = "INSERT INTO products(id, content) VALUES(1, '.....')" or $sql = "UPDATE FROM product SET ..."
$this->getAdapter()->query($sql);

Câu phát biểu trên sẽ không thể cập nhật được nếu dữ liệu trường content là quá lớn (trường hợp chạy trên linux).

Để có thể update hoặc insert các bạn thay bằng câu phát biểu sau:


$this->getAdapter()->getConnection()->query($sql);

Chúc các bạn thành công

PHP Developer
nhantam

zend framework convert Việt nam đồng

zend framework version < 2 hiển thị giá sản phẩm theo Việt nam đồng , USD

Tao viết thành hàm như sau:


function product_price($type, $value){

	if(strtoupper($type) == "VND"){

		$price = $value+0;
		$currency = new Zend_Currency(
				array(
				   "value"			=>$price,                           
				   "currency"		=>"VND",
				   "symbol"			=>"đ",
				   "display"		=>2,
				   "precision"		=>0,
				   "number_format" 	=>"#.##0.00",
				   "locale"			=>"vi_VN",
				   "position"		=>Zend_Currency::RIGHT)
				);
		return $currency->toCurrency();

	}elseif(strtoupper($type) == 'USD'){
		$currency = new Zend_Currency('en_US');
		$helper = new Zend_View_Helper_Currency($currency);			
		return $helper->currency($value);
	}		

}

ví dụ:

product_price('VND', 250000) //output 250.000 đ 

Chúc các bạn thành công

PHP Developer
nhantam

Cách dùng ajax post dữ liệu từ bên ngoài trang web

Có lẽ tôi nên đề tiêu đề cách gọi tiếng Anh cho dễ hiểu: “allow cross domain by AJAX”

 

Ví dụ:

1. Tôi có trang web thứ nhất là http://www.panpic.vn/test/

../test/ ở đây là file php hoặc hàm,..vv

2. Trang web thứ 2 là http://nhantam.com/ajax

 

Từ trang thứ 2 tôi muốn post dữ liệu tới trang thứ nhất bằng ajax…


$.ajax({ type: "GET",
url: 'http://www.panpic.vn/test/',
async: false,
data: param,
success: function(text){
if(text == -1) alert("Fail")
else alert(text);
}
});

 

Ở hầu hết các host: đều hiện thông báo lỗi: “Origin ‘url’ is not allowed by Access-Control-Allow-Origin …” nghĩa là nó không cho phép “allow cross domain”.

Có rất nhiều cách để khắc phục cũng như truyền dữ liệu cross domain, ở đây tôi giới thiệu cách đơn giản như sau:


<?php header('Access-Control-Allow-Origin: *'); ?>

Hãy dán dòng code trên vào file php test hoặc hàm test của trang http://www.panpic.vn/test/

 

PHP Developer
nhantam