Smarty Forum Index Smarty
WARNING: All discussion is moving to https://reddit.com/r/smarty, please go there! This forum will be closing soon.

PHP5 i MySQL Zastosowania e-commerce -wyswietlanie produktow

 
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Smarty Forum Index -> Language: Polish
View previous topic :: View next topic  
Author Message
Fellow
Smarty Rookie


Joined: 26 Mar 2007
Posts: 7

PostPosted: Mon Mar 26, 2007 8:37 am    Post subject: PHP5 i MySQL Zastosowania e-commerce -wyswietlanie produktow Reply with quote

Od jakiegos czasu bawie sie PHP MySQL-em i smarty. Kupilem sobie ksiazke PHP5 i MySQL Zastosowania e-commerce z heliona. Przyklady tej ksiazki dzialaja bez zarzutu, ale zastanawia mnie czy system ktory zostal zastosowany moze wyswetlac produkty w rozny sposob. To znaczy ze np chcialbym wyswietlac produkty z dzialu 'Natura' i categorii 'Zwierzeta' w innej formie niz produkty dzialu 'Natura' categorii 'Kwiaty'. Jesli jest ktos w temacie to prosze o jakas pomoc bo juz troche lamalem sobie glowe nad tym i nic. Ciagle prezentowaly mi sie produkty wg jednego szablonu. hmm. pozdr
Back to top
View user's profile Send private message
SzubertX
Smarty Rookie


Joined: 27 Sep 2005
Posts: 8
Location: Poland

PostPosted: Thu Mar 29, 2007 10:19 pm    Post subject: Reply with quote

Witam!
Te? zaczyna?em od tej ksi??ki zabaw? ze Smarty - by?a chyba pierwsza po polsku która porusza?a temat Smarty Smile Nawet jaki? sklepik na podstawie jej kiedy? zrobi?em z ró?nymi modyfikacjami...

Je?li chodzi Ci o ró?ne szablony list produktów lub opisów produktów - to mo?na na kilka prostych sposobów to zrobi?... Odpowiedzialne za to by?y szablony products_list.tpl i product.tpl. Po prostu zrób sobie kilka ich wersji które Ci s? potrzebne - a pó?niej wg jakiego? wyznacznika (po nazwach kategorii z GETów, czy dodatkowej kolumny w kategoriach w bazie) b?dziesz odpowiednio w index.php ?adowa? odpowiednie szablony Smarty (np. products_list1.tpl, products_list2.tpl, itd)...

To tak tyle mi przysz?o na szybko do g?owy Wink
Back to top
View user's profile Send private message
Fellow
Smarty Rookie


Joined: 26 Mar 2007
Posts: 7

PostPosted: Fri Mar 30, 2007 8:01 am    Post subject: Reply with quote

Ciesze sie ze ktos odpisal na mojego posta. Dzieki Subert. Very Happy
A moglbys przykladem pokazac jak w index.php po GET-cie wybierac odpowiednie szablony w zaleznosci od przegladanego dzialu i categorii? Bede ogromnie wdzieczny.
Back to top
View user's profile Send private message
SzubertX
Smarty Rookie


Joined: 27 Sep 2005
Posts: 8
Location: Poland

PostPosted: Fri Mar 30, 2007 11:39 pm    Post subject: Reply with quote

Po GETach b?dzie tak troch? nieelegancko, bo b?dzie to wpisane w kod strony i ka?da modyfikacja b?dzie si? wi?za?a z modyfikacj? kodu - lepiej by by?o przez baz?, ale... Wink

Wi?c ?eby nie szuka? daleko, podobnie jak by?o w ksi??ce... Strona by?a podzielona na bloki, które w zale?no?ci od akcji zmienia?y si?, np:
Code:

      $pageContentsCell = "first_page_contents.tpl";
      $categoriesCell = "categories_list.tpl";

if (isset($_GET['OrderDone']))
      $pageContentsCell="checkout_done.tpl";
if (isset($_GET['Search']))
      $pageContentsCell="search_results.tpl";
if (isset($_GET['ProductID']))
     $pageContentsCell = "product.tpl";

Czyli na domy?lnie zadeklarowane by?o, ?e w g?ównej cz??ci strony mia?e? "first_page_contents.tpl" który to szablon z kolei ?adowa? list? produktów z danej kategorii... Wi?c wystarczy, ?eby zrobi? sobie kilka takich z ró?nymi uk?adami tych list i teraz zale?y jak sobie chcesz zorganizowa? t? stron? - je?li chodzi o GETy... Np. je?li b?dzie GET['category1'] to za?adujesz product_list1.tpl itd... To ju? Twoja kwestia... To by?by taki najszybszy sposób chyba Smile Czyli reasumuj?c:

Code:

$pageContentsCell = "first_page_contents.tpl";

if(isset($_GET['cat1'])) $pageContentsCell = "first_page_contents1.tpl";
if(isset($_GET['cat2'])) $pageContentsCell = "first_page_contents2.tpl";
...


No i oczywi?cie dalej do Smarty przekazujesz $pageContentsCell która otwiera odpowiedni szablon...

A bardziej elegancko by?oby zrobi? dodatkow? kolumn? w bazie, w tabeli z kategoriami, z nazw? (lub jakim? id) szablonu w którym maj? si? otwiera?... Wink
Back to top
View user's profile Send private message
Fellow
Smarty Rookie


Joined: 26 Mar 2007
Posts: 7

PostPosted: Tue Apr 10, 2007 8:21 am    Post subject: Reply with quote

Myslalem ze sobie poradze ale niestety.... nie wiem jak to dalej rozwiazac. Moze jak podam troche kodu to bedzie latwiej zobrazowac.
mam warstwie danych tak plik do_portal.php
Code:
<?php
//klasa warstwy danych
class DoPortal
{
    //konstruktor klasy
    function __construct()
    {
    //odniesienie do pbniektu DbMenadzer powolanego w pliku app_top.php
    $this->dbManager = $GLOBALS['gDbManager'];
    }
    //pobranie wlasciwach informacji o dzialach
    public function GetDzialy()
    {
    $query_string = "SELECT department_id, name FROM department";
    $result = $this->dbManager->DbGetAll($query_string);
    return $result;
    }
// pobranie szczegółowych informacji na temat danego działu
  public function GetDzialDetale($departmentId)
  {                     
    $query_string = "SELECT name, description
                     FROM department
                     WHERE department_id = $departmentId";
    $result = $this->dbManager->DbGetRow($query_string);
    return $result;     
  }
  // pobranie informacji o kategoriach należących do danego działu
  public function GetKategoriaWDziale($departmentId)
  {                                                     
    $query_string = "SELECT category_id, name           
                     FROM category                     
                     WHERE department_id = $departmentId";
    $result = $this->dbManager->DbGetAll($query_string);                         
    return $result;                                     
  }   
  // pobranie szczegółowych informacji na temat danej kategorii
  public function GetKategoriaDetale($categoryId)       
  {                                                     
    $query_string =                                     
              "SELECT name AS category_name, description AS category_description
               FROM category                                     
               WHERE category_id = $categoryId";                 
    $result = $this->dbManager->DbGetRow($query_string);
    return $result;                                     
  }
// pobranie listy produktów przypisanych do kategorii Aktualnosci
  public function GetAktualnosci($categoryId)
  {           
    $query_string =
       "SELECT aktualnosci.product_id, aktualnosci.titel, aktualnosci.description, aktualnosci.data
       FROM aktualnosci
       INNER JOIN miasto_category
       ON aktualnosci.product_id = miasto_category.product_id
       WHERE miasto_category.category_id = $categoryId";
    $result = $this->dbManager->DbGetAll($query_string);                         
    return $result;
  }     
}
//koniec klasy DoPortal
?>

dalej w warstwie biznesowej mam plik bo_portal.php
Code:
<?php
//zaladowanie warstwy danych
require_once SITE_ROOT.'/warstwa_danych/do_portal.php';

//utorzenie klasy warstwy biznesowej odpowiedzialnej za pobranie informacji o pozycjach katalogowych

class BoPortal
{
/*prywatna skladowa*/
private $mDoPortal;
   
// konstruktor klasy inicjujacy obiekt warstwy danych
    function __construct()
  {
   $this->mDoPortal = new DoPortal();
  }
// teraz pobierzemy dane o wszystkich dzialach
    public function GetDzialy()
  {
     $result = $this->mDoPortal->GetDzialy();
     return $result;
  }
// pobranie szczegółowych informacji na temat danego działu
    public function GetDzialDetale($departmentId)   
  {                                                     
    $result = $this->mDoPortal->GetDzialDetale($departmentId);
    return $result;
  }           
// pobranie listy kategorii przypisanych do danego działu
    public function GetKategoriaWDziale($departmentId)
  {           
     $result = $this->mDoPortal->GetKategoriaWDziale($departmentId);
     return $result;
  }           
// pobranie szczegółowych informacji na temat danej kategorii
    public function GetKategoriaDetale($categoryId)
  {           
     $result = $this->mDoPortal->GetKategoriaDetale($categoryId);
     return $result;
  }
// pobranie listy produktów przypisanych do danej kategorii
    public function GetAktualnosci($categoryId)
  {           
// wywołanie metody warstwy danych, która udostępnia listę produktów
     $result = $this->mDoPortal->GetAktualnosci($categoryId);
    // zwrócenie wyniku
     return $result;
  }
}
//koniec klasy BoPortal
?>

a teraz warstwa prezentacji plik funtion.load_lista_aktualnosci.php
Code:

<?php 
// nazwy funkcji zapisane w plikach modułów dodatków muszą mieć składnię: smarty_typ_nazwa
function smarty_function_load_lista_aktualnosci($params, $smarty)
{     
  $products_list = new ListaAktualnosci();
  $products_list->init();
  // zdefiniowanie zmiennej assign szablonu
  $smarty->assign($params['assign'], $products_list);
}     
class ListaAktualnosci
{
  /* publiczne składowe dostępne z poziomu szablonu Smarty */     
  public $mAktualnosci;
 
  /* prywatne składowe */
  private $mBoPortal;
  private $mDepartmentId;
  private $mCategoryId;
  /* konstruktor */
  function __construct()
  {   
    // powołanie obiektu warstwy logiki
    $this->mBoPortal = new BoPortal();                   
    // pobranie parametru DepartmentID z żadania GET i rzutowanie wartości na liczbę całkowitą
    if (isset($_GET['DepartmentID']))                     
       $this->mDepartmentId = (int)$_GET['DepartmentID']; 
    // pobranie parametru CategoryID z żadania GET i rzutowanie wartości na liczbę całkowitą
    if (isset($_GET['CategoryID']))                       
       $this->mCategoryId = (int)$_GET['CategoryID'];     
  }                                                       
  /* init */                                               
  function init()                                         
  {                                                       
    // jeśli jest przeglądana kategoria, lista produktów zostanie pobrana dzięki wywołaniu
    // metody GetProductsInCategory (warstwa logiki)
    if (isset($this->mCategoryId))                         
       $this->mAktualnosci = $this->mBoPortal->GetAktualnosci($this->mCategoryId);
  }                         
} //koniec klasy
?>

plik lista_aktualnosci.tpl
Code:
{* lista_aktualnosci.tpl *}
{load_lista_aktualnosci assign="lista_aktualnosci"}
                                         
<table cellspacing="0" border="0">               
  <tr>                                           
    {section name=k loop=$lista_aktualnosci->mAktualnosci}
    {if  $smarty.section.k.index !=0 && $smarty.section.k.index % 2 == 0}
  </tr>                                           
  <tr>                                           
  {/if}                                           
    <td>                                         
       <table cellPadding="0" align="left">       
         <tr>                                     
                                         
           <td valign="top" width="200">         
              <span class="ProductName">                     
                  {$lista_aktualnosci->mAktualnosci[k].titel}
              </span>                             
              <br /><br />                       
              <span class="ProductDescription">   
                {$lista_aktualnosci->mAktualnosci[k].description}
                <br /><br />                     
                Data dodania:                           
              </span>                             
              <span class="ProductPrice">         
                {$lista_aktualnosci->mAktualnosci[k].data}
              </span>                             
           </td>                                 
         </tr>                                   
       </table>                                   
    </td>                                         
    {/section}                                   
  </tr>                                           
</table>   

plik index.tpl
Code:
{* smarty *}
{config_load file="site.conf"}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3c.org/1999/xhtml" xml:lang="pl" lang="pl">
  <head>
   <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-2" />
        <title>{#sitetitle#}</title>
        <link rel="stylesheet" type="text/css" href="styl.css" />
  </head>
  <body>
    <div id="nagl">
   {include file="header.tpl"}
    </div>
    <div id="calosc">
   <div id="pierwszakolumna">
   {include file="lista_dzialow.tpl"}
   {include file="$categoriesCell"}
        </div>
       
   <div id="tresc">
                {include file="$pageContentsCell"}
{include file="$list"}
   </div>

   <div id="trzeciakolumna">
      Zawartość trzeciej kolumny
   </div>
    </div>
    <div id="stopka">
   <h6>Stopka</h6>
    </div>
  </body>
</html>

i sam index.php
Code:
<?php
// Za?adowanie biblioteki Smarty i plik?w konfiguracyjnych
require_once 'include/app_top.php';

//zaladowanie kodu warstwy biznesowej
require_once SITE_ROOT.'/warstwa_biznesowa/bo_portal.php';

// Za?adowanie pliku szablonu Smarty
$page = new Page();
$pageContentsCell = "blank.tpl";
$categoriesCell = "blank.tpl";
$list = "blank.tpl";
//jesli jest przegladany dzial, trzeba pobrac szczegolowe dane na jego temat
if (isset($_GET['DepartmentID']))
{
$pageContentsCell = "dzial.tpl";
$categoriesCell = "lista_kategorii.tpl";
if (isset($_GET['CategoryID']))
$list ="lista_aktualnosci.tpl";
}

$page->assign("pageContentsCell", $pageContentsCell);
$page->assign("categoriesCell", $categoriesCell);
$page->assign("list", $list);
$page->display('index.tpl');

// Za?adowanie kodu app_bottom odpowiedzialnego za zako?czenie po??czenia z baz? danych
require_once 'include/app_bottom.php';
?>

Jak rozdzielic, ze jesli przegladam Categorie Aktualnosci wykona sie szablon lista_aktualnosci.tpl ( ktory posiada naglowki titel, description, data dodania) a jesli przegladam Categorie Turystyka wykona sie szablon turystyka.tpl (oczywiscie szablon ten jest jeszcze nie utworzony , ale bedzie posiadal np naglowki - titel, zdjecie, opis itp. czyli inne dane). Zaznaczam ze te categorie sa w jednym dziale pt" Miasto".
Szubert licze na twoja pomoc bo tylko Ty chyba jestes w temacie jesli chodzi o ta ksiazke i masz napewno pojecie w pisaniu takiego systemu. Pozdrawiam Fellow.
Back to top
View user's profile Send private message
Display posts from previous:   
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Smarty Forum Index -> Language: Polish All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group
Protected by Anti-Spam ACP