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


Простейший модуль ЧПУ


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

#1 badisoft

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

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

Отправлено 17 January 2012 - 07:21 AM

Простенький модуль ЧПУ для ShopCMS 3.1.2
Написан в русле изучения PHP и на базе идеи, примененной в ЧПУ-модуле liteseotools,
а исходно описанной в ИДЕЯ.
Посмотреть, как он работает можно на демо-сайте.
Файл sitemap.xml генерируется автоматически, в момент запроса этого файла, т.е. всегда
актуален на момент запроса.

Инструкция по установке:

1. Cделайте так, чтобы в корне сайта ваш старый файл index.php стал называться index_old.php.

2. Cделайте так, чтобы в корне сайта ваш старый файл .htaccess стал называться .htaccess.bak
Для работы он больше не нужен, но там могут быть дополнительные настройки от других модулей,
которые надо будет перенести в новый .htaccess. Например, от распространенного модуля "Статьи".

3. Скопируйте файлы index.php, sitemap.php, .htaccess и каталог /cpu в корень сайта.
Проверьте, чтобы у них были те же владелец/группа/права, что и у index_old.php

4. выполните http://ваш-сайт/sitemap.xml, это создаст и заполнит SQL-табличку с ЧПУ и выдаст на экран
браузера файл sitemap.xml. По его содержимому Вы можете увидеть, насколько удачно прошла инсталляция.

5. впишите в robots.txt строчку
Sitemap: http://ваш-сайт/sitemap.xml


Дополнительные объяснения (появляются по мере надобности):

1. для старых версий инструкция чуть отличается и лежит в архиве.

2. redirect.php в работе модуля не участвует и не нужен, он делает и заносит в таблицу 301-е редиректы
со старых ЧПУ-ссылок, имевших другой вид (см. каталог /old_version) на новые. Там на каждую ссылку
по четыре-пять редиректов по числу вариантов. Скорее всего, Вам они совершенно ни к чему и будут
лишь засорять базу.

3. файлик cpu/rewrite.txt содержит соответствия названий категорий и их замен, которые надо применить
вместо транслитерации. Например, категория с названием "Устройства для чтения электронных книг"
штатно транслитерируется в "ustroystva-dlya-chteniya-elektronnyih-knig", но поскольку в rewrite.txt
есть строка
"Устройства для чтения электронных книг","BookReaders"
то в ЧПУ-ссылке название будет не транлитерировано,а заменено на "BookReaders". Обработка этого файла
(занесение соответствий в базу) происходит при запуске sitemap.php.

4. если где-то в других модулях прописаны "относительные" пути к файлам, то придется их переделать в
"абсолютные", дописав в начале "/" либо внеся соответствуюшие замены в index.php. Для встречающихся
в самой CMS и для распространенного модуля "Статьи" это в index.php уже сделано. В некоторых случаях
подмена в index.php может не помочь, так что исправление в самом модуле более надежно.

5. в .htaccess есть строка "php_value output_buffering 0", она выключает буферизацию. Частенько хостер
запрещает изменять эту настройку, а без нее ЧПУ не работает. Cоздайте в корне сайта файл info.php
<?php
phpinfo();
?>
и выполните его - http://ваш-сайт/info.php - Вы увидите кучу информации, в которой Вас интересует тот самый
output_buffering, он должен быть 0 или Off. Если там, например, 4096, то надо обращаться к хостеру.

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


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

#2 badisoft

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

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

Отправлено 18 January 2012 - 07:02 PM

я бы поставил для теста, но только недавно закончил настройку другого модуля ЧПУ. А демо-сайт не помешает :)

Если уже поставили и работает, то Вам оно и не надо. Лучшее враг хорошего, а это еще и вовсе не лучшее или хорошее, а всего лишь способ не лезть в потроха сайта, но получить ЧПУ. Этот простенький модуль интересен лентяям типа меня. Фишка в том, что какие бы модули не доустанавливались на сайт, но если там в результирующем HTML-коде присутствует нечто типа "category_8.html" или "product_125.html", то такая ссылка будет "на лету" подменена транслитом названия категории или товара. И подменена обратно правильными данными при клике на эту ссылку. Все. Это вся идея :).

Но демо-сайтик я сделаю обязательно, это не сложно.

PS. Нормально настроенный "встраиваемый" ЧПУ более правилен. Меньше жрет ресурса, что для живущих на хостингах весьма важно. Но требует, как я понимаю, несколько лопатить почти каждый допмодуль, если оный затрагивает показ категорий или товаров.

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

#3 badisoft

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

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

Отправлено 19 January 2012 - 07:25 AM

Но демо-сайтик я сделаю обязательно, это не сложно.

[HIDE="1"]Сделал[/HIDE]
Правда, нашел уже серьезные грабли. С включенным кэшем (а он у меня обычно выключен) не работает. Надо разбираться почему и как исправить.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#4 badisoft

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

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

Отправлено 24 January 2012 - 08:13 PM

Правда, нашел уже серьезные грабли. С включенным кэшем (а он у меня обычно выключен) не работает. Надо разбираться почему и как исправить.

Разобрался. Исправил. Дурацкая ошибка, как и ожидалось :). Скачать последнюю версию можно там же, где и посмотреть. Изменения в .htacces пока описаны невнятно, т.к. я в основном пользуюсь nginx+fastcgi. Думаю, сегодня разберусь и с .htaccess. Хотя профик, как мне кажется, быстро поняв принцип работы модуля исправит .htaccess и сам.

В общем, оно уже полностью работоспособно и, в принципе, законченный модуль. Пользуйтесь.

---------- Сообщение объединено ----------

PS. Если при нажатии, скажем, на "Новости" происходит переход обратно к главной странице сайта, значит я стопанул nginx+fastcgi, запустил apache и разбираюсь с правилами .htaccess, но еще не разобрался :).

---------- Сообщение объединено ----------

C .htaccess тоже разобрался. Красочный :) пример требуемых изменений в этом файле можно увидеть тут, вот по этой ЧПУ-ссылке: cpu.badisoft.ru/konfig_dlya_Apache
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#5 badisoft

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

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

Отправлено 26 January 2012 - 12:23 AM

Чуть переделал. Вынес инсталляцию в отдельный PHP-файл. Теоретически стало быстрее, т.к. теперь нет проверки на инсталлированность при каждом вызове index.php :). В принципе, это уже какие-то почти бессмысленные вылизывания. Модуль пять кило, каждый способен понять принцип и заточить под себя.
  • 1
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#6 badisoft

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

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

Отправлено 04 February 2012 - 04:54 PM

Это очень легко сделать - заменить в функции news_replacer строку $to="/".translit($row['title']); на $to="/news/".translit($row['title']);.
Ну и для pages аналогично, если надо.
Но чем оно будет лучше?
Особенно для pages, где //yousite.ru/o_magazine превратится в //yousite.ru/pages/o_magazine.
Зачем? Вроде же чем менее развесистая ссылка, тем лучше. Нет?

PS. Изменений чуть больше, т.к. иначе "Новости" становятся /news/news, это тоже легко исправить, но мне сейчас лень смотреть более подробно, чтобы исправить красиво, а не просто по if-else.

---------- Сообщение объединено ----------

Как я понимаю, скрипт самостоятельно генерирует ЧПУ, налету транслителируя имеющееся Наименование...

Чего гадать-то - исходник пять килобайт и, как мне думается, вполне понятно структурирован :).
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#7 badisoft

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

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

Отправлено 08 February 2012 - 02:46 PM

Предположительно, нашел ошибку в инсталляторе, из-за которой у многих модуль не инсталлировался (не переименовывались index.php -> index_old.php и cpu.php -> index.php, не вносились необходимые изменения в .htaccess). Связано с правами/владельцами файлов. Вечером исправлю. Пока можно это делать вручную.

---------- Сообщение объединено ----------

Кстати, может кто знает?
Не очень понимаю, как работает PHP-функция rename(). Такое впечатление, что работает она не у всех и не всегда. Например, в инсталляторе прописано rename('index.php', 'index_old.php') и у меня оно вполне выполняется, а у многих - нет. Это у них 444 на index.php прописано или дело в чем-то другом?
Спрашиваю потому, что уже не один раз видел в PHP-модулях copy()+unlink() вместо rename(), явно это неспроста...
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#8 micehide

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

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

Отправлено 08 February 2012 - 03:03 PM

Кстати, может кто знает?
Не очень понимаю, как работает PHP-функция rename(). Такое впечатление, что работает она не у всех и не всегда.

rename() не перезаписывает существующий файл, то есть если 'index_old.php' уже существует (а умногих он существует, если они сами правки любят делать), то ничего не произойдет...
  • 1

#9 badisoft

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

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

Отправлено 08 February 2012 - 11:19 PM

не переименовывались index.php -> index_old.php и cpu.php -> index.php, не вносились необходимые изменения в .htaccess

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

#10 sergio3004

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

  • Assistent vsupport.club
  • PipPip
  • 29 сообщений
Репутация: 65
Продвинутый
  • ГородМосква

Отправлено 08 February 2012 - 11:58 PM

Неполучилось установить, ошибка 500 после установки. Сайт недоступен, админка пашет.
файлы все заменились.
  • 0

#11 badisoft

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

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

Отправлено 09 February 2012 - 02:23 AM

Неполучилось установить, ошибка 500 после установки. Сайт недоступен, админка пашет.
файлы все заменились.

1. Какие-то надписи были при инсталляции кроме сообщения о ее окончании?
2. .htaccess имеет внутри предполагаемые изменения? (php_value output_buffering 0, закомментированые строки и новые реврайты в конце файла)
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#12 sergio3004

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

  • Assistent vsupport.club
  • PipPip
  • 29 сообщений
Репутация: 65
Продвинутый
  • ГородМосква

Отправлено 09 February 2012 - 08:49 AM

нет, других записей небыло. В файле .htaccess изменения есть (создался новый)
  • 0

#13 badisoft

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

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

Отправлено 09 February 2012 - 11:46 AM

нет, других записей небыло. В файле .htaccess изменения есть (создался новый)

тогда рискну преположить (предположить!), что провайдер не позволяет менять какие-то настройки в .htaccess. Т.е. настройки-то там есть, но апач на них кладет :). В данном случае это, наверное, может быть только php_value output_buffering 0, т.к. остальные "ключевые слова" есть и в штатном .htaccess.
Попробуйте "живьем" посмотреть, как выглядят настройки. Для этого создайте файл info.php:

phpinfo();
?>

положите его в корень сайта (не забудьте задать права/владельца) и выполните yousite/info.php
Там будет список разных параметров, поиском найдите output_buffering и посмотрите его значение.
Если оно отличается от того, что прописано в .htaccess (т.е. не ноль), значит точно дело в провайдере.
Если не отличается - будем искать дальше :).
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#14 sergio3004

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

  • Assistent vsupport.club
  • PipPip
  • 29 сообщений
Репутация: 65
Продвинутый
  • ГородМосква

Отправлено 09 February 2012 - 12:00 PM

Посмотрел вот результат строки: output_buffering 0 4096

Вот сам файл .htaccess:


#####################################
# ShopCMS: Скрипт интернет-магазина
# Copyright © by ADGroup
# http://shopcms.ru
#####################################

Options +FollowSymlinks -Indexes -MultiViews
DirectoryIndex index.php
ErrorDocument 404 /404.html

php_value output_buffering 0
php_value session.use_trans_sid 0
php_value session.use_cookies 1
php_value session.use_only_cookies 1
php_value session.auto_start 0
php_value magic_quotes_gpc 0
php_value register_globals 0
php_value display_errors 0
php_value magic_quotes_runtime 0
php_value allow_url_fopen 1

RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} /(\.+) [OR]
RewriteCond %{THE_REQUEST} /(\?+) [OR]
RewriteCond %{THE_REQUEST} /(/+)
RewriteRule ^(.*)$ 404.html [L]
RewriteRule ^core/(install|temp|smarty|modules|languages|includes|functions|fonts|files|config|classes|cache|backup)/(.*) - [F]
RewriteRule ^data/(.+)\.(tpl\.html|php|php3|php4|php5|phtml|pl|cgi) - [F]
RewriteRule ^install_check\.html$ install.php?check=yes [L]
RewriteRule ^index\.html$ index.php [L]
RewriteRule ^news\.html$ index.php?news=yes [L]
RewriteRule ^price\.html$ index.php?show_price=yes [L]
RewriteRule ^cart\.html$ index.php?shopping_cart=yes [L]
RewriteRule ^wide_search\.html$ index.php?search_with_change_category_ability=yes [L]
RewriteRule ^feedback\.html$ index.php?feedback=yes [L]
RewriteRule ^compare\.html$ index.php?comparison_products=yes [L]
#RewriteRule ^page_([0-9]+)\.html$ index.php?show_aux_page=$1 [L]
#RewriteRule ^product_([0-9]+)\.html$ index.php?productID=$1 [L]
#RewriteRule ^category_([0-9]+)\.html$ index.php?categoryID=$1 [L]
#RewriteRule ^category_([0-9]+)_offset_([0-9]+)\.html$ index.php?categoryID=$1&offset=$2 [L]
#RewriteRule ^category_([0-9]+)_show_all\.html$ index.php?categoryID=$1&show_all=yes [L]
#RewriteRule ^show_news_([0-9]+)\.html$ index.php?fullnews=$1 [L]
# BEGIN Articles
RewriteRule ^stati/([^/]+).html$ index.php?fullarticles=$1 [L]
RewriteRule ^stati/([0-9]+)/$ index.php?articles=yes&offset=$1 [L]
RewriteRule ^stati/$ index.php?articles=yes [L]
# END Articles
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?cpu=/$1 [L,QSA]


index.php изменённый


# ver.1.02
require_once "core/config/connect.inc.php";
require_once "core/includes/database/".DBMS.".php";

define('CATEGORY_PATTERN','/\\/?category_(?[0-9]+)((_offset_(?[0-9]+))|(?_show_all))?\\.html/');
define('PRODUCT_PATTERN' ,'/\\/?product_(?[0-9]+)\\.html/');
define('PAGE_PATTERN' ,'/\\/?page_(?[0-9]+)\\.html/');
define('NEWS_PATTERN' ,'/\\/?show_news_(?[0-9]+)\\.html/');

db_connect(DB_HOST,DB_USER,DB_PASS);
db_select_db(DB_NAME);

replace_from_cpu();
ob_start();
require_once 'index_old.php';
while (ob_get_level() > 1)
ob_end_flush();
$content = ob_get_contents();
ob_end_clean();
echo replace_to_cpu($content);

function replace_from_cpu()
{
if($row = db_fetch_assoc(db_query("SELECT cpu_from from ".DB_PRFX."cpu_table where cpu_to='".$_GET['cpu']."'")))
switch(substr($row['cpu_from'],0,strpos($row['cpu_from'],"_")))
{
case "category":
preg_match(CATEGORY_PATTERN,$row['cpu_from'],$matches);
$_GET['categoryID'] = $matches['category'];
if (intval($matches['offset'])>0)
$_GET['offset'] = $matches['offset'];
elseif ($matches['showall'])
$_GET['show_all']=true;
break;
case "product":
preg_match(PRODUCT_PATTERN,$row['cpu_from'],$matches);
$_GET['productID'] = $matches['product'];
break;
case "page":
preg_match(PAGE_PATTERN,$row['cpu_from'],$matches);
$_GET['show_aux_page'] = $matches['page'];
break;
case "show":
preg_match(NEWS_PATTERN,$row['cpu_from'],$matches);
$_GET['fullnews'] = $matches['news'];
break;
}
}

function replace_to_cpu($content)
{
function category_replacer($matches)
{
if ($row = db_fetch_assoc(db_query("SELECT name from ".DB_PRFX."categories where categoryID=".$matches['category']."")))
{
$to="/".translit($row['name']);
if (intval($matches['offset'])>0)
$to.="/skip".$matches['offset'];
elseif ($matches['showall'])
$to.="/all";
db_query("REPLACE INTO ".DB_PRFX."cpu_table SET cpu_from='$matches[0]', cpu_to='$to'");
return $to;
}
else return $matches[0];
}

function products_replacer($matches)
{
if ($row = db_fetch_assoc(db_query("SELECT name from ".DB_PRFX."products where productID=".$matches['product']."")))
{
$to="/".translit($row['name']);
db_query("REPLACE INTO ".DB_PRFX."cpu_table SET cpu_from='$matches[0]', cpu_to='$to'");
return $to;
}
else return $matches[0];
}

function page_replacer($matches)
{
if ($row = db_fetch_assoc(db_query("SELECT aux_page_name from ".DB_PRFX."aux_pages where aux_page_ID=".$matches['page']."")))
{
$to="/".translit($row['aux_page_name']);
db_query("REPLACE INTO ".DB_PRFX."cpu_table SET cpu_from='$matches[0]', cpu_to='$to'");
return $to;
}
else return $matches[0];
}

function news_replacer($matches)
{
if ($row = db_fetch_assoc(db_query("SELECT title from ".DB_PRFX."news_table where NID=".$matches['news']."")))
{
$to="/".translit($row['title']);
db_query("REPLACE INTO ".DB_PRFX."cpu_table SET cpu_from='$matches[0]', cpu_to='$to'");
return $to;
}
else return $matches[0];
}

$content = preg_replace_callback(CATEGORY_PATTERN,"category_replacer",$content);
$content = preg_replace_callback(PRODUCT_PATTERN,"products_replacer",$content);
$content = preg_replace_callback(PAGE_PATTERN,"page_replacer",$content);
$content = preg_replace_callback(NEWS_PATTERN,"news_replacer",$content);
$replace = array(
"'data/" => "'/data/",
'"data/' => '"/data/',
'href="stati/' => 'href="/stati/',
"='index.php" => "='/index.php",
'="index.php' => '="/index.php',
'="admin.php?' => '="/admin.php?',
'"price.html' => '"/price.html',
'"cart.html' => '"/cart.html',
'"feedback.html' => '"/feedback.html',
'href="stati/' => 'href="/stati/'
);
return strtr($content,$replace);
}

function translit($str)
{
$tr = array(
"А"=>"a","Б"=>"b","В"=>"v","Г"=>"g","Д"=>"d","Е"=>"e","Ж"=>"j","З"=>"z","И"=>"i","Й"=>"y","К"=>"k","Л"=>"l","М"=>"m","Н"=>"n",
"О"=>"o","П"=>"p","Р"=>"r","С"=>"s","Т"=>"t","У"=>"u","Ф"=>"f","Х"=>"h","Ц"=>"ts","Ч"=>"ch","Ш"=>"sh","Щ"=>"sch","Ъ"=>"","Ы"=>"yi","Ь"=>"",
"Э"=>"e","Ю"=>"yu","Я"=>"ya","а"=>"a","б"=>"b","в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"j","з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
"м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r","с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h","ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",
"ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya"," "=> "_","."=> "",","=> "","/"=> "_","’"=> "","°"=> "","+"=> "_");
return strtr($str,$tr);
}

?>



Версия движка 3.1.2 vip
  • 0

#15 Coolbeat

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

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

Отправлено 09 February 2012 - 04:02 PM

не удалось скопировать INDEX.PHP в INDEX_OLD.PHP не удалось удалить INDEX.PHP не удалось скопировать CPU.PHP в INDEX.PHP не удалось скопировать .HTACCESS в .HTACCESS.BAK не удалось удалить .HTACCESS не удалось создать .HTACCESS таблицаckor_cpu_table уже существует. Но это не смертельно Инсталляция завершена. Если других сообщений нет, то, возможно, успешно. :)
  • 0

#16 badisoft

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

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

Отправлено 09 February 2012 - 06:46 PM

не удалось скопировать INDEX.PHP в INDEX_OLD.PHP не удалось удалить INDEX.PHP не удалось скопировать CPU.PHP в INDEX.PHP не удалось скопировать .HTACCESS в .HTACCESS.BAK не удалось удалить .HTACCESS не удалось создать .HTACCESS таблицаckor_cpu_table уже существует. Но это не смертельно Инсталляция завершена. Если других сообщений нет, то, возможно, успешно.

Это - результат. А причина такого результата (таких сообщений) находится в логах на Вашем сервере. Я ж не телепат :).

PS. Мне уже даже интересно - а вообще хоть у кого-нибудь мой модуль поставился нормально? :)
Я бы и рад что-нибудь исправить, но "хостинг" у меня свой собственный, подстольный, где "все от меня зависит". И у меня все прекрасно работает хоть под nginx+fpm, хоть под apache. Причем никаких "дайте всем файлам права 777" нету, все строго :). Могу, конечно, попробовать это дело развернуть на обычном хостинге, если кто-нибудь мне подскажет бесплатный (или условно бесплатный - с триалом на пару недель) хостинг, удовлетворяющий требованиям ShopCMS.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#17 badisoft

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

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

Отправлено 10 February 2012 - 01:19 AM

небольшой нюанс - дублируется строчка 'href="stati/' => 'href="/stati/'

Хм... действительно. Как это я так... Не смертельно и ни на что не влияет, но непорядочек :). Поправлю.
Собственно, там эта строчка и и один-то раз не особенно нужна, если применительно к дефолтовой инсталляции использовать.
Она скорее как пример для ситуации, когда поставлен модуль "Статьи".
Подозреваю, что его ставит каждый второй, если не каждый первый :).
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#18 eugene_wb

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

  • Модераторы
  • 827 сообщений
Репутация: 167
Мастер

Отправлено 10 February 2012 - 01:22 AM

но все таки половина модифицирует под /articles/ , но при реализации данного ЧПУ, можно пользоватся модулем который переделан из новостей, добавив в него мета теги, он лучше подойдет
  • 0
Изображение Изображение Изображение

#19 badisoft

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

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

Отправлено 10 February 2012 - 01:31 AM

Собственно, обрисовываю ситуацию. Вдруг кто подскажет. Вот код модуля (index.php), урезанный почти до нуля. Он не подменяет ссылок и не делает практически ничего, пустышка. Только вызывает старый index.php, который теперь index_old.php, перехватывает из буфера его содержимое и не обрабатывая (в отличие от полной версии) отдает дальше. Т.е. все ровно то же, но без ЧПУ :).

require_once "core/config/connect.inc.php";
#require_once "core/includes/database/mysql.php";

ob_start();
require_once 'index_old.php';
while (ob_get_level() > 1)
ob_end_flush();
$content = ob_get_contents();
ob_end_clean();
echo $content;
?>

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

#20 eugene_wb

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

  • Модераторы
  • 827 сообщений
Репутация: 167
Мастер

Отправлено 10 February 2012 - 01:38 AM

Собственно, обрисовываю ситуацию. Вдруг кто подскажет. Вот код модуля (index.php), урезанный почти до нуля. Он не подменяет ссылок и не делает практически ничего, пустышка. Только вызывает старый index.php, который теперь index_old.php, перехватывает из буфера его содержимое и не обрабатывая (в отличие от полной версии) отдает дальше. Т.е. все ровно то же, но без ЧПУ :).


require_once "core/config/connect.inc.php";
#require_once "core/includes/database/mysql.php";

ob_start();
require_once 'index_old.php';
while (ob_get_level() > 1)
ob_end_flush();
$content = ob_get_contents();
ob_end_clean();
echo $content;
?>

Если на хостинге я раскомментирую закомментированную строку, то белый экран.
Но если я раскомментирую эту строку у себя на своих серверах, то все продолжает работать.
Почему не работает более-менее понятно и логичино, т.к. этот же файл грузится потом еще раз.
Не понятно то, почему у меня все работает :).


скорее всего связано с правами доступа require или .htaccess на хостинге, я уже сталкивался с таким. Вынеси функции и попробуй без require

function db_connect($host,$user,$pass) //create connection
{
$r = mysql_connect($host,$user,$pass);
$version = mysql_get_server_info($r);
if(preg_match('/^5\./',$version) || preg_match('/^4\.[1-9]/',$version)){
if(preg_match('/^5\./',$version)) mysql_query('set session sql_mode=0');
mysql_query('set names cp1251');
mysql_query('set character set cp1251');
mysql_query('set character_set_client=cp1251');
mysql_query('set character_set_results=cp1251');
mysql_query('set character_set_connection=cp1251');
mysql_query('set character_set_database=cp1251');
mysql_query('set character_set_server=cp1251');
}
return $r;
}

function db_select_db($name) //select database
{

return mysql_select_db($name);
}

function db_disconnect() //close connection
{
return mysql_close();
}


db_connect($dbhost,$dbuser,$dbpass) or die(ERROR_DB_INIT);
db_select_db($dbname) or die(db_error());
  • 0
Изображение Изображение Изображение