1. Trang chủ
  2. » Công Nghệ Thông Tin

PHP 5 e-commerce Development- P55 pdf

5 204 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Cấu trúc

  • Preface

  • PHP e-commerce

    • e-commerce: who, what, where, why?

      • An overview of e-commerce

        • eBay

        • Amazon

        • Brick 'N Mortar stores

        • Service-based companies

      • Why use e-commerce?

    • Rolling out your own framework

      • Why PHP?

      • Why a framework?

      • When to use an existing package?

        • Existing products

      • A look at e-commerce sites

        • iStockphoto

        • WooThemes

        • eBay

        • Amazon

        • Play.com

    • e-commerce: what does it need to do/have?

      • Products

      • Checkout process

      • General

    • Our framework: what is it going to do?

    • Our framework: why is it going to do it?

      • Juniper Theatricals

    • Summary

  • Planning our Framework

    • Designing a killer framework

      • Patterns

        • Model-View-Controller (MVC)

        • Registry

        • Singleton

      • Structure

    • Building a killer framework

      • Pattern implementation

        • MVC

        • Registry

        • Singleton

        • Registry objects

      • Routing requests

        • An alternative: with a router

        • Processing the incoming URL within our registry object

        • index.php

        • .htaccess file

        • Configuration file

    • What about e-commerce?

      • An e-commerce registry?

    • Summary

  • Products and Categories

    • What we need

      • Product information

      • Category information

      • Structuring content within our framework

        • Pages

        • Content

        • Versioning

    • Building products, categories, and content functionality into our framework

      • Database

        • Content

        • Content types

        • Content versions

        • Products

        • Categories

      • Pages within our framework

        • Model

        • View

        • Controller

      • Products

        • Model

        • View

        • Controller

      • Categories

        • Model

        • View

        • Controller

      • Some thoughts

      • Product and category images

    • Routing products and categories

      • Featured products

    • Embedding products

    • Summary

  • Product Variations and User Uploads

    • Giving users choice

      • Simple variants

        • How could this work?

      • Combinations of variants

        • How will this work?

        • High-level overview

        • Database structure

        • Template switching

        • Templates

        • A look back at simple variants

    • Giving users control

      • How to customize a product?

        • Uploads

        • Custom text

      • Maintaining uploads

        • Security considerations

      • Database changes

        • Extending our products table

      • Template switching

    • Shopping basket preparation

      • Stock control

      • Product variations

      • Product customizations

      • Basket templates

      • Product subtotals

    • Summary

  • Enhancing the User Experience

    • Juniper Theatricals

    • The importance of user experience

    • Search

      • Finding products

        • Search box

        • Controlling searches with the products controller

        • Search results

        • Improving searches

      • Filtering products

        • Product attributes

        • Filter options

        • Processing filter requests

        • Displaying filtered products

        • Improving product filtering

    • Providing wish lists

      • Creating the structure

      • Saving wishes

        • Wish-list controller

        • Add to wish list

      • Viewing a wish list

        • Controller changes

        • Wish-list view

      • Purchases

        • Gift purchases

        • Self purchases

      • Improving the wish list

    • Recommendations

      • Related products

        • Controlling the related products

        • Viewing the related products

      • E-mail recommendations

    • Help! It's out of stock!

      • Detecting stock levels

        • Changing our controller

      • Out of stock: a new template bit

      • Tell me when it is back in stock please!

        • Stock alerts database table

        • More controller changes

      • It is back!

    • Giving power to customers

      • Product ratings

        • Saving a rating

        • Viewing ratings

      • Product reviews

        • Processing reviews/comments

        • Displaying reviews/comments

      • Combining the two?

    • Any other experience improvements to consider?

    • Summary

  • The Shopping Basket

    • Shopping baskets

    • Our basket

      • Per-page basket

    • Considerations for our shopping basket

    • Creating a basket

      • When to build a user's basket

      • Basket database

    • Basket contents

      • Viewing the basket

        • checkBasket method

        • The controller

      • Adding products

        • An addProduct method

        • The controller

        • A note on etiquette

      • Adding customizable products

        • Changing our basket database

        • Viewing the basket

        • Changing the model

        • The controller

      • Adding product variants

        • A new database table

        • Model changes

        • The controller

      • Editing quantities

    • From visitor to a user

      • The transferToUser function

      • Performing the transfer

    • Cleaning the basket

      • Expired contents

    • Displaying the basket on every page

      • Functionality

    • Summary

  • The Checkout and Order Process

    • Some examples

      • Amazon

        • Limitations

        • Useful features

      • eBay

        • Interesting points of note

      • Play.com

        • Interesting points of note

    • The process

      • The basket

        • Voucher codes

        • Shipping method

        • An overview

      • Authentication

        • Why should we authenticate the user at this stage?

        • Login

        • Register

        • Do nothing

      • Delivery address

      • Payment method

        • Offline payment method

        • Off-site payment method

        • On-site payment method

      • Confirmation

      • Payment details

      • Payment made

      • Order processed

      • Other points of note

    • Summary

  • Shipping and Tax

    • Shipping

      • Shipping methods

      • Shipping costs

        • Product-based shipping costs

        • Weight-based shipping costs

        • To think about: location-based shipping costs

      • Shipping rules

        • Free shipping

        • Capped shipping

      • Tracking

      • Integrating shipping costs into the basket

        • Shipping methods and a default

        • Calculating shipping costs based on products

        • Calculating shipping costs based on product weights

        • Considering shipping rules, and adjusting prices accordingly

    • Tax

      • Separately calculating tax values

      • To think about: location-based tax costs

    • A look at our basket now

    • Summary

  • Discounts, Vouchers, and Referrals

    • Discount codes

      • Discount codes data

        • Discount codes database

      • Discount codes functionality

        • Reducing the number of codes available

    • Purchasable voucher codes

      • Existing functionality

        • Discount codes

        • Product variations

      • Required additional functionality

    • Referrals

      • Database changes

        • New table: referrers

        • Changes

      • Functionality

        • Checkout process consideration

    • Summary

  • Checkout

    • Order process review

    • Authentication

    • Delivery address

    • Payment method

    • Confirmation

      • Storing orders in the database

        • Orders table

        • Order statuses

        • Order items

        • Order item attributes

        • Payment methods

    • Summary

  • Taking Payment for Orders

    • Taking payment

      • Our payment system

    • Taking payment online

      • PayPal

        • The payment button

        • Processing payment to update the order

      • Direct with a credit/debit card

        • Storing card details

        • Not storing card details

      • Other payment gateways

      • Payment gateway tips

    • Taking payment offline

    • Summary

  • User Account Features

    • User account area

    • Changing details

      • Changing password

      • Changing default delivery address

    • Viewing orders

      • Listing orders

        • Query

      • Viewing an order

        • Order model

      • Cancelling an order

        • Order model additions

        • Controller code

    • Expansion

    • Summary

  • Administration

    • Dashboard

    • Products and categories

      • Products

        • Creating a product

        • Editing a product

      • Categories

        • Creating a category

        • Editing a category

        • Deleting a category

    • Orders and customers

      • Orders

        • Updating an order

        • Dispatch note

        • Refunds

      • Customers area

        • Listing customers

        • A customer's orders

    • Miscellaneous

      • Shipping

        • Creating a shipping method

      • Voucher codes

        • Creating a voucher code

    • Summary

  • Deploying, Security, and Maintenance

    • Deploying

      • Hosting accounts and domain names

        • Hosting providers

        • Domain name registrars

      • Manual deployment

        • Setting up the database

        • Uploading our store

        • Settings

      • Automated deployment

    • Security

      • Server security

        • Software

        • Securing the site with a firewall

      • Passwords

      • SSL/TLS

      • CAPTCHA

    • Maintenance

      • Backing up and restoring

        • Using cPanel

        • Using the command line (SSH)

    • Summary

  • Marketing, SEO, and Customer Retention

    • Marketing sites and stores powered by our framework (and other sites for that matter)

      • Online advertising

        • Buying advertising space

        • Pay-per-click advertisements

        • Advertisement networks provided by search engines

        • Newsletter advertising

        • A word of warning: search engine penalization

      • Newsletters

      • Marketing materials

      • Affiliate marketing

      • Social marketing

        • Viral marketing

        • Twitter

        • RSS with FeedBurner

    • Search engine optimization

      • On-site SEO

        • Headings

        • Links

        • Up-to-date content

        • Meta tags

        • Sitemap and webmaster tools

      • Off-site SEO

    • Customer retention

      • Newsletters

      • Social features

      • Coupons and voucher codes

    • Summary

  • Interacting with Web Services

    • Google products

      • Adding the feed to the Google merchant center

      • Setting an update schedule

      • Creating the feed

        • Product feed controller

        • Other useful link

      • Alternative—Google Base Data API

      • Others

    • Google Analytics

      • Signing up

      • Tracking e-commerce

        • Add transaction

        • Add item

        • Track transaction

      • Further reading

    • Other services

      • Amazon

      • eBay.com

    • More to come

    • Summary

  • Downloadable Products

    • Extending products

    • Extending the payment and administration areas

      • Access database

      • Providing access

      • Rescinding access

    • Centralized download area

    • What else is needed?

    • Summary

  • Cookbook

    • Authentication reminders

      • Help! I forgot my password!

        • Generate the reset key, update the user record, and e-mail the customer

        • Reset the password

      • Help! I forgot my username!

    • E-mailing customers

    • Integrating Campaign Monitor

    • Integrating reCAPTCHA

      • On the registration page

      • When processing the registration

    • Tweeting about happy customers

      • Other uses

    • Summary

  • Index

Nội dung

Chapter 12 [ 253 ] Query for order items The second query for the model is to get the individual items in the order. The following is a basic query which does this, although this does not take into account variants of a product that we may have been purchased: $sql = "SELECT ctp.price, (ctp.price*i.qty) AS cost, i.qty, v.name, i.product_id FROM content_types_products ctp, orders_items i, content c, content_versions v WHERE i.order_id={$this->id} AND c.ID=i.product_id AND v.ID=current_revision AND ctp.content_version=v.ID"; The results of this query should be cached, so that any of our controllers can send the results directly to a view by associating the cache ID with a template variable. Cancelling an order There may of course be times when a customer wishes to cancel an order, for reasons such as maybe we were too slow to dispatch it, perhaps they changed their mind, or perhaps they ordered mistakenly. While allowing a customer to cancel an order will obviously lose us a sale, it keeps our potential customers happy, and should hopefully help our store's reputation. Up until the point where we dispatch an order, it should be very easy for a customer to cancel the order. Of course, we may want to expand this later to handle returns and authorizing returns from customers. For the customer to cancel an order there should be a few simple stages: 1. First they should view the order. 2. Next they should select an option somewhere to cancel the order. 3. They should be able to enter a comment or note about why they are cancelling the order. 4. They should conrm their wish. 5. The order should be cancelled. 6. An e-mail should be sent to them to conrm their order was cancelled (particularly useful if they cancelled it mistakenly). 7. Payment should be refunded (automatically, if the payment method allows it). 8. An e-mail should be sent to the store administrator. This material is copyright and is licensed for the sole use by jackie tracey on 23rd February 2010 953 Quincy Drive, , Brick, , 08724 User Account Features [ 254 ] This requires some functionality in our order model to cancel the order, and also some code for our user area controller. Order model additions There are a few additions required to our order model, so that we can change the functionality of the cancel order method. Depending on whether the administrator or the customer cancels the order, we can use a parameter to indicate who is cancelling the order. public function cancelOrder( $initiatedBy ) { // Only orders that are awaiting payment or awaiting dispatch can // be cancelled, so we must check the status of the order first. // is the order pending payment or dispatch i.e. cancellable? if( $this->status == 1 || $this->status == 2 ) { // We then update the order item in the database to cancelled. $changes = array( 'status' => 4 ); $this->registry->getObject('db')->updateRecords('orders', $changes, 'ID=' . $this->id ); // If the order was cancelled by the customer, we then need to // e-mail the administrator, e-mail confirmation to the customer, // and if we can, refund the payment. if( $initiatedBy == 'user' ) { // e-mail the administrator // e-mail the customer confirmation // refund the payment? } // If the order was refunded by the administrator we e-mail theadministrator we e-mail the we e-mail the // customer to inform then, and if possible, refund the payment. elseif( $initiatedBy == 'admin' ) { // e-mail the customer // refund the payment? } // We return true, so that the relevant controller can display a // message indicating that the order was cancelled. return true; } else { // order isnt cancallable This material is copyright and is licensed for the sole use by jackie tracey on 23rd February 2010 953 Quincy Drive, , Brick, , 08724 Chapter 12 [ 255 ] We return false to indicate that the order was not cancelled, allowing our controllerindicate that the order was not cancelled, allowing our controller that the order was not cancelled, allowing our controller to inform the user of this. return false; } } Controller code To facilitate cancelling the order, we need to have two functions in our controller: one to display a conrmation message and another to actually cancel the order. The following function checks whether the order is valid and belongs to the current user; if it does, it displays a conrmation message: private function confirmCancelOrder( $orderId ) { $this->registry->getObject('template')-> buildFromTemplates('header.tpl.php', 'account/confirm-cancel.tpl.php','footer.tpl.php'); require_once( FRAMEWORK_PATH . 'models/order/model.php'); $this->order = new Order( $this->registry, $orderId ); if( $this->order->isValid() ) { if( $this->order->getUser() == $this->registry-> getObject('authenticate')->getUserID() ) { $this->registry->getObject('db')->getPage()->addTag('orderid', $orderId ); } else { $this->registry->redirectUser( 'useraccount', 'Invalid order', 'The order was not cancelled as it was not tied to your account', $admin = false ); } } else { $this->registry->redirectUser( 'useraccount', 'Invalid order', 'The order was not found', $admin = false ); } } This material is copyright and is licensed for the sole use by jackie tracey on 23rd February 2010 953 Quincy Drive, , Brick, , 08724 User Account Features [ 256 ] When the customer clicks on the conrmation link within the conrmation page, the following function is called; this again validates whether the order belongs to the customer, and then cancels it using the model (which in turn, checks if the order can be cancelled, and sends any relevant e-mail notications): private function cancelOrder( $orderId ) { require_once( FRAMEWORK_PATH . 'models/order/model.php'); $this->order = new Order( $this->registry, $orderId ); if( $this->order->isValid() ) { if( $this->order->getUser() == $this->registry-> getObject('authenticate')->getUserID() ) { $this->order->cancelOrder('user'); $this->registry->redirectUser( 'useraccount', 'Order cancelled', 'The order has been cancelled', $admin = false ); } else { $this->registry->redirectUser( 'useraccount', 'Invalid order', 'The order was not cancelled as it was not tied to your account', $admin = false ); } } else { $this->registry->redirectUser( 'useraccount', 'Invalid order', 'The order was not found', $admin = false ); } } Expansion As our needs for our store grow, we can expand this area of the framework; perhaps we would like it to offer: Returns handling: This will let our customers indicate if they wish to return an item. The store administrator can provide a returns authorization number, and the return can be processed, with the customer being updated. Product recommendations: This will let us display products that are recommended to the customer, based on previous orders. • • This material is copyright and is licensed for the sole use by jackie tracey on 23rd February 2010 953 Quincy Drive, , Brick, , 08724 Chapter 12 [ 257 ] A feedback area: This will let us improve the framework by collecting the general feedback from customers. Exclusive discounts: Incentives for customers! Advance notice on pre-releases: This will let us entice customers to make pre-orders. Summary In this chapter, we have created a centralized customer area, which allowed customers to update their password, update their default delivery address, and list their orders and their statuses. We have also created an orders model, which we used to allow customers to view individual orders, as well as cancel existing orders. We also looked into how we might expand the customer area to make it better, providing more value to the customer. This provides a nice, convenient place for the customer to manage their account, the information stored by our site on them, and see an overview of all their pending and processed orders at a glance, to see what is happening with them. • • • This material is copyright and is licensed for the sole use by jackie tracey on 23rd February 2010 953 Quincy Drive, , Brick, , 08724 . buildFromTemplates('header.tpl .php& apos;, 'account/confirm-cancel.tpl .php& apos;,'footer.tpl .php& apos;); require_once( FRAMEWORK_PATH . 'models/order/model .php& apos;); $this->order. and is licensed for the sole use by jackie tracey on 23rd February 2010 953 Quincy Drive, , Brick, , 08724 Chapter 12 [ 255 ] We return false to indicate that the order was not cancelled, allowing. licensed for the sole use by jackie tracey on 23rd February 2010 953 Quincy Drive, , Brick, , 08724 User Account Features [ 254 ] This requires some functionality in our order model to cancel

Ngày đăng: 07/07/2014, 10:20