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


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

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


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


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

#21 shkap

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

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

Отправлено 25 апреля 2014 - 11:58

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

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

Скажите, пожалуйста, без отключения сжатия этот модуль не работает?
Работает. А в инструкции про отключение я в шутку написал. Сами-то как думаете? :)

PS. Включение этой опции особо смысла не имеет.
1. В буфере при включенном сжатии лежит сжатый контент. Естественно, что либо подменить в нем затруднительно. Можно его распаковать, подменить, затем снова запаковать, но какой смысл тратить ресурс на перепаковку?
2. апач и сам умеет жать отдаваемый контент "на лету". Причем весь, а не только HTML.
3. Скорость передачи давно уже не такая низкая, чтобы сжатие на что-либо влияло. Да и бОльшая часть отдаваемого объема (картинки, авишки) практически не жмется.
Спасибо за ответ, но почему спрашиваю? А потому, что после установки модуля ссылки не генерировались до отключения сжатия, но носле отключения ссылки сгенерировались, но пишет 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request. При включении сжатия страницу находит, но адрес меняется на дефолтовый. Что не так?

#22 badisoft

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

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

Отправлено 25 апреля 2014 - 14:40

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

после установки модуля ссылки не генерировались до отключения сжатия
Генерация ссылок никаким боком к сжатию. Сжатие никак не влияет на генерацию ссылок.

Цитата

Что не так?
Я - не знаю. Но вдруг найдутся телепаты? :)
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#23 shkap

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

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

Отправлено 26 апреля 2014 - 20:12

Просмотр сообщенияbadisoft (25 апреля 2014 - 14:40) писал:

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

после установки модуля ссылки не генерировались до отключения сжатия
Генерация ссылок никаким боком к сжатию. Сжатие никак не влияет на генерацию ссылок.

Цитата

Что не так?
Я - не знаю. Но вдруг найдутся телепаты? :)
Я не шучу про генерацию ссылок. Установил модуль. Ссылки при нажатии соответствующих кнопок генерируются, т.е. процесс вроде как идёт, но ссылки при проверке, т.е. при переходах по сайту не видны (как бы не созданы). После отключения опции сжатия в общих настройках ссылки отражаются в строке браузера, но при переходе по ним выдает ошибку 404. Какие есть предположения? Спасибо

#24 badisoft

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

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

Отправлено 26 апреля 2014 - 20:27

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

Я не шучу про генерацию ссылок
Я верю, что Вы не шутите. Но, повторюсь, телепаты в отпуске. Надо заходить на Ваш сайт (изнутри) и смотреть, что и как установлено, что видно в логах, что видно в "статистике ошибок". А не гадать на кофейной гуще. Скорее всего, причина проста, но этих "простых причин" десятки, как и с предыдущей версией ЧПУ.

Я в таких случаях всегда напоминаю про три возможных варианта:
1. Разобраться самому.
2. Обратиться к тому, кто разберется за Вас (обычно это платно).
3. Обратиться к богу. История человечества показала, что иногда помогает.

Цитата

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

#25 shkap

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

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

Отправлено 26 апреля 2014 - 21:05

Просмотр сообщенияbadisoft (26 апреля 2014 - 20:27) писал:

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

Я не шучу про генерацию ссылок
Я верю, что Вы не шутите. Но, повторюсь, телепаты в отпуске. Надо заходить на Ваш сайт (изнутри) и смотреть, что и как установлено, что видно в логах, что видно в "статистике ошибок". А не гадать на кофейной гуще. Скорее всего, причина проста, но этих "простых причин" десятки, как и с предыдущей версией ЧПУ.

Я в таких случаях всегда напоминаю про три возможных варианта:
1. Разобраться самому.
2. Обратиться к тому, кто разберется за Вас (обычно это платно).
3. Обратиться к богу. История человечества показала, что иногда помогает.

Цитата

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

#26 kery

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

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

Отправлено 29 апреля 2014 - 15:13

Нашел время стал разбираться
1.1. убрать из cpu.php (или index.php, если он уже переименован) строку
require_once "core/includes/database/".DBMS.".php";
и контекстной заменой заменить все db_ на mysql_ ОБЯЗАТЕЛЬНО с соблюдением регистра, т.к. DB_PRFX заменять не надо.
после этой правки белый лист исчез,
таблицы в базе созданы нормально,
добавляются редиректы,
добавляются ручные ссылки только когда их вручную в поле записываешь и сохраняешь, а при нажатии кнопки транслит выскакивает сообщение с ????????????????????????????? как понял это неверная кодировка а ссылка в поле становится --------------------------33-------------------------.html,

но в админке так по нажатию кнопок ничего не происходит, где копать?

Все разобрался в админке как понял не подгружается jQery, поэтому прописал подгружение в файл модуля modules_friendly_cpu.tpl.html и аякс ссылки стали работать

#27 badisoft

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

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

Отправлено 06 мая 2014 - 21:04

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

Все разобрался в админке как понял не подгружается jQery, поэтому прописал подгружение в файл модуля modules_friendly_cpu.tpl.html и аякс ссылки стали работать
Т.е. то, что там И ТАК УЖЕ ЕСТЬ строка
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
ни на какие мысли не наводит? :))))

PS. update:

17. в файле data/[шаблон]/user.js все index.php заменяем на /index.php
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#28 kery

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

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

Отправлено 07 мая 2014 - 11:59

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

ни на какие мысли не наводит? :))))
Так я на локалке тестировал, у меня jqery не из сети а напрямую!

#29 zrom

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

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

Отправлено 15 мая 2014 - 14:51

еще 1 небольшой фикс. чпу обновляется при созданном товаре, но если мы хотим сгенерировать чпу при создании товара

в product_function.php найти
function AddProduct(

в ней перед
		return $insert_id;
}

вставить
		# BEGIN SimpleFriendlyURL
  if(strlen(trim($_POST["cpu"])))
	 {
	  $cpu = $_POST["cpu"].(preg_match('/\.html$/',$_POST["cpu"])?'':'.html');
	  $cpu = preg_replace('/^([^\/])/','/$1',$cpu);
	  $count = db_fetch_row(db_query("SELECT COUNT(*) FROM ".DB_PRFX."cpu WHERE type=1 AND ID=".$insert_id));
	  if ($count[0]) db_query("UPDATE ".DB_PRFX."cpu SET cpu='$cpu' WHERE type=1 AND ID=".$insert_id);
	  else db_query("INSERT ".DB_PRFX."cpu SET cpu='$cpu', type=1, ID=".$insert_id);
	 }
  else db_query("DELETE FROM ".DB_PRFX."cpu WHERE type=1 AND ID=".$insert_id);
  # END SimpleFriendlyURL


#30 badisoft

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

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

Отправлено 15 мая 2014 - 16:12

Цитата

вставить
$insert_id это автоинкрементное поле productID и для новосозданного товара заведомо бессмысленна как проверка на существование такой записи в xxxx_cpu, так и ее удаление. Т.е. код можно смело сократить до:
# BEGIN SimpleFriendlyURL
if(strlen(trim($_POST["cpu"])))
    {
    $cpu = $_POST["cpu"].(preg_match('/\.html$/',$_POST["cpu"])?'':'.html');
    $cpu = preg_replace('/^([^\/])/','/$1',$cpu);
    db_query("INSERT ".DB_PRFX."cpu SET cpu='$cpu', type=1, ID=$insert_id");
    }
# END SimpleFriendlyURL
 


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

#31 ruter

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

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

Отправлено 21 мая 2014 - 08:11

Поставил этот модуль, все вроде хорошо работает, продолжаю тестировать. Но заметил вот такое:
Если включить хлебные крошки для продукта, то при генерации страниц все нормально отображается.
Например продукт.
имеет ссылку
/cat1/cat2/product1.html
но он получается
доступен и по адресу:
/cat1/cat2/product1.html
/cat2/product1.html
/product1.html

Но это не очень хорошо - дублирование контента. Получается, что при генерации страниц факт крошек отрабатывается, а при обращении
к страницам, что-то не срабатывает. Сталкивались с таким? Так должно быть? Может, что при настройке не так сделано с моей стороны?

#32 badisoft

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

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

Отправлено 21 мая 2014 - 08:15

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

Так должно быть? Может, что при настройке не так сделано с моей стороны?
Так и должно быть. Точнее, не должно, но так есть :).
Подумаю, как исправить. Это недоработка.

Цитата

Адрес для продуктов жестко прописывается или при смене категории меняется?
Адрес продукта составной, т.е. состоит из заданного для категории и для продукта.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#33 ruter

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

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

Отправлено 21 мая 2014 - 09:07

Надо видимо проверять флаг наличия хлебных крошек в настройках и отрабатывать этот факт при обращении к странице, если условие не выполняется генерировать 404 ошибку.

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

Адрес для продуктов жестко прописывается или при смене категории меняется?
Адрес продукта составной, т.е. состоит из заданного для категории и для продукта.

Вот я уверен, что адрес страниц должен быть незыблемым, независимо от смены категории. Мое мнение, что адрес страницы не должен содержать хлебных крошек или самые основные, но жестко прописанные, так как продукт может содержаться в многих категориях, иметь бренд, различные теги, идеальный url с крошками сделать сложно при большом количестве категорий. А что, если вдруг нужно сменить основную категорию, а товаров тысячи, то сразу вырисовывается проблема для сайта.
Многие специалисты по SEO рекомендуют крошки в url. Но я не согласен, много примеров: сайты в топе 10, у которых адреса жестко прописаны без категорий.

#34 badisoft

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

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

Отправлено 21 мая 2014 - 10:42

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

Мое мнение, что адрес страницы не должен содержать хлебных крошек
Это легко сделать - не включать галку "хлебные крошки в товарах" :).

Цитата

продукт может содержаться в многих категориях
В скольки бы дополнительных (!) категориях товар не содержался, а основная категория у него одна. От нее ЧПУ и пляшет. Вне зависимости от текущей категории.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#35 ruter

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

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

Отправлено 21 мая 2014 - 11:27

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

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

Мое мнение, что адрес страницы не должен содержать хлебных крошек
Это легко сделать - не включать галку "хлебные крошки в товарах" :).

Цитата

продукт может содержаться в многих категориях
В скольки бы дополнительных (!) категориях товар не содержался, а основная категория у него одна. От нее ЧПУ и пляшет. Вне зависимости от текущей категории.
Да я знаю, что отключается, но многие просят хлебные крошки настроить в продукте. А категория да основная одна, но если её не менять то все хорошо.

#36 badisoft

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

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

Отправлено 21 мая 2014 - 11:49

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

А категория да основная одна, но если её не менять то все хорошо.
Тут надо определиться - либо "хлебные крошки", либо "можно менять категорию, а ссылка на товар останется той же". Одновременно это невозможно. На текущий момент если есть товар /cat1/cat2/prod1.html, то последующее изменение ссылки на категорию (скажем, на /cat4/cat5/, ну вот захотелось так) приведет и к изменению ссылки на товар, она станет /cat4/cat5/prod1.html. Таки образом "хлебные крошки" сохранятся. Если же ссылку на товар задавать целиком в описании товара, а не составлять из категория+товар, то при смене ссылки на категорию "хлебные крошки" пойдут лесом.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#37 ruter

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

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

Отправлено 21 мая 2014 - 11:57

Да,

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

Т.е практически, если убрать дублирование контента при 2-м варианте продукта с хлебными крошками, то модуль будет в прекрасном исполнении и ничего больше делать не стоит. Я так считаю. Каждый выбирает свой вариант настройки и с ним работает.

#38 badisoft

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

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

Отправлено 30 мая 2014 - 13:35

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

Т.е практически, если убрать дублирование контента при 2-м варианте продукта с хлебными крошками, то модуль будет в прекрасном исполнении и ничего больше делать не стоит.
Update:
1. Исправлены дублирования. Теперь проверяется, правильно ли указаны категории в "хлебных крошках". Собственно, та же проблема была с новостями и страницами - можно было указывать любой набор /aaa/bbb/ccc/ перед ddd.html
2. Исправлено еще несколько по ходу найденных ошибок.
3. Исправлен sitemap.php, в предыдущем к товарам всегда дописывались категории вне зависимости от настроек.
4. Куски повторяющегося кода вынесены в cpu_functions.php в виде функций.
5. Добавлено соответствующее удаление записей в ЧПУ-таблице при удалении категории, товара, новости, страницы.
6. Добавлен UNIQUE KEY в ЧПУ-таблицу, что позволило заменить логику "if SELECT COUNT(*) then INSERT else UPDATE" на "REPLACE".
Важно! Кто уже ставил этот модуль надо удалить и заново создать таблицу. Либо добавить этот UNIQUE KEY вручную.

Не сделано: Пока не должно быть одноименных товаров, страниц, новостей. Т.е. товар gaika.html и новость gaika.html будут конфликтовать. Аналогично будут конфликтовать и два товара с одной ссылкой. Невзирая на то, что они лежат в разных категориях и с учетом каталога ссылки будут разными - /cat1/gaika.html, /cat2/gaika.html (и /news/gaika.html у новости). Происходит так потому, что в ЧПУ-таблице лежит не "полная" ссылка, а только "хвост" gaika.html. Писать "полную" ссылку каждому товару не хочется по многим причинам. Придумаю, как выкрутиться малым ресурсом - исправлю.

Также наверняка добавлены новые ошибки и не все найдены старые :).

В шапке последняя версия.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#39 ruter

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

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

Отправлено 30 мая 2014 - 16:07

Это хорошо, когда в процессе доработки, делаются улучшения в программе.

Сразу совершенно написать невозможно. Как говорят: правильное понимание, как необходимо было написать программу приходит, тогда, когда она уже закончена.

Я тоже тогда еще сделал устранение дубляжа и карты сайта. Константу на крошки я намертво зашил в index.php, чтобы не делать лишний запрос. Ведь на сайте, если выставил, так играться на рабочем сайте (вкл/выкл) никто не будет по понятным причинам. Посмотрел сейчас свой код, почти также т.е. результат и подход, но есть некоторые отличия, которые не несут функциональной разницы. Про уникальность я тоже видел, что надо было сделать. (По специфике сайта куда ставилось ЧПУ просто невозможно было иметь одинаковые названия даже при автоматическом групповом траслите). Но думаю, что все равно сделать уникальным полем cpu на всякий случай.

Просмотр сообщенияbadisoft (30 мая 2014 - 13:35) писал:


Не сделано: Пока не должно быть одноименных товаров, страниц, новостей. Т.е. товар gaika.html и новость gaika.html будут конфликтовать. Аналогично будут конфликтовать и два товара с одной ссылкой. Невзирая на то, что они лежат в разных категориях и с учетом каталога ссылки будут разными - /cat1/gaika.html, /cat2/gaika.html (и /news/gaika.html у новости). Происходит так потому, что в ЧПУ-таблице лежит не "полная" ссылка, а только "хвост" gaika.html. Писать "полную" ссылку каждому товару не хочется по многим причинам. Придумаю, как выкрутиться малым ресурсом - исправлю.


Мне кажется, что тут не стоит сильно заморачиваться, если сделано уникальным поле самой ссылки cpu без крошек. то эти вопросы отпадают. Одинаковых ссылок нет и нечем тут конфликтовать.

И еще наверное на форуме нужно сделать соглашение о нумерации версий, например ver2 начальная, а к остальным добавлять через точку цифру например эта новая версия ver2.1 и т.д. что бы не запутаться. И по номеру будет видно, что версия уже обновлена. Соглашения - это нормально.

#40 badisoft

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

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

Отправлено 05 июня 2014 - 16:30

Цитата

Не сделано: Пока не должно быть одноименных товаров, страниц, новостей. Т.е. товар gaika.html и новость gaika.html будут конфликтовать. Аналогично будут конфликтовать и два товара с одной ссылкой.
Я тормоз. У меня ж там как раз на этот случай есть галка "Добавлять уникальный ID к ЧПУ-ссылкам товаров", специально на такой случай и сделан. Хоть все товары одноименными делать можно.

Update:
Исправлено:
1. не добавлялся ЧПУ категории к ЧПУ товара при редиректе-301 со старой ссылки вида /product_123.html.
2. не добавлялось /news/ при редиректе-301 со старой ссылки вида /show_news_123.html
Соответственно, редиректы шли на не существующую ссылку.

Добавлено:
1. Галки добавления уникальных ID к статическим страницам и новостям.
2. Галка автогенерации ЧПУ-ссылок для объектов, не имеющих ЧПУ-ссылки. Если включена, то при загрузке страницы все попавшие на нее ссылки будут автоматически "оЧПУшены".
3. В редиректах появилась возмоэность задать нечто типа макроса подмены. Т.е. если задать редирект, начинающийся с символа & (например, &abc -> cde), то работать он будет следующим образом: все вхождения строки abc в ссылке будут заменены на cde и произведен редирект-301 на полученную ссылку.
!!! до редиректов дело доходит только если такой ссылки нет в таблице ЧПУ-ссылок, т.е. ссылка не существующая!

В шапке исправленная версия.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)