<MyRusakov.ru />

Создание Интернет-магазина на OpenCart 2.0

Создание Интернет-магазина на OpenCart 2.0

Видеокурс "Создание Интернет-магазина на OpenCart 2.0" обучит Вас созданию любых Интернет-магазинов на OpenCart 2. В первом разделе курса разбираются абсолютно все возможности данного движка с примерами.

Во втором разделе создаётся полноценный Интернет-магазин, где Вы уже всё увидите своими глазами.

И, наконец, в третьем разделе курса созданный Интернет-магазин будет размещён в Интернете.

К курсу так же идут бесплатные и очень ценные Бонусы сопоставимые с самим курсом: "Как сэкономить на Яндекс.Директ до 50%", "Дропшиппинг" и "Как раскрутить Интернет-магазин".

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Форум сайта MyRusakov.ru

Пагинация и фильтр поиска
13.12.2014 15:20:42 Пагинация и фильтр поиска Сообщение #1
artyomweb

artyomweb

Освоившийся

Освоившийся

Дата регистрации:
23.09.2014 22:48:11

Сообщений: 26

<?php
$onpage = 15; // записей на страницу
$page = page(); // определяем страницу
[code][/code]
Профиль Ответить
13.12.2014 15:21:57 Пагинация и фильтр поиска Сообщение #2
artyomweb

artyomweb

Освоившийся

Освоившийся

Дата регистрации:
23.09.2014 22:48:11

Сообщений: 26

<?php
$onpage = 15; // записей на страницу
$page = page(); // определяем страницу
Профиль Ответить
13.12.2014 15:25:02 Пагинация и фильтр поиска Сообщение #3
artyomweb

artyomweb

Освоившийся

Освоившийся

Дата регистрации:
23.09.2014 22:48:11

Сообщений: 26

<?php
$onpage = 15; // записей на страницу
$page = page(); // определяем страницу
function page()
{
    if(empty($_GET["page"])){
        $page = 1;
    }
 else {
if(!is_numeric($_GET["page"])) die("Неправильный формат номера страницы!";
        $page = $_GET["page"];
    }
 return $page;
}
function navigation($onpage, $page, $where, $log)
{
        $return = null;
  $count = mysql_query("SELECT COUNT(*) FROM $where" or die(mysql_error());
        $count = mysql_fetch_array($count);
        $count = $count[0];
        $pages = ceil($count/$onpage);
       
  if ($_GET["price_start"]){$start = "`price` >= '".htmlspecialchars($_GET["price_start"])."'";}
        if ($_GET["price_end"]){$end = "`price` >= '".htmlspecialchars($_GET["price_end"])."'";}
        if ($start) $log = "AND ".$start;
     if ($end) $log = "AND ".$end;
     if ($start && $end) $log ="WHERE ".$start." AND ".$end;
  
  if ($_GET['price_start']){
  $count = mysql_query("SELECT COUNT(*) FROM $where $log" or die(mysql_error());
  $count = mysql_fetch_array($count);
        $count = $count[0];
        $pages = ceil($count/$onpage);
        }
  
  if ($_GET['price_end']){
     $count = mysql_query("SELECT COUNT(*) FROM $where $log" or die(mysql_error());
  $count = mysql_fetch_array($count);
        $count = $count[0];
        $pages = ceil($count/$onpage);
  }
  
  $con="&price_start=".$_GET['price_start']."&price_end=".$_GET['price_end']."";//Тут я много на мудрил но работает)))
  $getr=(($_GET['price_start'])||($_GET['price_end']));
  if ($page > 1) $pervpage = '<a href=?page=1>Первая</a>|<a href=?page='.($page - 1).'>Предыдущая</a>|';
  if (($page > 1)&&$getr) $pervpage = '<a href=?page=1'.$con.'>Первая</a>|<a href=?page='.($page - 1).$con.'>Предыдущая</a>|';
  
  if (($page != $onpage)&&($page < $pages)) $nextpage = '|<a href=?page='.($page + 1).'>Следующая</a>|<a href=?page='.floor($pages).'>Последняя</a>';
  if (($page != $onpage)&&($page < $pages)&&$getr) $nextpage = '|<a href=?page='.($page + 1).$con.'>Следующая</a>|<a href=?page='.floor($pages).$con.'>Последняя</a>';
  
  if($page - 5 > 0) $page5left = '<a href=?page='.($page - 5).'>'.($page - 5).'</a>|';
  if(($page - 5 > 0)&&$getr) $page5left = '<a href=?page='.($page - 5).$con.'>'.($page - 5).'</a>|'; if($page - 4 > 0) $page4left = '<a href=?page='.($page - 4).'>'.($page - 4).'</a>|';
  if(($page - 4 > 0)&&$getr) $page4left = '<a href=?page='.($page - 4).$con.'>'.($page - 4).'</a>|'; if($page - 3 > 0) $page3left = '<a href=?page='.($page - 3).'>'.($page - 3).'</a>|';
  if(($page - 3 > 0)&&$getr) $page3left = '<a href=?page='.($page - 3).$con.'>'.($page - 3).'</a>|'; if($page - 2 > 0) $page2left = '<a href=?page='.($page - 2).'>'.($page - 2).'</a>|';
  if(($page - 2 > 0)&&$getr) $page2left = '<a href=?page='.($page - 2).$con.'>'.($page - 2).'</a>|'; if($page - 1 > 1) $page1left = '<a href=?page='.($page - 1).'>'.($page - 1).'</a>|';
  if(($page - 1 > 1)&&$getr) $page1left = '<a href=?page='.($page - 1).$con.'>'.($page - 1).'</a>|';if($page + 5 <= $pages) $page5right = '|<a href=?page='.($page + 5).'>'.($page + 5).'</a>';
if(($page + 5 <= $pages)&&$getr) $page5right = '|<a href=?page='.($page + 5).$con.'>'.($page + 5).'</a>';if($page + 4 <= $pages) $page4right = '|<a href=?page='.($page + 4).'>'.($page + 4).'</a>';
if(($page + 4 <= $pages)&&$getr) $page4right = '|<a href=?page='.($page + 4).$con.'>'.($page + 4).'</a>';if($page + 3 <= $pages) $page3right = '|<a href=?page='.($page + 3).'>'.($page + 3).'</a>';
if(($page + 3 <= $pages)&&$getr) $page3right = '|<a href=?page='.($page + 3).$con.'>'.($page + 3).'</a>';if($page + 2 <= $pages) $page2right = '|<a href=?page='.($page + 2).'>'.($page + 2).'</a>';
if(($page + 2 <= $pages)&&$getr) $page2right = '|<a href=?page='.($page + 2).$con.'>'.($page + 2).'</a>';if($page + 1 <= $pages) $page1right = '|<a href=?page='.($page + 1).'>'.($page + 1).'</a>';
if(($page + 1 <= $pages)&&$getr) $page1right = '|<a href=?page='.($page + 1).$con.'>'.($page + 1).'</a>';if ($page > 1)
{
Error_Reporting(E_ALL & ~E_NOTICE);
echo "<div class=\"pagin_1\">";
echo '<i>Найдено <b>'.$count.'</b> тов. </i>'.$pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<span>'.$page.'</span>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage."<i> Всего <b>".$pages."</b> стр.</i>";
echo "</div>";
}
elseif ($page = 1)
{
Error_Reporting(E_ALL & ~E_NOTICE);
echo "<div class=\"pagin\">";
echo '<i>Найдено <b>'.$count.'</b> тов. </i><span>'.$page.'</span>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage."<i> Всего <b>".$pages."</b> стр.</i>";
echo "</div>";
}
}
function sql_query($onpage, $page, $where, $log)
{
    if ($_GET["price_start"]){$start = "`price` >= '".htmlspecialchars($_GET["price_start"])."'";}
    if ($_GET["price_end"]){$end = "`price` <= '".htmlspecialchars($_GET["price_end"])."'";}
    if ($start) $log = "AND ".$start;
 if ($end) $log = "AND ".$end;
 if ($start && $end) $log ="AND ".$start." AND ".$end;
 
$begin = $page*$onpage+1-$onpage; // откуда начинать
 $sql = "SELECT * FROM $where $log LIMIT ".$begin.", ".$onpage;
        $result = mysql_query($sql) or die(mysql_error());
        return $result;
}
include "sql_connect.php";
 $result = sql_query($onpage, $page, $where, $log);
    $row = mysql_fetch_array ($result);
if ($row['currencyId']='RUR'$money='руб.';
$i=0;
$w=3;
$navigation = navigation($onpage, $page, $where, $log); // определим навигацию
echo $navigation;echo "<div id=\"conttov\"><table id=\"table_tovars\">";
do{
if(($i==0)||!($i%$w))echo"<tr>";
$i++;
printf ("
<td align=\"center\">
<h4>%s</h4>
<h5>%s</h5>
<img src=\"%s\"/>
<h3>Цена: <span>%s</span> $money</h3>
<a target=\"_blank\" href=\"%s\">Купить</a>
</td>
",$row['vendor'],$row['model'],$row['picture'],$row['price'],$row['url']);
if(!($i%$w)||(mysql_num_rows($result)==$i))echo"</tr>";
}while ($row = mysql_fetch_array ($result));
echo "</table></div>";
$navigation = navigation($onpage, $page, $where, $log); // определим навигацию
echo $navigation;
mysql_close(); // отключение от БД
?>
Профиль Ответить
13.12.2014 21:04:57 Пагинация и фильтр поиска Сообщение #4
Jey-Val-Star

Jey-Val-Star

Освоившийся

Освоившийся

Дата регистрации:
30.11.2014 21:33:11

Сообщений: 27

А что у тебя происходит если фильтры не используются?

Сделай так, переменную $log определи до всех функций, причем задай ей сначала пустое значение, а при выполнении условий - значение с where
$log = '';
if (($_GET["price_start"]) && ($_GET["price_end"])) 
    $log = "WHERE `price` >= " . (int)$_GET["price_start"] . "AND `price` <= " .  (int)$_GET["price_end"];

elseif ($_GET["price_start"])
    $log = "WHERE `price` >= " . (int)$_GET["price_start"];

elseif ($_GET["price_end"])
    $log = "WHERE `price` <= " . (int)$_GET["price_end"];
И все, больше проверок на фильтр не нужно. Если нет фильтров то лог будет пустой, иначе с  параметром.
А то неразбериха получается вот здесь
    $count = mysql_query("SELECT COUNT(*) FROM $where" or die(mysql_error()); 
    $count = mysql_fetch_array($count); 
    $count = $count[0]; 
    $pages = ceil($count/$onpage); 
             
    if ($_GET["price_start"]){$start = "`price` >= '".htmlspecialchars($_GET["price_start"])."'";} 
    if ($_GET["price_end"]){$end = "`price` >= '".htmlspecialchars($_GET["price_end"])."'";} 
    if ($start) $log = "AND ".$start; 
    if ($end) $log = "AND ".$end; 
    if ($start && $end) $log ="WHERE ".$start." AND ".$end; 
       
    if ($_GET['price_start'])
    { 
        $count = mysql_query("SELECT COUNT(*) FROM $where $log" or die(mysql_error()); 
        $count = mysql_fetch_array($count); 
        $count = $count[0]; 
        $pages = ceil($count/$onpage); 
    } 
       
    if ($_GET['price_end'])
    { 
        $count = mysql_query("SELECT COUNT(*) FROM $where $log" or die(mysql_error()); 
        $count = mysql_fetch_array($count); 
        $count = $count[0]; 
        $pages = ceil($count/$onpage); 
    } 

Далее перед выводом вот этого
$con="&price_start=".$_GET['price_start']."&price_end=".$_GET['price_end']."";Проверь значения GET.
(можно засунуть в проверку на $log, тем самым уменьшить код и избежать повторений).
$log = '';
$con = '';
if (($_GET["price_start"]) && ($_GET["price_end"])) {
    $log = "WHERE `price` >= " . (int)$_GET["price_start"] . "AND `price` <= " .  (int)$_GET["price_end"];
    $con="&price_start=".(int)$_GET['price_start']."&price_end=".(int)$_GET['price_end']."";
}

elseif ($_GET["price_start"]){
    $log = "WHERE `price` >= " . (int)$_GET["price_start"];
    $con="&price_start=".(int)$_GET['price_start'];
}

elseif ($_GET["price_end"]){
    $log = "WHERE `price` <= " . (int)$_GET["price_end"];
    $con="&price_end=".(int)$_GET['price_end']."";
}
Такую строку можно не использовать
if(!is_numeric($_GET["page"])) die("Неправильный формат номера страницы!"Просто привести к integer и все, или $page = 1;

Такие проверки даром не нужны если определишь заранее $con
if (($page > 1)&&$getr)...
Как-то так...)
Профиль Ответить
14.12.2014 05:41:32 Пагинация и фильтр поиска Сообщение #5
artyomweb

artyomweb

Освоившийся

Освоившийся

Дата регистрации:
23.09.2014 22:48:11

Сообщений: 26

      Jey-Val-Star, спасибо за то что помог разобраться с этим безумным
кодом))) и со всякими мелкими недостатками!!! Сейчас всё работает.
 Я твой должник)))
Профиль Ответить
15.12.2014 13:02:29 Пагинация и фильтр поиска Сообщение #6
artyomweb

artyomweb

Освоившийся

Освоившийся

Дата регистрации:
23.09.2014 22:48:11

Сообщений: 26

        А как писать ссылки в пагинации для переменных из формы
с checkbox(ом),  в которой можно выбирать сразу несколько флажков.
Вот такого типа:
<input type="checkbox" name="manufacturers[]" value="Hammer" />
<input type="checkbox" name="manufacturers[]" value="Makita" />
<input type="checkbox" name="manufacturers[]" value="Hitachi" />
Как прописывать здесь ссылки:
if ($_GET['manufacturers']){
    $con = '&manufacturers='.........?//Тут я не знаю что писать в ссылке для страниц
}
Профиль Ответить
15.12.2014 20:03:45 Пагинация и фильтр поиска Сообщение #7
Jey-Val-Star

Jey-Val-Star

Освоившийся

Освоившийся

Дата регистрации:
30.11.2014 21:33:11

Сообщений: 27

А ты залай фильтр с этими параметрами и смотри на юрл браузера
Но дело в том что manufactured у тебя будет в виде массива 
поэтому просто GET['manufactured'] не пойдет
нужно будет масситв на элементы разбивать
GET['manufactured'] [0], GET['manufactured'] [1], GET['manufactured'] [3]
(Вроде так)
Но лучше использовать цикл foreach, для динамичности (а вдруг у тебя не 3 а больше производителей будет)
Профиль Ответить
15.12.2014 21:24:35 Пагинация и фильтр поиска Сообщение #8
artyomweb

artyomweb

Освоившийся

Освоившийся

Дата регистрации:
23.09.2014 22:48:11

Сообщений: 26

         Jey-Val-Star, вот сделал так:
if ($_GET['manufacturers']){
    $manuf=array($_GET['manufacturers']);
    foreach ($manuf as $k => $v); 
    $log = "AND vendor = '"......'";//Как дальше заполнять запрос $log не понимаю??
}
          А потом ещё и в ссылку для пагинаций??
    $con = '&manufacturers='.$manuf;//Сам понимаю что-то не то... ???
Профиль Ответить
15.12.2014 22:08:02 Пагинация и фильтр поиска Сообщение #9
Jey-Val-Star

Jey-Val-Star

Освоившийся

Освоившийся

Дата регистрации:
30.11.2014 21:33:11

Сообщений: 27

Ну, тогда смотри
$manuf=array($_GET['manufacturers']);это неверно в корне, у тебя уже есть массив
$_GET['manufacturers']он не ассоциативный, просто по индексу (0,1,2)
вот его и нужно прогнать через foreach
foreach ($_GET['manufacturers'] as $value)

    /*код в теле цикла*/
Далее, для запроса в бд просто перечисление WHERE через AND не пойдет
SELECT * FROM table WHERE manuf = manuf1 AND manuf = manuf2...Для таких вещей существует классная штука как "Выбрать записи по таким значениям" (это мой дословный перевод)))
В SQL выгладит она как IN
SELECT * FROM table WHERE manuf IN (manuf1, manuf2,...)Но выполнять ее надо перед твоими AND (я имею в виду фильтр по ценам)

Общий вид примерно такой
$log = '';
foreach ($_GET['manufacturers'] as $value)

    if($log != '' $log .= ',';
    $log .= $value;

// и на выходе получим $log = manuf1,manuf2,manuf3
$log = 'manuf IN (' . $log .'
(Я думаю понятно что manuf1,manuf2,manuf3 и manuf IN - это для примера)
После этого функция проверки и добавление в условие WHERE фильтра цен (от до)
В общем при включенных фильтрах производитель и цены (от до) $log у тебя должен получиться таким
WHERE manuf IN(manuf1,manuf2, manuf3) AND price >= 1 AND price <= 10

Кстати совсем забыл
В цикл foreach параллельно добавь  $con
$con = '';
foreach ($_GET['manufacturers'] as $value)

    if($log != '' $log .= ',';
    $log .= $value;
    if($con != '' $con .= '&';
    $con = 'manuf[]=' . $value;
Вроде так
Профиль Ответить
15.12.2014 22:13:00 Пагинация и фильтр поиска Сообщение #10
Jey-Val-Star

Jey-Val-Star

Освоившийся

Освоившийся

Дата регистрации:
30.11.2014 21:33:11

Сообщений: 27

Ах да, самое главное -
Включай в тело программы вывод некоторых переменных, чтобы понимать что с ними происходит
echo $log;
exit(); // это для остановки программы (тебе ведь только результат нужно увидеть)
Посмотрел понял ошибку, увидел что значение переменной должно быть другим, подправил и закоментировал
//echo $log;
//exit(); // это для остановки программы (тебе ведь только результат нужно увидеть)
Или удалил)))
Профиль Ответить