Перейти к содержимому


ЧПУ для ShopCMS


  • Вы не можете ответить в тему
Сообщений в теме: 322

#41 zero20

    Новичок

  • Пользователи
  • Pip
  • 4 сообщений
Репутация: 0
Начинающий

Отправлено 15 October 2011 - 05:38 PM

Alex57 во вложении чпу для какой версии скрипта?
  • 0

#42 vsupport

    Продвинутый пользователь

  • Администраторы
  • 758 сообщений
Репутация: 31
Ассистент

Отправлено 15 October 2011 - 06:15 PM

Alex57 во вложении чпу для какой версии скрипта?

ShopCMS 3.1
  • 0

#43 Alex57

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 51 сообщений
Репутация: 31
Ассистент
  • ГородОрел

Отправлено 17 October 2011 - 01:46 PM

Выявлена ошибка после установки

Модуль ЧПУ действительно очень хороший, за исключением одной неприятной ситуации-не работает рейтинг не подробном описании.

Описание проблемы: При попытке поставить товару рейтинг т.е. указать на определенную звездочку кликнув по ней - ничего не происходит.

Возможные методы решения:

Я как дилетант в Smarty и PHP вряд ли могу что-либо посоветовать, но имеются некие соображения.

В скрипте без ЧПУ

ссылка на товар выглядит так:
http://site.ru/product_1.html

ссылка на товар после указания рейтинга:
http://site.ru/index.php?productID=1&vote=yes&mark=3
в данном случае указывали три звезды

В скрипте с ЧПУ:

ссылка на товар выглядит так:
http://site.ru/catalog/muzhskie-aromaty/armand-basi-leau-pour-homme.html


ссылка на товар после указания рейтинга:
http://site.ru/catalog/muzhskie-aromaty/armand-basi-leau-pour-homme.html


т.е. совершенно идентичны

таким образом может быть нужно по аналогии С

rewrite ^/cart\.html$ /index.php?shopping_cart=yes  last;

сделать какой-нибудь редирект. Или все же нужно править код модуля?

Господа программисты прошу совета. Рейтинг оч нужная весчь.
  • 0

#44 ruter

    Продвинутый пользователь

  • VIP
  • 334 сообщений
Репутация: 151
Мастер

Отправлено 17 October 2011 - 02:56 PM

Нужно немножко код подправить и параметры отправить не GET способом и а POST, т.е и форму отправки в шаблоне и код php подправить в product_detailed.php у меня работает нормально.

---------- Сообщение объединено ----------

Отладка правильной работы рейтинга для тех, кто установил модуль ЧПУ


Сначала открываем шаблон: product_detailed.tpl.html

Находим строчку в шаблоне:

<form name="VotingForm" action='index.php' method="GET" id="VotingForm" class="print">


Меняем на:

<form name="VotingForm" action="{$smarty.server.REQUEST_URI}" method="POST" id="VotingForm" class="print">


Дальше открываем файл product_detailed.php из директории core/includes/

Находим код:


if (isset($_GET["vote"]) && isset($productID)) //vote for a product
{
if (!isset($_SESSION["vote_completed"][ $productID ]) && isset($_GET["mark"]) && strlen($_GET["mark"])>0)
{
$mark = (int) $_GET["mark"];

if ($mark>0 && $mark<=5)
{
db_query("UPDATE ".PRODUCTS_TABLE." SET customers_rating=(customers_rating*customer_votes+'".$mark."')/(customer_votes+1), customer_votes=customer_votes+1 WHERE productID=".$productID);
}
}
$_SESSION["vote_completed"][ $productID ] = 1;
}


Меняем на этот:

if (isset($_POST["vote"]) && isset($productID)) //vote for a product
{
if (!isset($_SESSION["vote_completed"][ $productID ]) && isset($_POST["mark"]) && strlen($_POST["mark"])>0)
{
$mark = (int) $_POST["mark"];

if ($mark>0 && $mark<=5)
{
db_query("UPDATE ".PRODUCTS_TABLE." SET customers_rating=(customers_rating*customer_votes+'".$mark."')/(customer_votes+1), customer_votes=customer_votes+1 WHERE productID=".$productID);
}
}
$_SESSION["vote_completed"][ $productID ] = 1;
}


Обновляем файлы на сервере, сбрасываем кеш и открываем подробное описание продукта и проверяем.
На одной сессии можно менять на одном товаре рейтинг один раз.
Для проверки стараемся, чтобы увидеть выбирать звездочку например 1-2 при рейтинге 5, тогда сразу заметно будет изменение рейтинга при тестировании.

Проверено и работает нормально, как надо.
  • 0

#45 micehide

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 359 сообщений
Репутация: 124
Мастер

Отправлено 17 October 2011 - 04:59 PM

Уважаемые форумчане! Прошу подсказать что не так. Поставил модуль из шапки на локальную копию сайта, сделал все по инструкции (нестандартный дизайн).
Модуль работает без ошибок, но:

вместо путей типа: http://ваш_сайт/catalog/ваша_категория/
вижу такое: http://ваш_сайт/catalog/ваша_категория - то есть без последнего "/"
- соответственно по аналогии и подкатегории

а также есть еще один момент:

пути типа: http://ваш_сайт/ваша_категория/ваша_подкатегория/ - исходя из древовидной структуры каталога (можно и глубже)
теперь отображаются так: http://ваш_сайт/catalog/ваша_подкатегория - то есть "ваша_категория" уже отсутсвует в пути
соответсвенно ссылка на товар внутри дерева категорий отображается так:
http://ваш_сайт/ваша_подподкатегория/ваш_товар.html - то есть все верхние категории пропускаются

Вопрос 1: можно ли приставить "/" в конец путей на подкаталоги?
Вопрос 2: можно ли модифицировать скрипт чтобы ссылки отражали всю глубину дерева каталога?
  • 0

#46 micehide

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 359 сообщений
Репутация: 124
Мастер

Отправлено 18 October 2011 - 03:50 PM

Раз уж никто не ответил конкретно, я самостоятельно посмотрел код и решил одну из проблем (добавление "/" после названия категории), может кому пригодится:

  • В файле url_rewriter.php (корень каталога ShopCMS) внести исправления:
    найти строчку:
    $url = FU_CATALOG_ROOT.'/'.$obj['uri'];
    

    и поменять ее на:
    $url = FU_CATALOG_ROOT.'/'.$obj['uri'].'/';
    


    также найти строчку:
    $newUrl .= FU_CATALOG_ROOT;
    $newUrl .= '/'.urlencode($itemURI);

    и поменять на:
    $newUrl .= FU_CATALOG_ROOT;
    $newUrl .= '/'.urlencode($itemURI).'/';
  • В файле .htaccess внести изменения:
    найти строчку:
    RewriteRule ^catalog/([^/]*)$ index.php?uri=$1&uriFor=category [L]
    

    поменять ее на:
    RewriteRule ^catalog/([^/]*)/$ index.php?uri=$1&uriFor=category [L]
    
  • Почистить кэш (прямо в настройках браузера + очистка кэша в Администрировании)

В результате пути будут выглядеть так: http://ваш_сайт/catalog/ваш_каталог/
Вместо старого: http://ваш_сайт/catalog/ваш_каталог
  • 0

#47 SP

    Новичок

  • Пользователи
  • Pip
  • 2 сообщений
Репутация: 0
Начинающий

Отправлено 02 November 2011 - 05:15 PM

подскажите, а эта версия нормально работает с сортировкой товаров по параметрам? в старой версии была проблема, что выводились все товары из каталога, а не из категории, если сортировать по названию бренда, например...
  • 0

#48 ruter

    Продвинутый пользователь

  • VIP
  • 334 сообщений
Репутация: 151
Мастер

Отправлено 02 November 2011 - 08:03 PM

На локальном(см пост#22). На хостинге сие чудо пока не решаюсь ставить, пока не обкатаю.


Я поставил на сервер, все работает. Правда я этот модуль правил, вносил функциональные изменения по формированию нужного вида мне ссылок. А так тут нет ничего такого что может вызывать опасения. На локальнике если будет работать - то на сервере тоже.
  • 0

#49 Zudva

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 34 сообщений
Репутация: 0
Начинающий

Отправлено 08 November 2011 - 03:57 PM

как понимаю версия в шапке для версии магазина 3.0???

у меня shop cms 3.0 RC2, ставить как понимаю ее?

просто в мануале второго архива описанная установка на версию 3.1.1 и выше....
  • 0

#50 sergey_m

    Пользователь

  • Assistent vsupport.club
  • PipPip
  • 13 сообщений
Репутация: 0
Начинающий

Отправлено 20 November 2011 - 12:30 PM

Уважаемые форумчане, подскажите пожалуйста как сделать ссылки такого вида /название-категории/название-товара.html
После установки модуля для версии 3.1 наблюдаются ссылки вида /catalog/название-категории/название-товара.html
В описании я так понимаю вместо "catalog" можно название категории чтобы было, где надо править подскажите плиз!
Спасибо!
  • 0

#51 micehide

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 359 сообщений
Репутация: 124
Мастер

Отправлено 23 November 2011 - 09:52 PM

Господа! Выкладываю обновленные файлы для модуля ЧПУ (версия ShopCMS 3.1.x). Обновление убирает всем противный /catalog/ из всех путей, который проставляется при просмотре каталога товаров. Качайте исправление из этого поста (исправлено и дополнено, устранена ошибка 404 в редакторе): Исправления модуля ЧПУ
  • 0

#52 sergey_m

    Пользователь

  • Assistent vsupport.club
  • PipPip
  • 13 сообщений
Репутация: 0
Начинающий

Отправлено 24 November 2011 - 09:03 AM

Спасибо большое micehide, действительно /catalog/ пропал после замены файлов, но есть одно но... когда в какой-либо категории пытаюсь отобразить все товары категории(show_all.html) или просто перейти на другую страничку товаров этой же категории, то выскакивает ошибка 404 Not Found ... Где надо править??? Может у меня у одного такое ?
И ещё один момент, в файле экспорта для яндекс-маркета ссылки на товары остаются прежними, то есть вида product_*** . Как сделать чтобы для маркета экспорт был с Чпу адресами? Знаю, что надо копать модуль в includes/admin/sub/modules_yandex.php там по моему формируются ссылки для маркета.Только не знаю что и где править. Может подскажите люди добрые...?
  • 0

#53 micehide

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 359 сообщений
Репутация: 124
Мастер

Отправлено 24 November 2011 - 09:40 PM

когда в какой-либо категории пытаюсь отобразить все товары категории(show_all.html) или просто перейти на другую страничку товаров этой же категории, то выскакивает ошибка 404 Not Found ... Где надо править???

- попробуйте убрать галку Псевдостатические ссылки в Админке...
  • 0

#54 sergey_m

    Пользователь

  • Assistent vsupport.club
  • PipPip
  • 13 сообщений
Репутация: 0
Начинающий

Отправлено 25 November 2011 - 08:58 AM

Убрал галочку, с генерировал страницы снова, но не помогло! Опять ошибка 404.... ! :( Может где-то допустил ошибку или версия не та... не могу понять. Версия магазина 3.1 Возможно ошибка вылезла раньше... Какие файлы за эту кухню отвечают??? Может где отредактировал не так.....
И ещё такой момент возможно это из -за того что я ставил на под домен основного сайта.То есть под домен это копия основного сайта.... ??
Ещё очень важный момент при переходе ссылка имеет вид domen.ru/catalog/название-категории_offset_12 Откуда вылез каталог не пойму...
Попробую перезалить файлы заново.......
Перезалил файлы , но не помогло (((((
  • 0

#55 Alex57

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 51 сообщений
Репутация: 31
Ассистент
  • ГородОрел

Отправлено 26 November 2011 - 03:21 PM

Еще ошибку заметил (это в дефолтном ЧПУ с /catalog/). При сортировке "Сортировать по: наименованию (возр/убыв), цене (возр/убыв), рейтингу (возр/убыв)" тоже не переключается навигация.

Например:
http://www.123.com/index.php?categoryID=3&amp;sort=name&amp;direction=ASC_offset_6
- переключаюсь на вторую страницу но остаюсь на той же, т.е. переход не осуществляется

http://www.123.com/index.php?categoryID=3&amp;sort=name&amp;direction=ASC_offset_6_offset_12
- нажал на страницу 3 - переход не осущестляется и добавил _offset_12, т.е. где-то переменная не очищается как мне сказали.

Кто поправил эту ошибку помогите мне ее поправить пожалуйста.
  • 0

#56 ruter

    Продвинутый пользователь

  • VIP
  • 334 сообщений
Репутация: 151
Мастер

Отправлено 26 November 2011 - 04:44 PM

Пишу и прошу помощи если возможно вам по поводу модуля ЧПУ, а именно:

1. Обновление ваше чтобы убрать /catalog/ - работает не корректно, т.е. не переключается навигация ошибка 404. А при наведении на ссылку допустим второй страницы отображается адрес с /catalog/. Поэтому и возникает ошибка. Подскажите что и где править если возможно.

2. Еще ошибку заметил (это в дефолтном ЧПУ с /catalog/). При сортировке "Сортировать по: наименованию (возр/убыв), цене (возр/убыв), рейтингу (возр/убыв)" тоже не переключается навигация.

Например:
http://www.test.arom....&direction=ASC - нормально все
http://www.test.arom....n=ASC_offset_6 - переключаюсь на вторую страницу но остаюсь на той же, т.е. переход не осуществляется
http://www.test.arom...set_6_offset_12 - нажал на страницу 3 - переход не осущестляется и добавил _offset_12, т.е. где-то переменная не очищается как мне сказали.
Вы поправили эту ошибку, если да помогите мне ее поправить пожалуйста.


Вот очередные проблемы этого модуля вылазят, что именно и подтверждает, что разработчики модуля только жаждут денег и забыли, что непродуманные вещи в программе вылазят бочком и сказываются на их репутации.

1. В данном первом случае автрором модуля не была решена проблема с функцией навигации. Я с этой проблемой столкнулся еще в мае и решил её. В следующем посте. Я напишу как её исправить.
2. Автором модуля также не решалась проблема переделки функций отвечающих за вывод навигации с ЧПУ при сортировке. Эта проблема не решена мною, в виду нехватки времени. Я советую пока, кто пользуется выводом сортировки в категории и поиске, просто выключить пока в Общих настройках, поскольку в ближайшее время я не смогу заняться решением этой проблемы.

Если кто появится и решит помочь, буду помогать советом, но не так часто как хотелось бы, и все из-за времени. Поскольку мне надо запустить бонусный модуль, который мы купили у разработчиков, но он не работает нормально и приходится срочно его полностью переделывать, чтобы запустить в проект.
  • 0

#57 micehide

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 359 сообщений
Репутация: 124
Мастер

Отправлено 26 November 2011 - 05:09 PM

Кто поправил эту ошибку помогите мне ее поправить пожалуйста

Смотрите тут: Глюки с пагинацией (этот пост и следующий)
- это исправляет переход по страницам после сортировки (ссылка в вашем примере явно после сортировки &sort=name).
  • 0

#58 ruter

    Продвинутый пользователь

  • VIP
  • 334 сообщений
Репутация: 151
Мастер

Отправлено 26 November 2011 - 06:44 PM

Спасибо за информацию по навигации с сортировкой

Мои изменения ниже поправляют ситуацию с ответом на первый вопрос и если у людей не переписаны все старые ссылки, а присутствуют оба вида category_...html и /категория/ то навигация корректно работает.
И при старых ссылках show_all.html и новых /категория/show_all все также работает нормально.

Возьмите из папки cpu_category_off.rar поста micehide
в url_rewriter.php

  case 'category':

// Offset
if(preg_match('|(.+)offset=(\d+)$|', $uri, $matches)) {
$uri = $matches[1];
$offset = $matches[2];
} elseif(preg_match('|(.+)show_all=yes$|', $uri, $matches)) {
$uri = $matches[1];
$offset = 1;
$showAll = 'yes';
} else
$offset = 1;


Замените на:


case 'category':

// Offset
if(preg_match('|(.+)/offset_(\d+)$|', $uri, $matches)) {
$uri = $matches[1];
$offset = $matches[2];
//echo $offset;
} elseif(preg_match('|(.+)/show_all$|', $uri, $matches)) {
$uri = $matches[1];
$offset = 1;
$showAll = 'yes';
} else
$offset = 1;


и этот код:
}  elseif (isset($_GET['categoryID'])) { // Category
//$newUrl .= FU_CATALOG_ROOT;
$newUrl .= urlencode($itemURI);

Заменить на:
} elseif (isset($_GET['categoryID'])) { // Category
//$newUrl .= FU_CATALOG_ROOT;
$newUrl .= urlencode($itemURI).'/';



в файле .htaccess из этого же архива cpu_category_off.rar

участок кода


# BEGIN Human friendly URL's
RewriteRule ^news/([^/]*)$ index.php?uri=$1&uriFor=news [L]
RewriteRule ^pages/([^/]*)$ index.php?uri=$1&uriFor=pages [L]
RewriteRule ^([^/]*)/$ index.php?uri=$1&uriFor=category [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !([^/]*)/$
RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ index.php?uri=$3&uriFor=product [L]
RewriteRule ^([^/]*)/([^/]*)$ index.php?uri=$2&uriFor=product [L]
# END Human friendly URL's



замените на код, но помните все записи которые были до установки модуля ЧПУ в файле .htaccess должны быть, а эти изменения дополнение для ЧПУ:


# BEGIN Human friendly URL's
RewriteRule ^news/([^/]*)$ index.php?uri=$1&uriFor=news [L]
RewriteRule ^pages/([^/]*)$ index.php?uri=$1&uriFor=pages [L]
RewriteRule ^([^/]*)/$ index.php?uri=$1&uriFor=category [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !([^/]*)/$
RewriteRule ^([^/]*)$ $1/ [L,R=301]
RewriteRule ^(([^/]*)/offset_([0-9]+))$ index.php?uri=$1&uriFor=category&offset=$2 [L]
RewriteRule ^([^/]*)/show_all$ index.php?uri=$1&uriFor=category&show_all=yes [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ index.php?uri=$3&uriFor=product [L]
RewriteRule ^([^/]*)/([^/]*)$ index.php?uri=$2&uriFor=product [L]
# END Human friendly URL's


Далее
в папке includes находим файл category.php с измениями модуля ЧПУ
Находим код


if (CONF_MOD_REWRITE && $url == "index.php?categoryID=".$categoryID) {
// BEGIN User Friendly URLs
global $uri;
$url = $uri ? FU_CATALOG_ROOT.'/'.$uri : "category_".$categoryID;
// END User Friendly URLs
}
return $url;
}


И меняем его на


if (CONF_MOD_REWRITE && $url == "index.php?categoryID=".$categoryID) {
// BEGIN User Friendly URLs
global $uri;
$url = $uri ? '/'.$uri : "category_".$categoryID;
// END User Friendly URLs
}
return $url;
}


В этом же файле находим код

  // BEGIN User Friendly URLs
//if($urlfarse == "category_".$categoryID) $urlflag = 1; else $urlflag = 0;
$urlflag = isset($_GET['advanced_search_in_category']) && $_GET['advanced_search_in_category'] ? 0 : 1;
// END User Friendly URLs



меняем на:


// BEGIN User Friendly URLs
$urlflag = isset($_GET['uri']) ? 0 : 1;
// END User Friendly URLs


затем из папки functions открываем файл functions.php (измененного модулем ЧПУ)

находим код:


// BEGIN Friendly URLs
function ShowNavigatormd($a, $offset, $q, $path, &$out)
{
//shows navigator [prev] 1 2 3 4 … [next]
//$a - count of elements in the array, which is being navigated
//$offset - current offset in array (showing elements [$offset ... $offset+$q])
//$q - quantity of items per page
//$path - link to the page (f.e: "index.php?categoryID=1&")

if ($a > $q) //if all elements couldn't be placed on the page

{

//[prev]
if ($offset > 0) $out .= "<a href=\"".$path."offset_".($offset - $q)."\">&lt;&lt; ".STRING_PREVIOUS.
"</a>&nbsp;&nbsp;";

//digital links
$k = $offset / $q;

//not more than 4 links to the left
$min = $k - 5;
if ($min < 0)
{
$min = 0;
}
else
{
if ($min >= 1)
{ //link on the 1st page
$out .= "<a href=\"".$path."offset_0\">1</a>&nbsp;&nbsp;";
if ($min != 1)
{
$out .= "...&nbsp;&nbsp;";
}
;
}
}

for ($i = $min; $i < $k; $i++)
{
$m = $i * $q + $q;
if ($m > $a) $m = $a;

$out .= "<a href=\"".$path."offset_".($i * $q)."\">".($i + 1)."</a>&nbsp;&nbsp;";
}

//# of current page
if (strcmp($offset, "show_all"))
{
$min = $offset + $q;
if ($min > $a) $min = $a;
$out .= "<b>".($k + 1)."</b>&nbsp;&nbsp;";
}
else
{
$min = $q;
if ($min > $a) $min = $a;
$out .= "<a href=\"".$path."offset_0\">1</a>&nbsp;&nbsp;";
}

//not more than 5 links to the right
$min = $k + 6;
if ($min > $a / $q)
{
$min = $a / $q;
}
;
for ($i = $k + 1; $i < $min; $i++)
{
$m = $i * $q + $q;
if ($m > $a) $m = $a;

$out .= "<a href=\"".$path."offset_".($i * $q)."\">".($i + 1)."</a>&nbsp;&nbsp;";
}

if (ceil($min * $q) < $a)
{ //the last link
if ($min * $q < $a - $q) $out .= "... &nbsp;&nbsp;";
$out .= "<a href=\"".$path."offset_".($a - $a % $q)."\">".(floor($a / $q) + 1)."</a>&nbsp;&nbsp;";
}

//[next]
if (strcmp($offset, "show_all"))
if ($offset < $a - $q) $out .= "<a href=\"".$path."offset_".($offset + $q)."\">".
STRING_NEXT." &gt;&gt;</a>&nbsp;&nbsp;";

//[show all]
if (strcmp($offset, "show_all")) $out .= "|&nbsp;&nbsp;<noindex><a href=\"".$path."show_all.html\" rel=\"nofollow\">".
STRING_SHOWALL."</a></noindex>";
else $out .= "|&nbsp;&nbsp;<b>".STRING_SHOWALL."</b>";

}
}
// END Friendly URLs

function GetNavigatorHtmlmd($url, $countRowOnPage = CONF_PRODUCTS_PER_PAGE, $callBackFunction, $callBackParam,
&$tableContent, &$offset, &$count, $urlflag)
{
if (isset($_GET["offset"])) $offset = (int)$_GET["offset"];
else $offset = 0;
$offset -= $offset % $countRowOnPage; //CONF_PRODUCTS_PER_PAGE;
if ($offset < 0) $offset = 0;
$count = 0;

if (!isset($_GET["show_all"])) //show 'CONF_PRODUCTS_PER_PAGE' products on this page

{
$tableContent = $callBackFunction($callBackParam, $count, array("offset" => $offset, "CountRowOnPage" =>
$countRowOnPage));
}
else //show all products

{
$tableContent = $callBackFunction($callBackParam, $count, null);
$offset = "show_all";
}

if ($urlflag) ShowNavigatormd($count, $offset, $countRowOnPage, html_spchars($url."_"), $out);
else ShowNavigator($count, $offset, $countRowOnPage, html_spchars($url."&"), $out);
return $out;
}



меняем его на:


// BEGIN Friendly URLs
function ShowNavigatormd($a, $offset, $q, $path, &$out)
{
//shows navigator [prev] 1 2 3 4 … [next]
//$a - count of elements in the array, which is being navigated
//$offset - current offset in array (showing elements [$offset ... $offset+$q])
//$q - quantity of items per page
//$path - link to the page (f.e: "index.php?categoryID=1&")

if ($a > $q) //if all elements couldn't be placed on the page

{

//[prev]
if ($offset > 0) $out .= "<a href=\"".$path."offset_".($offset - $q)."\">&lt;&lt; ".STRING_PREVIOUS.
"</a>&nbsp;&nbsp;";

//digital links
$k = $offset / $q;

//not more than 4 links to the left
$min = $k - 5;
if ($min < 0)
{
$min = 0;
}
else
{
if ($min >= 1)
{ //link on the 1st page
$out .= "<a href=\"".$path."offset_0\">1</a>&nbsp;&nbsp;";
if ($min != 1)
{
$out .= "...&nbsp;&nbsp;";
}
;
}
}

for ($i = $min; $i < $k; $i++)
{
$m = $i * $q + $q;
if ($m > $a) $m = $a;

$out .= "<a href=\"".$path."offset_".($i * $q)."\">".($i + 1)."</a>&nbsp;&nbsp;";
}

//# of current page
if (strcmp($offset, "show_all"))
{
$min = $offset + $q;
if ($min > $a) $min = $a;
$out .= "<b>".($k + 1)."</b>&nbsp;&nbsp;";
}
else
{
$min = $q;
if ($min > $a) $min = $a;
$out .= "<a href=\"".$path."offset_0\">1</a>&nbsp;&nbsp;";
}

//not more than 5 links to the right
$min = $k + 6;
if ($min > $a / $q)
{
$min = $a / $q;
}
;
for ($i = $k + 1; $i < $min; $i++)
{
$m = $i * $q + $q;
if ($m > $a) $m = $a;

$out .= "<a href=\"".$path."offset_".($i * $q)."\">".($i + 1)."</a>&nbsp;&nbsp;";
}

if (ceil($min * $q) < $a)
{ //the last link
if ($min * $q < $a - $q) $out .= "... &nbsp;&nbsp;";
$out .= "<a href=\"".$path."offset_".($a - $a % $q)."\">".(floor($a / $q) + 1)."</a>&nbsp;&nbsp;";
}

//[next]
if (strcmp($offset, "show_all"))
if ($offset < $a - $q) $out .= "<a href=\"".$path."offset_".($offset + $q)."\">".
STRING_NEXT." &gt;&gt;</a>&nbsp;&nbsp;";

//[show all]
if (strcmp($offset, "show_all")) $out .= "|&nbsp;&nbsp;<noindex><a href=\"".$path."show_all\" rel=\"nofollow\">".
STRING_SHOWALL."</a></noindex>";
else $out .= "|&nbsp;&nbsp;<font class='active'>".STRING_SHOWALL2."</font>";
}
if ($a > $q)
$out .="&nbsp;&nbsp;".$a;
else false;
}
// END Friendly URLs
function ShowNavigatormdOld($a, $offset, $q, $path, &$out)
{
//shows navigator [prev] 1 2 3 4 … [next]
//$a - count of elements in the array, which is being navigated
//$offset - current offset in array (showing elements [$offset ... $offset+$q])
//$q - quantity of items per page
//$path - link to the page (f.e: "index.php?categoryID=1&")

if ($a > $q) //if all elements couldn't be placed on the page

{

//[prev]
if ($offset > 0) $out .= "<a href=\"".$path."offset_".($offset - $q).".html\">&lt;&lt; ".STRING_PREVIOUS.
"</a>&nbsp;&nbsp;";

//digital links
$k = $offset / $q;

//not more than 4 links to the left
$min = $k - 5;
if ($min < 0)
{
$min = 0;
}
else
{
if ($min >= 1)
{ //link on the 1st page
$out .= "<a href=\"".$path."offset_0.html\">1</a>&nbsp;&nbsp;";
if ($min != 1)
{
$out .= "...&nbsp;&nbsp;";
}
;
}
}

for ($i = $min; $i < $k; $i++)
{
$m = $i * $q + $q;
if ($m > $a) $m = $a;

$out .= "<a href=\"".$path."offset_".($i * $q).".html\">".($i + 1)."</a>&nbsp;&nbsp;";
}

//# of current page
if (strcmp($offset, "show_all"))
{
$min = $offset + $q;
if ($min > $a) $min = $a;
$out .= "<b>".($k + 1)."</b>&nbsp;&nbsp;";
}
else
{
$min = $q;
if ($min > $a) $min = $a;
$out .= "<a href=\"".$path."offset_0.html\">1</a>&nbsp;&nbsp;";
}

//not more than 5 links to the right
$min = $k + 6;
if ($min > $a / $q)
{
$min = $a / $q;
}
;
for ($i = $k + 1; $i < $min; $i++)
{
$m = $i * $q + $q;
if ($m > $a) $m = $a;

$out .= "<a href=\"".$path."offset_".($i * $q).".html\">".($i + 1)."</a>&nbsp;&nbsp;";
}

if (ceil($min * $q) < $a)
{ //the last link
if ($min * $q < $a - $q) $out .= "... &nbsp;&nbsp;";
$out .= "<a href=\"".$path."offset_".($a - $a % $q).".html\">".(floor($a / $q) + 1)."</a>&nbsp;&nbsp;";
}

//[next]
if (strcmp($offset, "show_all"))
if ($offset < $a - $q) $out .= "<a href=\"".$path."offset_".($offset + $q).".html\">".
STRING_NEXT." &gt;&gt;</a>&nbsp;&nbsp;";

//[show all]
if (strcmp($offset, "show_all")) $out .= "|&nbsp;&nbsp;<noindex><a href=\"".$path."show_all.html\" rel=\"nofollow\">".
STRING_SHOWALL."</a></noindex>";
else $out .= "|&nbsp;&nbsp;<font class='active'>".STRING_SHOWALL2."</font>";
}
if ($a > $q)
$out .="&nbsp;&nbsp;".$a;
else false;
}

function GetNavigatorHtmlmd($url, $countRowOnPage = CONF_PRODUCTS_PER_PAGE, $callBackFunction, $callBackParam,
&$tableContent, &$offset, &$count, $urlflag)
{
if (isset($_GET["offset"])) $offset = (int)$_GET["offset"];
else $offset = 0;
$offset -= $offset % $countRowOnPage; //CONF_PRODUCTS_PER_PAGE;
if ($offset < 0) $offset = 0;
$count = 0;

if (!isset($_GET["show_all"])) //show 'CONF_PRODUCTS_PER_PAGE' products on this page

{
$tableContent = $callBackFunction($callBackParam, $count, array("offset" => $offset, "CountRowOnPage" =>
$countRowOnPage));
}
else //show all products

{
$tableContent = $callBackFunction($callBackParam, $count, null);
$offset = "show_all";
}

if ($urlflag == 0) { ShowNavigatormd($count, $offset, $countRowOnPage, html_spchars($url."/"), $out);}
elseif ($urlflag == 1) {ShowNavigatormdOld($count, $offset, $countRowOnPage, html_spchars($url."_"), $out);}
else { ShowNavigator($count, $offset, $countRowOnPage, html_spchars($url."&"), $out);}
return $out;
}


Здесь была сделана функция со старым навигатором у кого параллельно работают ссылки и старого типа и нового.
Теперь они будут корректно работать в обоих случаях.
URL Категории теперь будет с offset http://site.ru/категория/offset_Цифра - на постраничной навигации
и http://site.ru/категория/show_all на показе всех продуктов категории.

В .htaccess

Добавлена конструкция 301 переадресации:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !([^/]*)/$
RewriteRule ^([^/]*)$ $1/ [L,R=301]

чтобы
категории при наборе в адресной строке без слэша на конце переключались на адрес со слешем - это свойство очень
ценно для поисковых систем. Если этого не делать, то будут показываться категории со слешем и без, а это плохо,
это двойной контент, что очень отрицательно для seo.

Не забываем перед изменениями сохранять в другом месте копии файлов. После изменения загружаем на сервер и сбрасываем кеш. И затем проверям работу.

Да еще можно добавить в russian.php

define('STRING_SHOWALL2', 'показаны все');
  • 0

#59 micehide

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 359 сообщений
Репутация: 124
Мастер

Отправлено 26 November 2011 - 07:52 PM

Вот очередные проблемы этого модуля вылазят, что именно и подтверждает, что разработчики модуля только жаждут денег и забыли, что непродуманные вещи в программе вылазят бочком и сказываются на их репутации.


Вцелом, конечно, ситуация с изначальным модулем ЧПУ плачевна, но я считаю что жалеть нужно прежде всего о том, что о ЧПУ не подумали сами разработчики ShopCMS, что было бы логичнее...
  • 0

#60 ruter

    Продвинутый пользователь

  • VIP
  • 334 сообщений
Репутация: 151
Мастер

Отправлено 26 November 2011 - 08:17 PM

Вцелом, конечно, ситуация с изначальным модулем ЧПУ плачевна, но я считаю что жалеть нужно прежде всего о том, что о ЧПУ не подумали сами разработчики ShopCMS, что было бы логичнее...


Думаю разработчики магазина об этом подумали (о ЧПУ и др. не совсем же дауны о ЧПУ не думать) и для своих клиентов и за деньги у них есть отдельная модификация и с ЧПУ и во всеми наворотами. А эта сделана для всех. Совковый подход и тут существует и я это наблюдаю повсеместно.
Ситуация с версиями для всех и своих много где существует.
  • 0