Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема формирования ссылок в интернет-магазине.
 
 автор: ElenaOdessa   (24.12.2012 в 14:06)   письмо автору
147.7 Кб
 
 

Здравствуйте! Делаю интернет-магазин по книге "Кристиан Дари php и mysql. создание интернет-магазина". Проблема состоит в том, что при создании(изменении) пунктов меню с русскими символами ссылки не формируются. Кодировка сайта и базы MySql - utf8_general_ci. Есть подозрение на то, что необходимо внести изменения в класс ссылок
<?php
class Link
{
public static function Build($link, $type = 'http')
{
$base = (($type == 'http' || USE_SSL == 'no') ? 'http://' : 'https://') .
getenv('SERVER_NAME');

// If HTTP_SERVER_PORT is defined and different than default
if (defined('HTTP_SERVER_PORT') && HTTP_SERVER_PORT != '80' &&
strpos($base, 'https') === false)
{
// Append server port
$base .= ':' . HTTP_SERVER_PORT;
}

$link = $base . VIRTUAL_LOCATION . $link;

// Escape html
return htmlspecialchars($link, ENT_QUOTES);
}

public static function ToDepartment($departmentId, $page=1)
{
$link = self::CleanUrlText(Catalog::GetDepartmentName($departmentId)) .
'-d' . $departmentId . '/';

if ($page > 1)
$link .= 'page-' . $page . '/';

return self::Build($link);
}

public static function ToCategory($departmentId, $categoryId, $page=1)
{
$link = self::CleanUrlText(Catalog::GetDepartmentName($departmentId)) .
'-d' . $departmentId . '/' .
self::CleanUrlText(Catalog::GetCategoryName($categoryId)) .
'-c' . $categoryId . '/';

if ($page > 1)
$link .= 'page-' . $page . '/';

return self::Build($link);
}

public static function ToProduct($productId)
{
$link = self::CleanUrlText(Catalog::GetProductName($productId)) .
'-p' . $productId . '/';

return self::Build($link);
}

public static function ToIndex($page = 1)
{
$link = '';

if ($page > 1)
$link .= 'page-' . $page . '/';

return self::Build($link);
}

public static function QueryStringToArray($queryString)
{
$result = array();

if ($queryString != '')
{
$elements = explode('&', $queryString);

foreach($elements as $key => $value)
{
$element = explode('=', $value);
$result[urldecode($element[0])] =
isset($element[1]) ? urldecode($element[1]) : '';
}
}

return $result;
}

// Prepares a string to be included in an URL
public static function CleanUrlText($string)
{
// Remove all characters that aren't a-z, 0-9, dash, underscore or space
$not_acceptable_characters_regex = '#[^-a-zA-Z0-9_ ]#';
$string = preg_replace($not_acceptable_characters_regex, '', $string);

// Remove all leading and trailing spaces
$string = trim($string);

// Change all dashes, underscores and spaces to dashes
$string = preg_replace('#[-_ ]+#', '-', $string);

// Return the modified string
return strtolower($string);
}

// Redirects to proper URL if not already there
public static function CheckRequest()
{
$proper_url = '';

if (isset ($_GET['Search']) || isset($_GET['SearchResults']) ||
isset ($_GET['AddProduct']))
{
return ;
}
// Obtain proper URL for category pages
elseif (isset ($_GET['DepartmentId']) && isset ($_GET['CategoryId']))
{
if (isset ($_GET['Page']))
$proper_url = self::ToCategory($_GET['DepartmentId'],
$_GET['CategoryId'], $_GET['Page']);
else
$proper_url = self::ToCategory($_GET['DepartmentId'],
$_GET['CategoryId']);
}
// Obtain proper URL for department pages
elseif (isset ($_GET['DepartmentId']))
{
if (isset ($_GET['Page']))
$proper_url = self::ToDepartment($_GET['DepartmentId'],
$_GET['Page']);
else
$proper_url = self::ToDepartment($_GET['DepartmentId']);
}
// Obtain proper URL for product pages
elseif (isset ($_GET['ProductId']))
{
$proper_url = self::ToProduct($_GET['ProductId']);
}
// Obtain proper URL for the home page
else
{
if (isset($_GET['Page']))
$proper_url = self::ToIndex($_GET['Page']);
else
$proper_url = self::ToIndex();
}

/* Remove the virtual location from the requested URL
so we can compare paths */
$requested_url = self::Build(substr($_SERVER['REQUEST_URI'],
strlen(VIRTUAL_LOCATION)));

// 404 redirect if the requested product, category or department doesnt exist
if (strstr($proper_url, '/-'))
{
// Clean output buffer
ob_clean();

// Load the 404 page
include '404.php';

// Clear the output buffer and stop execution
flush();
ob_flush();
ob_end_clean();
exit();
}

// 301 redirect to the proper URL if necessary
if ($requested_url != $proper_url)
{
// Clean output buffer
ob_clean();

// Redirect 301
header('HTTP/1.1 301 Moved Permanently');
header('Location: ' . $proper_url);

// Clear the output buffer and stop execution
flush();
ob_flush();
ob_end_clean();
exit();
}
}

// Create link to the search page
public static function ToSearch()
{
return self::Build('index.php?Search');
}

// Create link to a search results page
public static function ToSearchResults($searchString, $allWords,
$page = 1)
{
$link = 'search-results/find';

if (empty($searchString))
$link .= '/';
else
$link .= '-' . self::CleanUrlText($searchString) . '/';

$link .= 'all-words-' . $allWords . '/';

if ($page > 1)
$link .= 'page-' . $page . '/';

return self::Build($link);
}

// Create an Add to Cart link
public static function ToAddProduct($productId)
{
return self::Build('index.php?AddProduct=' . $productId);
}

// Create link to admin page
public static function ToAdmin($params = '')
{
$link = 'admin.php';

if ($params != '')
$link .= '?' . $params;

return self::Build($link, 'https');
}

// Create logout link
public static function ToLogout()
{
return self::ToAdmin('Page=Logout');
}

// Create link to the departments administration page
public static function ToDepartmentsAdmin()
{
return self::ToAdmin('Page=Departments');
}

// Create link to the categories administration page
public static function ToDepartmentCategoriesAdmin($departmentId)
{
$link = 'Page=Categories&DepartmentId=' . $departmentId;

return self::ToAdmin($link);
}
}
?>
На данный момент, ссылки с русскими символами(для категорий, отделов,товаров) просто не отображаются, имеют вид например: http://localhost/shop/-d1 , а должно иметь вид как http://localhost/shop/сейфы-d1 или http://localhost/shop/safes-d1.
Вопрос как сделать необходимое формирование ссылок и сделать транслитерацию.
Никогда такие задачи не решала, а поиск в гугле по этой книге и данной проблеме ничего не дал.
Если необходим полный исходный код он здесь: http://www.cristiandarie.ro/php-mysql-ecommerce-2/
Ниже прилагаю скриншот, для наглядности проблемы, при наведении на пункт сейфы, необходимая ссылка не формируется. С английскими буквами все нормально.
Буду благодарна форумчанам за помощь. Заранее спасибо.

  Ответить  
 
 автор: confirm   (25.12.2012 в 01:35)   письмо автору
 
   для: ElenaOdessa   (24.12.2012 в 14:06)
 

Буквально недавно ознакомился с каким юмором Одесса "ознаменовала" ожидание великого праздника - "Конца света". Ваш пост похож на этот праздник несостоявшийся )
Запомните на будущее - обрамляйте код ВВ-тегами [сode][/сode], которые де-факто стандарты на всех формах программистов. Иначе ваш код читать и воспринимать очень трудно - вы же сами это видите. Мало кто захочет в нем разбираться.

А по существу вопроса, вопросы:
1. А в этом есть большая необходимость?
2. Так как читать ваш код неудобно, а он не короток к тому же, и не вдавался в него я, то вопрос - замещать ведь чем-то надо, это "чем-то" у вас есть? Вы производите такую замену?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования