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


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


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

#121 hedhedhed

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

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

Отправлено 11 October 2015 - 02:46 PM

Помогите, плз, кто-нибудь.
При нажатии на любую ссылку, в адресной строке Firefox'а адрес появляется (но не ЧПУ-шный), но переход совершается все время на главную. Насколько понимаю, что-то с редиректами. Но вроде сделано все, как в описании... :( Хотя бывает и мелочь какую-то упустишь, и все сломалось. :wacko:

А может и в коде напутал. Сначала вообще не догонял для чего файлик addon.php (в описании про него ни слова). Страницы примеров отличались от моих, и таблицы не создавались. :)
Сейчас таблица создана, вроде все, как положено. Но по ссылкам на сайте не перейти.



Да, еще при переходе на страницу новостей ломается дизайн. Т.е. не видно вообще элементов (картинок), только текст и т.п.

P.S. стоит xml_sitemap_micehide. Судя по прочитанному в теме, надо переделывать ЧПУ под этот сайтмап ?.. Отсюда вопрос, как переделать (или кто поможет за деньги), или как удалить тот (если этот, встроенный, ничем особо не отличается) ?
  • 1

#122 aga1603

    Новичок

  • Download User
  • Pip
  • 8 сообщений
Репутация: 0
Начинающий
  • ГородМосква

Отправлено 06 November 2015 - 06:48 PM

Подскажите пожалуйста, как убрать окончание .html
  • 0

#123 badisoft

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

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

Отправлено 06 November 2015 - 07:16 PM

Судя по прочитанному в теме, надо переделывать ЧПУ под этот сайтмап ?.

Надо переделывать сайтмап под ЧПУ. Под любой. Сайтмап создает файл со ссылками, которые в штатном виде и в ЧПУ-виде отличаются. Соответственно, если устанавливается ЧПУ (повторюсь, любой), то написанный "под стандарт" сайтмап надо переделывать, чтобы он выводил не штатные ссылки, а ЧПУ-шные.

Подскажите пожалуйста, как убрать окончание .html

переписать:
1. index.php (автосоздание ЧПУ-ссылок на лету)
2. modules_friendly_cpu.php (генерация ЧПУ-ссылок в админке)
3. вставку в admin.js (автотранслит названия в ссылку в настройке категории/товара/страницы/новости)
Врядли это кто-то станет делать ради любви к исскуству.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#124 aga1603

    Новичок

  • Download User
  • Pip
  • 8 сообщений
Репутация: 0
Начинающий
  • ГородМосква

Отправлено 07 November 2015 - 08:55 AM

badisoft
это не любовь к искусству, это последние рекомендации поисковых систем.
в любом случае, спасибо за подсказку
  • 0

#125 badisoft

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

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

Отправлено 07 November 2015 - 12:01 PM

это не любовь к искусству,

Имелось в виду "врядли кто будет переделывать и выкладывать правки просто из любви к искусству".
Там потребуется достаточно много переделок, не на пять минут.

это последние рекомендации поисковых систем.

Да ну? Всех сразу? :)
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#126 aga1603

    Новичок

  • Download User
  • Pip
  • 8 сообщений
Репутация: 0
Начинающий
  • ГородМосква

Отправлено 07 November 2015 - 01:14 PM

Да ну? Всех сразу?

"всех сразу" у нас только два :)

Дмитрий, есть еще один вопрос: страница, которая отображается при неправильном адресе, воспринимается поисковиками как ошибка 404? И можно ли сделать вместо нее обычную (свою красивую) страницу? если да, то что и где можно менять?
  • 0

#127 hedhedhed

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

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

Отправлено 07 November 2015 - 01:27 PM

И можно ли сделать вместо нее обычную (свою красивую) страницу? если да, то что и где можно менять?

В поиске забанили ?

http://vsupport.club...__fromsearch__1
  • 0

#128 badisoft

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

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

Отправлено 07 November 2015 - 03:28 PM

Дмитрий, есть еще один вопрос: страница, которая отображается при неправильном адресе, воспринимается поисковиками как ошибка 404? И можно ли сделать вместо нее обычную (свою красивую) страницу? если да, то что и где можно менять?

Я не помню, какая реализация функции 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 '<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;
}

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

#129 aga1603

    Новичок

  • Download User
  • Pip
  • 8 сообщений
Репутация: 0
Начинающий
  • ГородМосква

Отправлено 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


Спасибо, Дмитрий. Это сработало.
  • 0

#130 makki

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

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

Отправлено 07 March 2016 - 08:52 PM

В инструкции не сказано, что файл addon.php из архива, надо скопировать в core/includes/admin для того чтобы добавить новые таблицы в БД. Возможно не каждый сразу догадается об этом :) и получит белый экран.
  • 0

#131 badisoft

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

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

Отправлено 08 March 2016 - 12:22 PM

В инструкции не сказано, что файл addon.php из архива, надо скопировать в core/includes/admin

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

#132 storm

    Новичок

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

Отправлено 24 March 2016 - 10:06 AM

Нужна помощь. Модуль установился, но есть ошибки.
1. в админке вместо названия модуля каракули - Модуль ЧПУ
2. самое важное - товары перестали добавляться в корзину.
Подскажите что делать.
Заранее благодарен!
  • 0

#133 badisoft

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

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

Отправлено 24 March 2016 - 10:29 AM

1. в админке вместо названия модуля каракули - Модуль ЧПУ

Если остальные (штатные) пункты админки нормальные (русскоязычные), значит когда вставляли нужную строку в файл default.tpl.html либо menu.tpl.html произошло перекодирование Win1251-текста в UTF8.
Не знаю, какой редактор так делает, но пару раз сталкивался.

2. самое важное - товары перестали добавляться в корзину.

ЧПУ никак не влияет ни на добавление товаров в корзину, ни на ее содержимое.
Добавление товара при AJAX-корзине (обычно используется именно она) происходит путем AJAX-запроса, который никак не меняется при установке модуля ЧПУ.

Подскажите что делать.

Дать мне ftp-доступ к сайту.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#134 storm

    Новичок

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

Отправлено 24 March 2016 - 01:38 PM

1. в админке вместо названия модуля каракули - Модуль ЧПУ

Если остальные (штатные) пункты админки нормальные (русскоязычные), значит когда вставляли нужную строку в файл default.tpl.html либо menu.tpl.html произошло перекодирование Win1251-текста в UTF8.
Не знаю, какой редактор так делает, но пару раз сталкивался.

2. самое важное - товары перестали добавляться в корзину.

ЧПУ никак не влияет ни на добавление товаров в корзину, ни на ее содержимое.
Добавление товара при AJAX-корзине (обычно используется именно она) происходит путем AJAX-запроса, который никак не меняется при установке модуля ЧПУ.

Подскажите что делать.

Дать мне ftp-доступ к сайту.

выслал доступ в почту
  • 0

#135 badisoft

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

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

Отправлено 24 March 2016 - 02:01 PM

Если остальные (штатные) пункты админки нормальные (русскоязычные), значит когда вставляли нужную строку в файл default.tpl.html либо menu.tpl.html произошло перекодирование Win1251-текста в UTF8.

Так и есть. В menu.tpl.html.

ЧПУ никак не влияет ни на добавление товаров в корзину, ни на ее содержимое.
Добавление товара при AJAX-корзине (обычно используется именно она) происходит путем AJAX-запроса, который никак не меняется при установке модуля ЧПУ.

Насколько я вижу, при работе авторизованного клиента, когда корзина сохраняется во временной SQL-таблице SHOPPING_CARTS_TABLE все нормально. А вот при работе не авторизованного, когда корзина хранится в массиве $_SESSION она иногда теряется при перезагрузке страницы. Иногда не теряется. У меня содержимое корзины терялось примерно два раза из трех. Явно случайным образом теряется сессия. Причем я отключил ЧПУ (убрал модуль) - картина ровно та же.

PS. Случайность потери сессии очень сильно напоминает механизм "сборки мусора", т.е. удаления устаревших сессий. Он как раз, чтобы не жрать лишний ресурс, выполняется случайно-вероятностным образом, т.е. вовсе не каждый раз при перезагрузке страницы. Поставил в "Общих настройках" время хранения сессии 10 часов (было один час) - корзина перестала пропадать. Похоже, где-то что-то не так с часами и часовыми поясами.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#136 storm

    Новичок

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

Отправлено 24 March 2016 - 02:26 PM

только что 5 раз положил разный товар в корзину - 5 раз он исчез
потому пробема не ушла
вот ранее подобная проблема возникала, описанная в этом же топике
http://vsupport.club...dpost__p__32675
  • 0

#137 badisoft

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

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

Отправлено 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, но я не помню.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#138 storm

    Новичок

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

Отправлено 24 March 2016 - 10:29 PM

вернул все назад, как до установки модуля ЧПУ, проверил добавление товара в корзину. 5 раз добавил, каждый раз товар остался на месте после перезагрузки страницы.
Как можете прокомментировать?
  • 0

#139 badisoft

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

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

Отправлено 25 March 2016 - 01:34 PM

Как можете прокомментировать?

1. Модулю ЧПУ совершенно безразлично, зарегистрирован клиент или нет. Нет в модуле никаких ветвлений логики "если зарегистрирован, то выполняем это, а если нет, то другое". Соответственно, если у зарегистрированного клиента с корзиной все хорошо, а проблемы только у не зарегистрированного (где корзина хранится в переменных сессии), то дело тут не в модуле ЧПУ, а в потере сессии. Либо в AJAX-запросе при добавлении товара, либо при перезагрузке страницы.
2. Вот тут - test.badisoft.ru - временно лежит клон Вашего сайта. Там и ЧПУ поставлен, и даже время хранения сессии всего один час, однако все работает и сессия не теряется.

PS. У ж что-что, а этот модуль успешно поставлен лично мной на ДЕСЯТКИ сайтов. А стоит, наверняка, на куда большем количестве.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#140 badisoft

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

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

Отправлено 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 ни к чему хорошему не приведет. Как, собственно, и с любым другим массивом. Т.е. либо повезет, либо нет. В зависимости от того самого "смещения в миллисекунды" из предыдущего пункта. Что и получалось.

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