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


Правила форума

Внимание!!! Если не можете скачать, пожалуйста ознакомьтесь с условиями получения доступа с файлам форума. Правила форума


Простенький модуль ЧПУ, версия 2


Сообщений в теме: 155

#41 badisoft

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

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

Отправлено 08 июня 2014 - 19:25

Update:

Цитата

Тут надо определиться - либо "хлебные крошки", либо "можно менять категорию, а ссылка на товар останется той же". Одновременно это невозможно.
Я таки переделал все в более простую сторону, когда в ЧПУ товара пишется полностью вся ссылка. Т.е. при автогенерации "на лету", генерации всех ЧПУ-ссылок "по кнопке" в админке, нажатии "Транслит" в свойствах товара будет сгенерирована полная ссылка, а не "товарная" ее часть. Например, для товара "Прод" в категориях "Кат1"->"Кат2" будет сгенерирована (при соответствующих галках) ссылка "/kat1/kat2/prod.html", а не как раньше "/prod.html", к которой потом (в зависиомости от галок) автоматически добавлялась ссылка категории.

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

В шапку выложу позже. И доделать по мелочи еще надо, и некогда оформлять.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#42 webvertex

    Новичок

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

Отправлено 10 июня 2014 - 22:49

Уважаемый Badisoft! Подскажите, пожалуйста, с помощью какого модуля Вы организовали у себя на тестовом сайте альтернативный вывод обсуждений товаров? Дело в том, что при установке модуля ЧПУ версии 2, все прекрасно работает, Вам большой респект! Но на страницах полного описания товара с ЧПУ ссылкой site.ru//valik-bebi-bolster.html мы видим ссылку "отзывы" (site.ru/index.php?productID=3&discuss=yes). Перейдя туда видим сверху ссылку "Вернуться на страницу товара" и это site.ru/index.php?productID=3, а не наша ЧПУ ссылка site.ru//valik-bebi-bolster.html. В результате в индекс поисковиков попадают дубли страниц. У вас же на тестовом сайте есть панелька - "Полные хар-ки Краткие хар-ки Обсудить (1) Есть вопрос?". Здесь ссылка "Обсудить (1)" не переводит на другую страницу, т.е. проблемы с ЧПУ нет. Какой модуль за это отвечает? Я не нашел его на форуме.

#43 badisoft

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

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

Отправлено 11 июня 2014 - 09:14

Просмотр сообщенияwebvertex сказал:

Какой модуль за это отвечает? Я не нашел его на форуме.
http://vsupport.ru/t...BE%D0%B5%D0%BE/

Но сейчас (безотносительно обсуждений) я бы делал табы уже совсем по другому, намного проще, без jquery-ui и даже jquery.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#44 badisoft

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

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

Отправлено 11 июня 2014 - 21:53

Просмотр сообщенияbadisoft сказал:

В шапку выложу позже. И доделать по мелочи еще надо, и некогда оформлять.
Чую, не скоро я соберусь выложить в шапку. Так что вот архив с новой версией.
Кроме исправления ошибок (и добавления новых) добавлена работа с макросами в редиректах.
Появились две новых кнопки - Макросы/Преобразовать и Макросы/Откатить назад.
Сделаны для того, чтобы:
1. задаем в редиректах макрос. Откуда - "&otkuda" (& - признак, что это макрос). Куда - "kuda".
2. жмем кнопку "Преобразовать".
При этом:
1. во всех ЧПУ-ссылках вхождение "otkuda" заменится на "kuda".
2. при обращении по старой ссылке с "otkuda" будет сделан редирект-301 на ссылку с "kuda".

Полезно, когда надо перейти со старой системы ЧПУ-ссылок на новую и много единообразных ссылок. Для единичной ссылки, естественно, проще использовать обычный редирект в той же таблице, без & в "Откуда".

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

Прикрепленные файлы


http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#45 badisoft

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

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

Отправлено 07 августа 2014 - 21:16

Хм.. Наблюдаю странное.
В index.php прописано
require_once "core/includes/database/mysql.php";

затем ниже по коду
require_once 'index_old.php';

в котором, в свою очередь, снова есть
include("core/includes/database/mysql.php");

и, как я сейчас понимаю, это не может не вызывать ошибки, т.к. инклюдом повторно загружается файл с функциями, которые уже есть, загружены ранее, путем require. Но все это совершенно нормально работает на всех моих сайтах и куче не моих, как будто там не include, а include_once.

А сейчас пытаюсь установить этот ЧПУ на хостинг с PHP 5.3.3 и пока не закомментируешь повторный include в index_old.php (либо не заменишь его на include_once или require_once) - не работает. Причем еще и без сообщений в error-log.

Чего я такого (традиционно очевидного) опять не вижу? Пока мои подозрения на версию PHP, т.е. что в 5.3.3 что-то изменилось относительно предыдущих. Предыдущие - у меня - это 5.1.6 и 5.2.27.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#46 NEViL

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

  • Download User
  • PipPipPip
  • 42 сообщений
Репутация: 4
Начинающий

Отправлено 15 августа 2014 - 14:02

Подскажите пожалуйста в каком файле допустил ошибку при установке.... галочка Добавлять ЧПУ категории к ЧПУ товара снята, а ссылка на товар всё равно имеет вид /кат1/кат2/кат3/tovar-123.html ! Удаляю ссылки, генерирую заново - не помогает

Хотя "Хлебные крошки" в категориях работают и ссылки на подкатегории меняются

#47 badisoft

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

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

Отправлено 15 августа 2014 - 14:19

Насколько я помню, надо:
1. снять галку 2. сохранить (обязательно!) 3. удалить ссылки 4. создать ссылки.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#48 NEViL

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

  • Download User
  • PipPipPip
  • 42 сообщений
Репутация: 4
Начинающий

Отправлено 15 августа 2014 - 14:23

Просмотр сообщенияbadisoft (15 августа 2014 - 14:19) писал:

Насколько я помню, надо:
1. снять галку 2. сохранить (обязательно!) 3. удалить ссылки 4. создать ссылки.

Так и делаю... удаляться удаляются.... Но когда создаю, опять /кат1/кат2/кат3/tovar-123.html . И перепроверил по порядку установку....

#49 badisoft

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

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

Отправлено 15 августа 2014 - 15:38

Значит, где-то ошибка. У меня :).

Цитата

галочка Добавлять ЧПУ категории к ЧПУ товара снята, а ссылка на товар всё равно имеет вид /кат1/кат2/кат3/tovar-123.html ! Удаляю ссылки, генерирую заново - не помогает
В файле modules_friendly_cpu.php строку
db_query("INSERT ".DB_PRFX."cpu SET type=1, ID=".$row['productID'].", cpu='".(CONF_FRIENDLY_CPU_CATCAT?cpu_cats($row['categoryID']):'/'.cpu_translit($row['cname']))."/".cpu_translit($row['name']).(CONF_FRIENDLY_CPU_PRODID?"-".$row['productID']:'').".html'");

замените на
db_query("INSERT ".DB_PRFX."cpu SET type=1, ID=".$row['productID'].", cpu='".(CONF_FRIENDLY_CPU_CATPROD?(CONF_FRIENDLY_CPU_CATCAT?cpu_cats($row['categoryID']):'/'.cpu_translit($row['cname'])):"")."/".cpu_translit($row['name']).(CONF_FRIENDLY_CPU_PRODID?"-".$row['productID']:'').".html'");


http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#50 ivrndesign

    Новичок

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

Отправлено 23 сентября 2014 - 21:17

Может кому пригодится. Столкнулся с тем же "белым экраном"
Скачал топиком выше архив.

Нужно
1. Удалить в index.php строчку
require_once "core/includes/database/".DBMS.".php";

2. Из файла index_old.php скопировать в index.php
include("core/includes/database/mysql.php");

3. Удалить из index_old.php строку
include("core/includes/database/mysql.php");

То есть проблема была как описывал автор чуть выше в подключении mysql.php

Короче заработало вроде все. Буду тестировать.

#51 badisoft

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

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

Отправлено 23 сентября 2014 - 21:33

Просмотр сообщенияivrndesign сказал:

Короче заработало вроде все. Буду тестировать.
Лучше из этого - последнего на текущий момент - архива.
Что исправлено в админке (modules_friendly_cpu.php) я уже не помню, а в sitemap.php исправлено /news/news/novost_na_translinte.html, т.к. должно быть /news/novoct...

Прикрепленные файлы


http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#52 ivrndesign

    Новичок

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

Отправлено 24 сентября 2014 - 07:58

Просмотр сообщенияbadisoft (23 сентября 2014 - 21:33) писал:

Просмотр сообщенияivrndesign сказал:

Короче заработало вроде все. Буду тестировать.
Лучше из этого - последнего на текущий момент - архива.
Что исправлено в админке (modules_friendly_cpu.php) я уже не помню, а в sitemap.php исправлено /news/news/novost_na_translinte.html, т.к. должно быть /news/novoct...

Спасибо большое.
Кстати, не совсем понял, как настроить, чтобы по старым ссылкам выдавал 301 редирект? А то сейчас проверяю, по старой ссылке идет 500 ошибка.
Или оно должно автоматом работать и у меня траблы на хостинге какие-то?

Вот собственно ответ:
HTTP/1.1 500 Internal Server Error
Server: nginx admin
Date: Wed, 24 Sep 2014 07:35:56 GMT
Content-Type: text/html
Content-Length: 0
Connection: keep-alive
X-Powered-By: PHP/5.2.17


#53 badisoft

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

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

Отправлено 24 сентября 2014 - 14:22

Цитата

Кстати, не совсем понял, как настроить, чтобы по старым ссылкам выдавал 301 редирект? А то сейчас проверяю, по старой ссылке идет 500 ошибка.
Или оно должно автоматом работать
Не надо ничего настраивать. Должно работать автоматом. Если, конечно, старые ссылки в виде /category_xxx.html и /product_yyy.html. В коде index.php это место откомментировано.

Или речь о каких-то других "старых ссылках"?
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#54 ivrndesign

    Новичок

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

Отправлено 24 сентября 2014 - 14:46

Да, старые ссылки именно в таких форматах

http://test.autolide...roduct_284.html
http://test.autolide...ategory_97.html

#55 badisoft

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

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

Отправлено 24 сентября 2014 - 16:11

Цитата

А то сейчас проверяю, по старой ссылке идет 500 ошибка.
Ну так смотрите логи нгинкса, там обычно четко написано, в чем ошибка. Скорее всего, либо какой-то функции нет, либо повторное определение функции.

В начале index.php закомментирована строка
#require_once "core/functions/functions.php";

попробуйте ее раскомментировать.

В случае какой-либо ошибки в запросах используется функция xEscSQL, которая находится в functions.php. В случае нормальной работы ни она, ни какая-либо другая функция из functions.php в index.php не используются, поэтому штатно строка закомментирована.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#56 ivrndesign

    Новичок

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

Отправлено 24 сентября 2014 - 16:36

Просмотр сообщенияbadisoft (24 сентября 2014 - 16:11) писал:

Цитата

А то сейчас проверяю, по старой ссылке идет 500 ошибка.
Ну так смотрите логи нгинкса, там обычно четко написано, в чем ошибка. Скорее всего, либо какой-то функции нет, либо повторное определение функции.

В начале index.php закомментирована строка
#require_once "core/functions/functions.php";

попробуйте ее раскомментировать.

В случае какой-либо ошибки в запросах используется функция xEscSQL, которая находится в functions.php. В случае нормальной работы ни она, ни какая-либо другая функция из functions.php в index.php не используются, поэтому штатно строка закомментирована.

Спасибо.

Раскоментировал - вообще не работает. "Белый экран"
Ситуация сейчас такая. Сайт работает и ЧПУ работает. Все редактируеться и обновляеться.
Проблема только при заходе по старым ссылкам.

Поковыряюсь в логах.

Кстати да.
Call to undefined function  xescsql() in /home/autolide/public_html/test/core/includes/database/mysql.php on line 59

при раскомментированном function.php выдает такое
[24-Sep-2014 14:49:05] PHP Warning:  mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/autolide/public_html/test/core/includes/database/mysql.php on line 213


#57 ivrndesign

    Новичок

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

Отправлено 24 сентября 2014 - 18:24

Я так понимаю, что если дергается функция xEscSQL, то есть какой-то трабл с БД?

А теперь, пожалуйста, подскажите ничего ли я не поломал.
(Я просто не большой мастер в программинге).

Итак, есть функция, которая дергает xEscSQL в файле mysql.php
function db_query($s) //database query
{
	    global $sc_4, $sc_8, $gmc;
	    if (isset($gmc) && $gmc == 1) $sc_81 = getmicrotime();
	    // $scriptv = getmicrotime();
	    $res = array();
	    $res["resource"] = mysql_query($s);
	    /*
	    $scriptp = getmicrotime();
	    $rom = $scriptp-$scriptv;
	    print $rom." - ".$s."<br>";
	    */
  
		    if(!$res['resource']){
			    $out = "ERROR: ".mysql_errno().":".mysql_error()."\nSql: ".$s."\nLink: ".$_SERVER["REQUEST_URI"]."\nDate: ".date("d.m.y - H:i:s")."\nDump:\n";
			    ob_start();
			    var_dump($_GET);
			    var_dump($_POST);
			    $tmpa=ob_get_contents();
			    ob_end_clean();
			    $out .= $tmpa;
			    mysql_query("insert into ".MYSQL_ERROR_LOG_TABLE." (errors, tstamp) VALUES ('".xEscSQL(ToText($out))."', NOW())");
			    $ecount = mysql_fetch_row(mysql_query("select count(*) from ".MYSQL_ERROR_LOG_TABLE));
			    $ecount = $ecount[0] - 50;
			    if($ecount > 0) mysql_query("delete from ".MYSQL_ERROR_LOG_TABLE." ORDER BY tstamp ASC LIMIT ".$ecount);
			    // die('Wrong database query!');
		    }
	  
	    $res["columns"]=array();
	    $column_index = 0;
	    while($xwer = @mysql_fetch_field($res["resource"])){
			    $res["columns"][$xwer->name] = $column_index;
			    $column_index++;
	    }
	    if (isset($gmc) && $gmc == 1) {
		    $sc_82 = getmicrotime();
		    $sc_4++;
		    $sc_8 = $sc_8+$sc_82-$sc_81;
	    }
	    return $res;
}

В ней я закомментировал кусок:
   if(!$res['resource']){
			    $out = "ERROR: ".mysql_errno().":".mysql_error()."\nSql: ".$s."\nLink: ".$_SERVER["REQUEST_URI"]."\nDate: ".date("d.m.y - H:i:s")."\nDump:\n";
			    ob_start();
			    var_dump($_GET);
			    var_dump($_POST);
			    $tmpa=ob_get_contents();
			    ob_end_clean();
			    $out .= $tmpa;
			    mysql_query("insert into ".MYSQL_ERROR_LOG_TABLE." (errors, tstamp) VALUES ('".xEscSQL(ToText($out))."', NOW())");
			    $ecount = mysql_fetch_row(mysql_query("select count(*) from ".MYSQL_ERROR_LOG_TABLE));
			    $ecount = $ecount[0] - 50;
			    if($ecount > 0) mysql_query("delete from ".MYSQL_ERROR_LOG_TABLE." ORDER BY tstamp ASC LIMIT ".$ecount);
			    // die('Wrong database query!');
		    }

И у меня все заработало:

Вот и ответ получился красивый
HTTP/1.1 301 Moved Permanently
Server: nginx admin
Date: Wed, 24 Sep 2014 16:28:47 GMT
Content-Type: text/html; charset=windows-1251
Connection: keep-alive
X-Powered-By: PHP/5.2.17
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=58f5c003e6b332c3ddeb15f001febc75; path=/
Location: /motornoe-maslo-mopar-atf--4.html
Last-Modified: Wed, 24 Sep 2014 16:28:46 GMT

или

This website has a 301 Redirect to:
/motornoe-maslo-mopar-atf--4.html
This redirect is Search Engine Friendly.


#58 badisoft

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

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

Отправлено 24 сентября 2014 - 18:31

Просмотр сообщенияivrndesign сказал:

Я так понимаю, что если дергается функция xEscSQL, то есть какой-то трабл с БД?
В общем случае если есть трабл с запросом, т.е. запрос ошибочен.
Она используется при записи в таблицу ошибок в функции db_query в файле mysql.php в случае, если функция mysql_query результатом запроса вернула false.

PS. Ну а дальше mysql_fetch_assoc(false), естественно, выдает ошибку.
Саму ошибку Вы можете увидет в Админка->Отчеты->Статистика ошибок.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#59 ivrndesign

    Новичок

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

Отправлено 24 сентября 2014 - 18:34

А то, что убрал секцию в которой эта функция используеться мне чем-то грозит? Или только тем, что я не буду знать деталей ошибок, если что

#60 badisoft

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

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

Отправлено 24 сентября 2014 - 18:41

Просмотр сообщенияivrndesign сказал:

А то, что убрал секцию в которой эта функция используеться мне чем-то грозит?
Да ничем. Примерно как в автомобиле - оторвал датчики износа тормозов и езди счастливо :).

У Вас возникает какая-то ошибка. Если дать функции записать эту ошибку в лог, то можно ее посмотреть и исправить. Почему бы этого не сделать?
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)