Legosp Forum
Shop-Script "Legosp" => Разработка => Тема начата: zaidim от Августа 12, 2011, 07:29:14 am
-
Есть такая проблема, что при правке товара, категории и т.п. в наименованиях и в заголовках из-за отсутствия поддержки двойных кавычек обрезаются строки... т.е. наименование Комплект изделий "Лебединая песня" (версия 3.0) обрезается до Комплект изделий . Таким образом при сохранении теряется часть наименований.
В принципе во многом аналогично себя ведут и мета-тэги keywords и т.п., но там это в любом случае "дурной тон" и с обрезкой согласиться можно. А вот в заголовках и т.п. такое поведение мешает. Лечится просто:
Для правки товаров достаточно поправить админский шаблон catalog_products_edit.tpl.html, а именно заменить конструкции вида:
{$product_edit[20]}
на {$product_edit[20]|escape}
(добавляется smarty-функция escape).
-
Не совсем понял, где у вас проблемы с кавычками. Я заметил, что если при создании нового товара дать ему название с двойными кавычками - неверно формируется, вернее - вообще не формируется URL! Но если сначала сохранить без кавычек - все ОК. Потом кавычки можно добавлять.
-
работать не будет при кодироке движкак cp1251 надо в admin.php перед
Возможно... уже несколько лет не делал ничего на cp1251 :)
-
как это урл не формируется?
я исползую кавычки-елочки: «»
Комплект «Типограф»
URL: -128/
Но если сначала сохранить без кавычек, формируется верно. Кавычки могно добавит потом. Вообще, по мнению Лебедева, использовать кавычки-лапки - зло! К тому же при этом не усекается имя товара.
-
Сереже на заметку: ;)
function TriminSendPost( $str )
{
return trim( delManySpace( TransformStringToDataBase( $str )));
}
function delManySpace( $str )
{
return preg_replace('| +|', ' ', $str);
}
function TransformStringToDataBase( $str )
{
if (is_array($str) )
{
foreach ($str as $key => $val)
{
$str[$key] = stripslashes($val);
}
$str = str_replace("\\","\\\\",$str);
}
else
{
$str = str_replace("\\","\\\\", stripslashes($str) );
}
return str_replace( "'", "''", $str );
}
function TransformDataBaseStringToText( $str )
{
$symbol = array ( '`' => '', '&' => '&', '-' => '–', '"' => '"', '\'' => ''' );
foreach ($symbol as $n => $s)
{
$str = str_replace($n, $s, $str);
}
$str = preg_replace("/(?:\«([^\«\»]+)\»)/", "«\\1»", $str);
return stripcslashes( $str );
}
Использование:
$sampost = TriminSendPost( $_POST["sampost"] );
При выборке из БД:
while ( бла-бла )
{
$row[1] = TransformDataBaseStringToText( $row[1] );
}
Проблем уйдет много, само собой :)
Поясню:
TriminSendPost - обрезает пробелы в начале и конце строки, а также двойны пробелы, вида "мир мир" на "мир мир"
delManySpace - убирает большие расстояния между словами.
TransformStringToDataBase - Екранирует символы для отправки в БД (защита MySql).
TransformDataBaseStringToText - преобразовует html-сущности для шаблона. (например "Слово" => «Слово» => в исходном коде html «Слово»)
-
как это урл не формируется?
http://lego-demo.shop-script.org/admin.php?dpt=catalog&sub=products_edit&productID=128 нормально урл сформировался
напримере данного товара можно увидеть про какую проблему писал старт топик
Натурально, не формируется. Я с этим столкнулся, уже понял. Если поставить название товара со словом в кавычках, то ЧПУ не формируется. Стоит убрать эти знаки и перегрузить - всё работает.
-
Сереже на заметку: ;)
function TriminSendPost( $str )
{
$str = delManySpace( $str );
$str = trim( TransformStringToDataBase( $str ));
return $str;
}
function delManySpace( $str )
{
$str = preg_replace('| +|', ' ', $str);
return $str;
}
function TransformStringToDataBase( $str )
{
if (is_array($str) )
{
foreach ($str as $key => $val)
{
$str[$key] = stripslashes($val);
}
$str = str_replace("\\","\\\\",$str);
}
else
{
$str = str_replace("\\","\\\\", stripslashes($str) );
}
return str_replace( "'", "''", $str );
}
function TransformDataBaseStringToText( $str )
{
$symbol = array ( '`' => '', '&' => '&', '-' => '–', '"' => '"', '\'' => ''' );
foreach ($symbol as $n => $s)
{
$str = str_replace($n, $s, $str);
}
$str = preg_replace("/(?:\«([^\«\»]+)\»)/", "«\\1»", $str);
return stripcslashes( $str );
}
Использование:
$sampost = TriminSendPost( $_POST["sampost"] );
При выборке из БД:
while ( бла-бла )
{
$row[1] = TransformDataBaseStringToText( $row[1] );
}
Проблем уйдет много, само собой :)
Поясню:
TriminSendPost - обрезает пробелы в начале и конце строки.
delManySpace - убирает большие расстояния между словами.
TransformStringToDataBase - Екранирует символы для отправки в БД (защита MySql).
TransformDataBaseStringToText - преобразовует html-сущности для шаблона. (например "Слово" => «Слово» => в исходном коде html «Слово»)
Кто может пояснить куда это все вставлять?
-
Никто не подскажет?
-
Поставил 5.0.2 с utf-8.
При создании товара с кавычками елочками в названии:
386 Блейзер «Капучино» Marani
в Администрировании/Каталог/Товары отображается такая фигня:
386 Блейзер В«КапучиноВ» Marani
Если название с кавычками добавить в поле Дополнительно/Метки после первого нажатия "сохранить":
386 Блейзер В«КапучиноВ» Marani
после второго:
386 Блейзер ВВ«КапучиноВВ» Maran,
третьего:
386 Блейзер ВВВ«КапучиноВВВ» Mar,
и так далее.
Что за глюк? В 4.6 под виндовс 1251 у меня такого не было - кавычки елочки использовал во всю!
-
Ужос! Только что посмотрел по всему сайту, где использовал кавычки-елочки и хранил их базе данных появились буквы "В". Кошмар какой-то! Как это полечить? :'(
К примеру:
Посылка службой доставки ВВ«Нова поштаВВ» по Украине (основной способ доставки)
-
Та же проблема с кавычками . Как вылечить, подскажите?