This is work in progress
Content
- Project Description
- Requirements and Technologies
- Modules (Frontend and Backend)
- Objects and Database
- Frontend Sections
- Backend Sections
- Graphic Design
1. Project Description
Project aims to create a full-featured ecommerce solution. Backend administration area will include classic features like managing product catalog, categories, standard and custom product attributes, managing sales, users and part of the website content, also viewing reports. Will not manage inventory (stock) at this time.
Front website should be elegant, span the entire width of the browser and emphasize quick access to product info (image, price, attributes). Will feature large images, smooth transitions and simple interactions. All information should be clearly and easily available (product list, product info, cart, user profile info, categories) through as few user actions as possible (all info on the same page, few page reloads).
Note: All code (including comments) will be written in English, the forms in the administration area will have English names, but error messages, some mockups and all designs will be translated to Romanian.
2. Requirements and Technologies
Project will use:
Database: MySQL
Server: Linux / Apache / PHP 5
Framework: symfony 1.4 with Doctrine
3. Modules
3.1 Frontend Symfony Modules
product
Deals with product pages. Listings for home page, category page, search results page (grid or list) and also product details page. Should include templates for:
- product list (grid)
- product details
user
Most likely developed on top of a plugin such as sfGuard.
Will additionally include templates for:
- user profile (view and edit profile details, shipping and billing address, company information)
- order history
- order details page
- cart (developed as a separate module or component?)
- checkout
- wishlist
- reviews
page
Additional pages (Policy, Help Page, About Us, etc)
3.2 Backend Symfony Modules
order
category
product
attribute
review
tag
user
page
report
config
4. Objects and Database
4.1 Objects
User
Database Table: sf_guard_user
Table Fields: id, first_name, last_name, email_address, username, algorithm, salt, password, is_active, is_super_admin, last_login, created_at, updated_at
UserProfile
Database Table: profiles
Table Fields: id, about
Product
Database Table: products
Table Fields: id, title, description, description_full, code, brand_id, price, price_promo, is_active, created_at, updated_at
ProductImages
Database Table: images
Table fields: id, product_id, image
Category
Database Table: categories
Table Fields: id, title, category_id, description, image, is_active, created_at, updated_at
ProductCategory
Database Table: product_to_category
Table Fields: product_id, category_id
Attribute
Database Table: attributes
Table Fields: id, name, code, attribute_set_id, is_system, is_active, scope
AttributeSet
Database Table: attribute_sets
Table Fields: id, name
ProductAttribute
Database Table: product_to_attribute
Table Fields: product_id, attribute_id
Brand
Database Table: brands
Table Fields: id, name, is_active
Order
Database Table: orders
Table Fields: id, user_id, billing_address, shipping_address, amount, created_at, status
OrderProducts
Database Table: orders_to_products
Table Fields: order_id, product_id
Review
Page
Report
Rule
Config
4.2 Database
Once I’ve created the database diagram (using MySQL Workbench), I used a plugin called Doctrine Export to generate a YAML database schema.
Changes were made in YAML in various places, such as: class names (capitalized or changed slightly), removed ‘created_at’ and ‘updated_at’ fields and replaced them with the simpler ‘Timestampable: ~’, also added ‘Sluggable’ fields where necessary. Some relationships had to be rewritten.
5. Frontend Sections
TODO: list of frontend sections (home, product list, product details, category page, search, filters, cart, wishlist, user login, user register, user profile, checkout, etc)
6. Backend Sections
6.1 Orders
6.1 a) Order list
Display fields: id, user name, order date, total price, order status
Description: lists orders made through website (completed checkouts) ordered by date. Order row links to order details (6.2 b). User name links to user details, status can be changed to: Pending, Processing, On Hold, Completed, Canceled.
List can be filtered, searched, ordered.
6.1 b) Order details
Display fields: id, user details, order date, billing address, shipping address, products list, prices, total price, order date, order status.
Description: Full details regarding order, all info should be clearly visible within the same screen.
6.2 Catalog
6.2.1 Products
6.2.1 a) Products list
Display fields: id, product code, product image, product title, product type, category, price, stock, visibility
Description: Lists products in the Catalog. Basic CRUD operations clearly available. Hover over image thumbnail displays larger image preview.
List can be filtered, searched, ordered.
6.2.1 b) Product Details
Display fields: title, product code, system attributes (see 6.2.3), prices, images, short description, full description, stock, categories, brand, type, reviews, tags, custom attributes set, visibility, etc.
Description: Edit product details, page should be clearly separated into a few sections: Basic (system) Attributes, Category Selection, Custom Attributes, Images, Reviews, Tags.
6.2.2 Categories
6.2.2 a) Categories Hierarchy
Description: Nested view of categories, features simple drag & drop. Each category also displays number of products attached to it.
6.2.2 b) Add/Edit Category
Display fields: title, URL, description, image, page title, included in navigation, visibility, link to view attached products.
Description: Form for adding and editing categories. Upon completion, category is added as a child of the root category. Admin needs to enter 6.2.2 (a) section to establish hierarchy.
6.2.3 Attributes
6.2.3 a) Attributes List
Display fields: code, name, visibility, type (system or custom), scope (where attribute is listed), set (parent group of attribute – see 6.2.3 (c))
Description: Attributes are defined as snippets of additional information about a product. There are system attributes, which cannot be changed or deleted (such as price, promo price, description, stock, etc) and custom attributes, which are defined by the admin and are grouped into sets. Admin can attach set (or individual attributes?) to product.
Example: The set “Cameras” (internal name) might group custom attributes such as “memory”, “lens type”, “connectivity” and “megapixels”. When the admin attaches the set “Cameras” to the product “Sony Cybershot ZX420D”, he can then manually fill in the custom attributes for this product.
List can be filtered, searched, ordered.
6.2.3 b) Add/Edit Attribute
Display fields: code, name, visibility, set, mode (could be text, textarea, dropdown, radios, etc)
Description: Admin creates attributes to be later attached to products.
Example: code “camera_megapixels”, name “Resolution (MP)”, mode “text field”.
6.2.3 c) Attribute Sets
Display fields: Name (internal)
Description: Add sets (groups) and then attach attributes in section 6.2.3 (b) above.
6.2.4 Reviews
Display fields: product title, review text (excerpt), user, date, rating, status.
Description: Lists user product reviews, admin can edit, change status from pending to approved or delete review.
List can be filtered, searched, ordered.

6.2.5 Tags
TO DO: define tag management system
6.3 Customers
6.3 a) Customer (user) list
Display fields: name, email, phone, address, created date, last login date, number of orders, number of completed orders, total amount of completed orders.
Description: Lists users registered within the system and basic contact and order details. Clicking user links to full user details page.
List can be filtered, searched, ordered.
6.3 b) Edit User
Display fields: name, email, account creation date, last login date, shipping address, billing address.
Description: Edit user details, admin can view/edit all details. Link is available for Order List by selected user.
6.4 CMS (Pages)
6.4 a) Pages list
Display fields: name, URL, content (excerpt)
6.4 b) Add/Edit Page
Display fields: page name, page title (in website), URL, content (HTML editor), visibility.
Description: Admin can create pages with HTML content, define name and page title.
6.5 Reports
TO DO
(common reports should include sales, products, users, reviews, search terms)
6.6 Config
Admin configuration options.
TO DO: define options
6.7 Rules
7. Graphic Design
The idea is to have a grid that spans the entire width of the browser as the main module of the website. Grid would normally contain products but can also accomodate categories, filters, shopping cart, wishlist, even the footer.

See part 2 of the tutorial for more: Creating an online store with symfony – Part 2: Design












awesome!
Smack-dab what I was loonkig for?ty!