Простой класс для каталога товаров
<?php
require_once "config/db.php";
require_once "product.php";
// Класс для работы с каталогом
class Catalog{
var $maincat;
var $subcat;
// фильтры
var $brand ;
var $page;
var $price;
protected $count = 0;
protected $breadcrumbs = "";
protected $query;
//protected $page_query;
function __construct($event, $maincat, $subcat, $brand, $price){
// Анти-лох
$maincat = preg_replace("/\D/","",$maincat);
$subcat = preg_replace("/\D/","",$subcat);
$brand = preg_replace("/\D/","",$brand);
/*$page = preg_replace("/\D/","",$page);
if ((!$page)||($page < 1)) $page = 1;*/
///////////////////////////////////////////////
// Как работать с набором? непонятно
$query = "SELECT * FROM `goods` WHERE 1=1 ";
if ($maincat > 0){
$query .=" AND `mcid`='".$maincat."' ";
}
if ($subcat > 0){
$query .=" AND `sbid`='".$subcat."' ";
}
if ($brand > 0){
$query .=" AND `bid`='".$brand."' ";
}
if ($event){
$q = "SELECT id FROM napravl WHERE en Like '%".$event."%' Limit 1";
$r = mysql_query($q);
if (!$r){
Error::Get_Mess("Ошибка работы БД");
}
if (@mysql_numrows($r)<1){
Error::Get_Mess("Ивента нет");
}
$data = mysql_fetch_array($r);
$query .= " AND nid Like '%".$data['id']."%'";
}
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!ДОБАВИТЬ ФИЛЬТР ПО ЦЕНЕ !!!!!!!!!!!!!!!!!!!!!!!!!!!!
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!ДОБАВИТЬ ФИЛЬТР ПО НАПРАВЛЕНИЮ !!!!!!!!!!!!!!!!!!!!!!!!!!!!
$this->query = $query;
}
// Хлебные крошки
function show_breadcrumbs($maincat, $subcat, $event){
$maincat = preg_replace("/\D/","",$maincat); // id гланой категории
$subcat = preg_replace("/\D/","",$subcat); // id подкатегории
$breadcrumbs = '<a href="/catalog/"> Каталог </a>';
if ($subcat > 0){
// Есть подкатегория - она активная
$q = "SELECT main_cat.name AS mname, sub_cat.name AS sname,
main_cat.id AS mid, sub_cat.id AS sid
FROM main_cat
INNER JOIN sub_cat ON sub_cat.id = '".$subcat."'
AND sub_cat.mcid = '".$maincat."'
WHERE main_cat.id = '".$maincat."' Limit 1";
// echo $q;
$r = mysql_query($q);
if (!$r){
Error::Get_Mess("Ошибка работы БД");
}
if (@mysql_numrows($r)<1){
//Error::Get_Mess("Ничего не найденно!");
}
$data = mysql_fetch_array($r);
//print_r($data);
$breadcrumbs .= ' / <a href="/catalog/'.$event.'/'.$data['mid'].'/">'.$data['mname'].'</a> ';
$breadcrumbs .= ' / <a href="/catalog/'.$event.'/'.$data['mid'].'/'.$data['sid'].'/"><b>'.$data['sname'].'</b></a> ';
mysql_free_result($r);
}
else{
// подкатегории нет
$q = "SELECT id, name
FROM main_cat
WHERE main_cat.id = '".$maincat."' Limit 1";
$r = mysql_query($q);
if (!$r){
Error::Get_Mess("Ошибка работы БД");
}
if (@mysql_numrows($r)<1){
//Error::Get_Mess("Ничего не найденно!");
}
$data = mysql_fetch_array($r);
$breadcrumbs .= ' / <a href="/catalog/'.$event.'/'.$data['id'].'/">'.$data['name'].'</a> ';
mysql_free_result($r);
}
echo $breadcrumbs;
}
// Отображение товара для старницы, на вход идёт номер страницы
function show_content($page){
$page = preg_replace("/\D/","",$page);
if ((!$page)||($page < 1)) $page = 1;
// Формируем запрос согласно отображаемой страницы
$query = $this->query;
if ($page == 1){
$query .= " LIMIT 0, 9";
}
else{
$query .= " LIMIT ".(($page-1)*9).",9 ";
}
//////////////////////////////////////////////////
$r = mysql_query($query);
if (!$r){
Error::Get_Mess("Ошибка работы БД");
//__halt_compiler();
}
// Вывод результата
if (@mysql_num_rows($r)==0){
Error::Get_Mess("Нет товаров по данным критериям");
}
else{
while ($row = mysql_fetch_object($r)){
$count++;
// Разбиение на три столбца
if ($count >3 ){
echo "<br /><br/>";
$count=0;
}
echo "<hr>";
$product = new Product($row->id);
// Имя
$product -> Get_Name();
echo "<br />";
// Короткое описание
$product -> Get_Short_D();
echo "<br />";
// Полное описание
$product -> Get_Full_D();
echo "<br />";
// Цена в формате 12.00 грн.
$product -> Get_Price();
echo "<br />";
// Добавить в список
$product -> Add_To_List();
// Получить бренд
$product->Get_Brand();
}
}
mysql_free_result($r);
//echo $query;
}
// Пагинатор
function show_paginator($cur_page,$txt){
// $txt - УРИ
echo "<br /><hr>";
$page = preg_replace("/\D/","",$cur_page);
$num_page = $page;
if ((!$page)||($page < 1)) $page = 1;
//////////////////////////////////////
// количество на страницу
$per_page=9;
$handle = mysql_query($this->query);
$tmp[0]=mysql_num_rows($handle);
if ($num_page==1)$to=1;
$page = $num_page;
$pages=ceil($tmp[0]/$per_page);
if ($pages>1){
if (($page-1)<1)$z=1;
else $z=$page-1;
$nx=$page-1;
if ($nx>0)
// echo '<a href="controller/show_catalog.php?route=catalog¤t_page='.$nx.'">'.$nx.'</a> ';
if ($nx>0){ echo" <a href='".$txt."page1'><noindex>Первая</noindex></a> ";
echo " <a href='".$txt."page".$nx."'><noindex>Предыдущая</noindex></a> ";
}
$k=0;
for ($i=$z;$i<=$pages;$i++){
$d=$i;
$k++;
if ($k==4){
break;
}
if ($d==$page)
echo '<a><b><noindex>'.$d.'</noindex></b></a>';
else
echo" <a href='".$txt."page".$d."'><noindex>$d</noindex></a> ";
}
$nx=$page+1;
if ($nx<=$pages)
echo " <a href='".$txt."page".$nx."'><noindex>Следующая</noindex></a> ";
if ($page<>$pages)
//Последняя
echo" <a href='".$txt."page".$pages."'><noindex>Последняя</noindex></a>";
}
mysql_free_result($handle);
}
function show_subcats($mid, $cur, $event){
// $cur - активная подкатегория, если есть
$cur = preg_replace("/\D/","",$cur);
$mid = preg_replace("/\D/","",$mid);
if ($mid > 0){
$q = "SELECT id, name
FROM sub_cat
WHERE mcid = '".$mid."'";
$r = mysql_query($q);
if (!$r){
Error::Get_Mess("Ошибка работы БД");
//__halt_compiler();
}
// Вывод результата
if (@mysql_num_rows($r)==0){
Error::Get_Mess("Нет подкатегорий по данным критериям");
}
else{
while ($row = mysql_fetch_object($r)){
// Выводим подкатегории
echo ' <a href="/catalog/'.$event.'/'.$mid.'/'.$row->id.'/"';
// активная?
if ($row->id == $cur) echo ' ';
echo ' >'.$row->name.'</a> ';
}
}
}
else{
// нет главной категории
$q = "SELECT id, name
FROM main_cat";
$r = mysql_query($q);
if (!$r){
Error::Get_Mess("Ошибка работы БД");
//__halt_compiler();
}
// Вывод результата
if (@mysql_num_rows($r)==0){
Error::Get_Mess("Нет категорий");
}
else{
while ($row = mysql_fetch_object($r)){
// Выводим подкатегории
echo ' <a href="/catalog/'.$event.'/'.$row->id.'/"';
// активная?
if ($row->id == $cur) echo ' ';
echo ' >'.$row->name.'</a> ';
}
}
}
}
// производители
function Show_Producers($mid,$sid, $event){
if ($sid > 0){
$q = "SELECT name,id FROM `brand` WHERE brand.id IN (
SELECT bid FROM goods
WHERE mcid ='".$mid."'
AND sbid ='".$sid."'
GROUP BY bid)";
}
elseif ($mid > 0){
$q = "SELECT name,id FROM `brand` WHERE brand.id IN (
SELECT bid FROM goods
WHERE mcid ='".$mid."'
GROUP BY bid)";
}
else {
$q = "SELECT name,id FROM `brand` WHERE brand.id IN (
SELECT bid FROM goods
GROUP BY bid)";
}
$r = mysql_query($q);
while ($row = mysql_fetch_object($r)){
if ($mid > 0) {
echo "<a href='catalog/".$event."/";
echo $mid."/";
if ($sid > 0) echo $sid."/";
echo "brand-".$row->id."' title='".$row->name."'>".trim($row->name)."</a> ";
}
else{
// Переход из пустого каталога, мы не знаем какой товар показывать, а пользователь хочет получить товар именно того бренда - логично перекинуть его на карточку Компании.
require_once "additional.inc";
echo "<a href='brand/".replace($row->name)."/' title='".$row->name."'>".trim($row->name)."</a> ";
}
}
mysql_free_result($r);
}
}
?>
Класс для товара
<?php
require_once "config/db.php";
// Класс работы каталога
class Product{
var $id;
//Получаем безопасную переменную
public function __construct($id){
$this->id = preg_replace("/\D/","",$id);
//echo $this->id;
}
function Get_Name(){
$q = "SELECT `name` FROM `goods` WHERE `id`='".$this->id."' Limit 1";
$r = mysql_query($q);
if (!$r){
Error::Get_Mess("Товар не найден!");
}
$data = mysql_fetch_array($r);
echo $data[0];
mysql_free_result($r);
}
// получение краткого описания
public function Get_Short_D(){
$q = "SELECT `short_descr` FROM `goods` WHERE `id`='".$this->id."' Limit 1";
$r = mysql_query($q);
if (!$r){
Error::Get_Mess("Товар не найден!");
}
$data = mysql_fetch_array($r);
echo $data[0];
mysql_free_result($r);
}
// Цена
function Get_Price(){
$q = "SELECT `short_descr` FROM `goods` WHERE `id`='".$this->id."' Limit 1";
$r = mysql_query($q);
if (!$r){
Error::Get_Mess("Товар не найден!");
}
$data = mysql_fetch_array($r);
printf("%.2f грн.",$data[0]);
mysql_free_result($r);
}
// Добавить в список как заявка
function Add_To_List(){
echo "Добавить в список".$this->id;
}
// Купить
function Add_To_Cart(){
echo "Купить: ".$this->id;
}
// Полное описание
function Get_Full_D(){
$q = "SELECT `full_descr` FROM `goods` WHERE `id`='".$this->id."' Limit 1";
$r = mysql_query($q);
if (!$r){
Error::Get_Mess("Товар не найден!");
}
$data = mysql_fetch_array($r);
echo $data[0];
mysql_free_result($r);
}
// Получаем бренд
function Get_Brand(){
$q = "SELECT name
FROM brand
WHERE id = (
SELECT bid
FROM goods
WHERE id='".$this->id."' Limit 1
) Limit 1
";
$r = mysql_query($q);
if (!$r){
Error::Get_Mess("Бренд не найден!");
}
$data = mysql_fetch_array($r);
// Думаем логически: Если человек тыкает на лого брнеда - он хочет открыть страницу бренда
require_once "additional.inc";
echo "<a href='brand/".replace($data[0])."/' title='".$data[0]."'>".trim($data[0])."</a> ";
mysql_free_result($r);
}
}
// На вход подаём id товара
?>
