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


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


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

#41 badisoft

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

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

Отправлено 08 June 2014 - 07:25 PM

Update:

Тут надо определиться - либо "хлебные крошки", либо "можно менять категорию, а ссылка на товар останется той же". Одновременно это невозможно.

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

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

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

#42 webvertex

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

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

Отправлено 10 June 2014 - 10:49 PM

Уважаемый 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)" не переводит на другую страницу, т.е. проблемы с ЧПУ нет. Какой модуль за это отвечает? Я не нашел его на форуме.
  • 0

#43 badisoft

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

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

Отправлено 11 June 2014 - 09:14 AM

Какой модуль за это отвечает? Я не нашел его на форуме.

http://vsupport.club/topic/2223-%D1%82%D0%B0%D0%B1%D1%8B-%D0%B2-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D0%BC-%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B8-%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0-%D0%BA%D1%80%D0%B0%D1%82%D0%BA%D0%BE%D0%B5%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D0%B5%D0%BE/

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

#44 badisoft

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

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

Отправлено 11 June 2014 - 09:53 PM

В шапку выложу позже. И доделать по мелочи еще надо, и некогда оформлять.

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

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

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

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


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

#45 badisoft

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

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

Отправлено 07 August 2014 - 09:16 PM

Хм.. Наблюдаю странное.
В 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.
  • 1
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#46 NEViL

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

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

Отправлено 15 August 2014 - 02:02 PM

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

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

#47 badisoft

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

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

Отправлено 15 August 2014 - 02:19 PM

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

#48 NEViL

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

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

Отправлено 15 August 2014 - 02:23 PM

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


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

#49 badisoft

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

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

Отправлено 15 August 2014 - 03:38 PM

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

галочка Добавлять ЧПУ категории к ЧПУ товара снята, а ссылка на товар всё равно имеет вид /кат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'");

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

#50 ivrndesign

    Новичок

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

Отправлено 23 September 2014 - 09:17 PM

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

Нужно
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

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

#51 badisoft

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

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

Отправлено 23 September 2014 - 09:33 PM

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

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

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


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

#52 ivrndesign

    Новичок

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

Отправлено 24 September 2014 - 07:58 AM

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

Лучше из этого - последнего на текущий момент - архива.
Что исправлено в админке (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

  • 0

#53 badisoft

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

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

Отправлено 24 September 2014 - 02:22 PM

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

Не надо ничего настраивать. Должно работать автоматом. Если, конечно, старые ссылки в виде /category_xxx.html и /product_yyy.html. В коде index.php это место откомментировано.

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

#54 ivrndesign

    Новичок

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

Отправлено 24 September 2014 - 02:46 PM

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

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

#55 badisoft

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

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

Отправлено 24 September 2014 - 04:11 PM

А то сейчас проверяю, по старой ссылке идет 500 ошибка.

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

В начале index.php закомментирована строка

#require_once "core/functions/functions.php";

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

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

#56 ivrndesign

    Новичок

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

Отправлено 24 September 2014 - 04:36 PM

А то сейчас проверяю, по старой ссылке идет 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

  • 0

#57 ivrndesign

    Новичок

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

Отправлено 24 September 2014 - 06:24 PM

Я так понимаю, что если дергается функция 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.

  • 0

#58 badisoft

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

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

Отправлено 24 September 2014 - 06:31 PM

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

В общем случае если есть трабл с запросом, т.е. запрос ошибочен.
Она используется при записи в таблицу ошибок в функции db_query в файле mysql.php в случае, если функция mysql_query результатом запроса вернула false.

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

#59 ivrndesign

    Новичок

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

Отправлено 24 September 2014 - 06:34 PM

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

#60 badisoft

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

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

Отправлено 24 September 2014 - 06:41 PM

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

Да ничем. Примерно как в автомобиле - оторвал датчики износа тормозов и езди счастливо :).

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