Простенький модуль ЧПУ, версия 2
#121
Отправлено 11 October 2015 - 02:46 PM
При нажатии на любую ссылку, в адресной строке Firefox'а адрес появляется (но не ЧПУ-шный), но переход совершается все время на главную. Насколько понимаю, что-то с редиректами. Но вроде сделано все, как в описании... Хотя бывает и мелочь какую-то упустишь, и все сломалось.
А может и в коде напутал. Сначала вообще не догонял для чего файлик addon.php (в описании про него ни слова). Страницы примеров отличались от моих, и таблицы не создавались.
Сейчас таблица создана, вроде все, как положено. Но по ссылкам на сайте не перейти.
Да, еще при переходе на страницу новостей ломается дизайн. Т.е. не видно вообще элементов (картинок), только текст и т.п.
P.S. стоит xml_sitemap_micehide. Судя по прочитанному в теме, надо переделывать ЧПУ под этот сайтмап ?.. Отсюда вопрос, как переделать (или кто поможет за деньги), или как удалить тот (если этот, встроенный, ничем особо не отличается) ?
#122
Отправлено 06 November 2015 - 06:48 PM
#123
Отправлено 06 November 2015 - 07:16 PM
Надо переделывать сайтмап под ЧПУ. Под любой. Сайтмап создает файл со ссылками, которые в штатном виде и в ЧПУ-виде отличаются. Соответственно, если устанавливается ЧПУ (повторюсь, любой), то написанный "под стандарт" сайтмап надо переделывать, чтобы он выводил не штатные ссылки, а ЧПУ-шные.Судя по прочитанному в теме, надо переделывать ЧПУ под этот сайтмап ?.
переписать:Подскажите пожалуйста, как убрать окончание .html
1. index.php (автосоздание ЧПУ-ссылок на лету)
2. modules_friendly_cpu.php (генерация ЧПУ-ссылок в админке)
3. вставку в admin.js (автотранслит названия в ссылку в настройке категории/товара/страницы/новости)
Врядли это кто-то станет делать ради любви к исскуству.
#125
Отправлено 07 November 2015 - 12:01 PM
Имелось в виду "врядли кто будет переделывать и выкладывать правки просто из любви к искусству".это не любовь к искусству,
Там потребуется достаточно много переделок, не на пять минут.
Да ну? Всех сразу?это последние рекомендации поисковых систем.
#126
Отправлено 07 November 2015 - 01:14 PM
"всех сразу" у нас только дваДа ну? Всех сразу?
Дмитрий, есть еще один вопрос: страница, которая отображается при неправильном адресе, воспринимается поисковиками как ошибка 404? И можно ли сделать вместо нее обычную (свою красивую) страницу? если да, то что и где можно менять?
#127
Отправлено 07 November 2015 - 01:27 PM
В поиске забанили ?И можно ли сделать вместо нее обычную (свою красивую) страницу? если да, то что и где можно менять?
http://vsupport.club...__fromsearch__1
#128
Отправлено 07 November 2015 - 03:28 PM
Я не помню, какая реализация функции Error404() выложена в этой теме, а сейчас у меня такая (находится в index.php) :Дмитрий, есть еще один вопрос: страница, которая отображается при неправильном адресе, воспринимается поисковиками как ошибка 404? И можно ли сделать вместо нее обычную (свою красивую) страницу? если да, то что и где можно менять?
function Error404 ()
{
header("HTTP/1.0 404 Not Found");
header("HTTP/1.1 404 Not Found");
header("Status: 404 Not Found");
header("Content-Type: text/html;charset=windows-1251");
# die(file_get_contents('http://'.$_SERVER['SERVER_NAME'].'/Error-404.html')); // если есть спецстраница для ошибки
$timer = 10; // время в секундах, после которого произойдет перенаправление на главную страницу
echo '<html>';
echo '<head>';
echo '<title>Страница не найдена</title>';
echo '<style>';
echo 'body { font-family: Tahoma, Verdana, Arial, sans-serif; }';
echo '</style>';
echo '<script type="text/javascript">';
echo 'setTimeout(\'location.replace("http://'.$_SERVER['SERVER_NAME'].'")\', '.($timer*1000).');';
echo '</script>';
echo '</head>';
echo '<body bgcolor="white" text="black">';
echo '<table width="100%" height="100%">';
echo '<tr>';
echo '<td align="center" valign="middle">';
echo 'Ошибка!<br/><br/>';
echo 'Страница <b>'.$_GET['cpu'].'</b> не найдена на <b>'.$_SERVER['SERVER_NAME'].'</b><br/><br/>';
echo "Через $timer секунд вы будете перенаправлены на главную страницу сайта<br/><br/>";
echo '<a href="http://'.$_SERVER['SERVER_NAME'].'">Вернуться на главную страницу</a>';
echo '</td>';
echo '</tr>';
echo '</table>';
echo '</body>';
echo '</html>';
}
Закомментированная строка относится как раз к дополнению http://vsupport.club...dpost__p__32719
PS. Увы, многие провайдеры запрещают allow_url_fopen и ровно то же самое действие надо делать не через функцию file_get_contents(), а через функции CURL (примерно три строки вместо вызова file_get_contents). Оно не сложно, примеров в интернете полно. Это дополнение я под CURL не переделывал, надобности не было, т.к. у меня allow_url_fopen разрешено, у заказчика дополнения тоже.
PPS. По header очевидно, что ошибочная страница возвращает код 404, как и нужно .
Как-то так:ровно то же самое действие надо делать не через функцию file_get_contents(), а через функции CURL (примерно три строки вместо вызова file_get_contents).
function url_get_contents($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$res = curl_exec($ch);
curl_close($ch);
return $res;
}
#129
Отправлено 09 November 2015 - 08:43 AM
Я не помню, какая реализация функции Error404() выложена в этой теме, а сейчас у меня такая (находится в index.php) : function Error404 () { header("HTTP/1.0 404 Not Found"); header("HTTP/1.1 404 Not Found"); header("Status: 404 Not Found"); header("Content-Type: text/html;charset=windows-1251"); # die(file_get_contents('http://'.$_SERVER['SERVER_NAME'].'/Error-404.html')); // если есть спецстраница для ошибки $timer = 10; // время в секундах, после которого произойдет перенаправление на главную страницу echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ' '; echo 'Ошибка!
'; echo 'Страница '.$_GET['cpu'].' не найдена на '.$_SERVER['SERVER_NAME'].'
'; echo "Через $timer секунд вы будете перенаправлены на главную страницу сайта
"; echo 'Вернуться на главную страницу'; echo '
'; echo ''; echo ''; } Закомментированная строка относится как раз к дополнению http://vsupport.club...dpost__p__32719
Спасибо, Дмитрий. Это сработало.
#130
Отправлено 07 March 2016 - 08:52 PM
#131
Отправлено 08 March 2016 - 12:22 PM
Хмм.. Действительно. Видимо, этот файл появился заметно позднее написания основы модуля.В инструкции не сказано, что файл addon.php из архива, надо скопировать в core/includes/admin
Исправил в шапке.
#132
Отправлено 24 March 2016 - 10:06 AM
1. в админке вместо названия модуля каракули - Модуль ЧПУ
2. самое важное - товары перестали добавляться в корзину.
Подскажите что делать.
Заранее благодарен!
#133
Отправлено 24 March 2016 - 10:29 AM
Если остальные (штатные) пункты админки нормальные (русскоязычные), значит когда вставляли нужную строку в файл default.tpl.html либо menu.tpl.html произошло перекодирование Win1251-текста в UTF8.1. в админке вместо названия модуля каракули - Модуль ЧПУ
Не знаю, какой редактор так делает, но пару раз сталкивался.
ЧПУ никак не влияет ни на добавление товаров в корзину, ни на ее содержимое.2. самое важное - товары перестали добавляться в корзину.
Добавление товара при AJAX-корзине (обычно используется именно она) происходит путем AJAX-запроса, который никак не меняется при установке модуля ЧПУ.
Дать мне ftp-доступ к сайту.Подскажите что делать.
#134
Отправлено 24 March 2016 - 01:38 PM
выслал доступ в почтуЕсли остальные (штатные) пункты админки нормальные (русскоязычные), значит когда вставляли нужную строку в файл default.tpl.html либо menu.tpl.html произошло перекодирование Win1251-текста в UTF8.1. в админке вместо названия модуля каракули - Модуль ЧПУ
Не знаю, какой редактор так делает, но пару раз сталкивался.ЧПУ никак не влияет ни на добавление товаров в корзину, ни на ее содержимое.2. самое важное - товары перестали добавляться в корзину.
Добавление товара при AJAX-корзине (обычно используется именно она) происходит путем AJAX-запроса, который никак не меняется при установке модуля ЧПУ.Дать мне ftp-доступ к сайту.Подскажите что делать.
#135
Отправлено 24 March 2016 - 02:01 PM
Так и есть. В menu.tpl.html.Если остальные (штатные) пункты админки нормальные (русскоязычные), значит когда вставляли нужную строку в файл default.tpl.html либо menu.tpl.html произошло перекодирование Win1251-текста в UTF8.
Насколько я вижу, при работе авторизованного клиента, когда корзина сохраняется во временной SQL-таблице SHOPPING_CARTS_TABLE все нормально. А вот при работе не авторизованного, когда корзина хранится в массиве $_SESSION она иногда теряется при перезагрузке страницы. Иногда не теряется. У меня содержимое корзины терялось примерно два раза из трех. Явно случайным образом теряется сессия. Причем я отключил ЧПУ (убрал модуль) - картина ровно та же.ЧПУ никак не влияет ни на добавление товаров в корзину, ни на ее содержимое.
Добавление товара при AJAX-корзине (обычно используется именно она) происходит путем AJAX-запроса, который никак не меняется при установке модуля ЧПУ.
PS. Случайность потери сессии очень сильно напоминает механизм "сборки мусора", т.е. удаления устаревших сессий. Он как раз, чтобы не жрать лишний ресурс, выполняется случайно-вероятностным образом, т.е. вовсе не каждый раз при перезагрузке страницы. Поставил в "Общих настройках" время хранения сессии 10 часов (было один час) - корзина перестала пропадать. Похоже, где-то что-то не так с часами и часовыми поясами.
#136
Отправлено 24 March 2016 - 02:26 PM
потому пробема не ушла
вот ранее подобная проблема возникала, описанная в этом же топике
http://vsupport.club...dpost__p__32675
#137
Отправлено 24 March 2016 - 02:49 PM
Там совершенно другая проблема.вот ранее подобная проблема возникала, описанная в этом же топике
Работа AJAX-корзины выглядит следующим образом:
1. рисуем окошко о добавлении товара.
2. передаем на сервер AJAX-запрос с указанием товара, его характеристик и количества.
3. получаем ответ от сервера, сколько товара теперь в корзине и на какую сумму.
4. перерисовываем индикатор корзины новым количеством и суммой.
5. перерисовываем окошко фразой о том, что товар добавлен и через полторы, чтоли, секунды это окошко убираем.
Так вот там проблема только в том, что не выполняется (4 и 5). Хотя товар в корзину добавляется, что и видно после перезагрузки страницы.
У Вас другая проблема. Товар добавляется в корзину и (4,5) вполне выполняются. Т.е. сервер обратно возвращает информацию, что теперь в корзине стало столько-то товара на такую-то сумму. До первой перезагрузки страницы. После чего случайным образом корзина очищается. Или не очищается. Чаще первое. И происходит это только когда клиент не зарегистрирован, т.е. для хранения содержимого корзины используются переменные сессии.
PS. Эта проблема не имеет отношения к ЧПУ (повторюсь - без ЧПУ ровно то же самое) и тут мы ее обсуждаем только потому, что она была замечена после установки ЧПУ. Более того, эта проблема (пропадание корзины) не так уж часто, но периодически вылезает. Я подозреваю, что это какие-то тараканы со временем и часовым поясом сервера, т.е. сервер считает сессию сразу же устаревшей и убивает ее, но стопроцентной уверенности в этой причине у меня нет.
PPS. Вторым довольно важным моментом является версия PHP.
У Вас она 5.3.29. Попробуйте поставить рекомендуемую 5.2.*.
Там были какие-то изменения с функциями и механизмом сессий в 5.3, но я не помню.
#138
Отправлено 24 March 2016 - 10:29 PM
Как можете прокомментировать?
#139
Отправлено 25 March 2016 - 01:34 PM
1. Модулю ЧПУ совершенно безразлично, зарегистрирован клиент или нет. Нет в модуле никаких ветвлений логики "если зарегистрирован, то выполняем это, а если нет, то другое". Соответственно, если у зарегистрированного клиента с корзиной все хорошо, а проблемы только у не зарегистрированного (где корзина хранится в переменных сессии), то дело тут не в модуле ЧПУ, а в потере сессии. Либо в AJAX-запросе при добавлении товара, либо при перезагрузке страницы.Как можете прокомментировать?
2. Вот тут - test.badisoft.ru - временно лежит клон Вашего сайта. Там и ЧПУ поставлен, и даже время хранения сессии всего один час, однако все работает и сессия не теряется.
PS. У ж что-что, а этот модуль успешно поставлен лично мной на ДЕСЯТКИ сайтов. А стоит, наверняка, на куда большем количестве.
#140
Отправлено 12 April 2016 - 08:31 PM
Ух, какая сказочная и офигительная задачка была!У Вас другая проблема. Товар добавляется в корзину и (4,5) вполне выполняются. Т.е. сервер обратно возвращает информацию, что теперь в корзине стало столько-то товара на такую-то сумму. До первой перезагрузки страницы. После чего случайным образом корзина очищается. Или не очищается. Чаще первое. И происходит это только когда клиент не зарегистрирован, т.е. для хранения содержимого корзины используются переменные сессии.
И ведь действительно проблема проявлялась ТОЛЬКО при ЧПУ.
Проблема: жмем "купить", видим в аякс-корзине появление товара, перезагружаем страницу, в аякс-корзине пусто, в корзине тоже.
Причем проблема случайна, т.е. может случиться, а может и нет.
Поиск осложнялся тем, что я хоть и создал для удобства клон сайта клиента у себя на сервере, но когда находил время заняться - корзина упорно не хотела глючить.
В общем, проблему давала редчайшая совокупность факторов:
1. у меня в ЧПУ-модуле сделано так, что ссылка (если она не файл и не заканчивается на '.html') должна иметь в конце слэш. Если не имеет, то происходит редирект-301 на такую же ссылку, но со слэшем в конце. Кстати, до сих пор не понимаю надобности в таком редиректе.
2. Вывод штатного и ОЧЕНЬ редко меняемого всплывающего окошечка "товар добавлен в корзину" заменен на нечто другое, которое кроме остальных отличий пытается подгрузить файл /images/loader.gif
3. (главное!) файла /images/loader.gif на сервере нет, ну вот так получилось, т.е. для модуля ЧПУ этот запрос не файл, который надо отдать, а ссылка, которую надо обработать. Она и обрабатывается путем редиректа на /images/loader.gif/ (в конце появляется слэш).
4. Т.е. в рамках одной сессии сервер получает практически одновременно сразу два запроса - запрос на добавление товара и запрос на вывод страницы /images/loader.gif/. Причем каждый раз с чуть разным временнЫм смещением (миллисекунды).
5. По любому при обращении к серверу клиента без регистрации происходит какая-то работа с массивом $_SESSION. Я не стал дальше копаться, добираясь до совсем уж конкретики. Явно параллельно-одновременная работа с $_SESSION ни к чему хорошему не приведет. Как, собственно, и с любым другим массивом. Т.е. либо повезет, либо нет. В зависимости от того самого "смещения в миллисекунды" из предыдущего пункта. Что и получалось.
Решение проще простого - если меняем функцию индикации аякс-загрузки в корзину, то надо бы озадачиться обязательным наличием всех используемых в новой функции ресурсов (обычно картинок) на сервере. Это не единственное решение, но самое правильное.