[Moved] Myblog v0.9.1 Build 25 (09 Jul 2007)

Статус
В этой теме нельзя размещать новые ответы.
Афигеть, помогло!
И тут сразу пара вопросов:
1. Насколько я понял, это трабла разрабов и можно смело делать эту замену для всех языков?
2. А какие еще траблы удалось найти и пофиксить?
 
Еще один трабл с тэгами

При создании (в админке) собственных тэгов, на кириллице, получаю "енкенке" и подобный бред. Это только у меня токое или как?:)
Таблицы в базе установлены в cp1251_general_ci. Если сталкивались с подобным, подскажите pls.!
 
в общем вот (сегодня обновился)....
JoomSEF support for My Blog
(поддержка Artio JoomSEF и Joom SEF 1.5 + 2.0)

 
Да. Такая же хрень. При добавлении с сайта все нормально, а из админки вылазит это самое.

Пошарился по офсайту. Похоже, дело в работе AJAX'a вот есть функция для коррекции в UTF8 (файл admin.myblog.php)

PHP:
function myxAddCategory($newCat) {
	global $mosConfig_absolute_path, $database;
	$newCat = html_entity_decode($newCat);
	$newCat = preg_replace('/[\s]{2,}/', ' ', $newCat);
	# Remove unwanted characters
	$newCat = preg_replace('/[.`~!@#$%\^&*\(\)\+=\{\}\[\]|\\<">,\\/\^\*;:\?\'\\\]/', '', $newCat);
	# UTF8 to ISO 8859
	$newCat = preg_replace("/([\xC2\xC3])([\x80-\xBF])/e", "chr(ord('\\1')<<6&0xC0|ord('\\2')&0x3F)", $newCat);
	$newCat = trim($newCat);
	
	$database->setQuery("SELECT id from #__myblog_categories where name='$newCat'");
	$categoryexists = $database->loadResult();
	if ($newCat != "" and !$categoryexists) {
		$cat = $newCat;
		# ISO 8859 to UTF8
		//$newCat = preg_replace("/([\x80-\xFF])/e", "chr(0xC0|ord('\\1')>>6).chr(0x80|ord('\\1')&0x3F)", $newCat);
		$database->setQuery("INSERT INTO #__myblog_categories SET name='$cat'");
		$database->query();
		$database->setQuery("SELECT id FROM #__myblog_categories ORDER BY id DESC");
		$newId = $database->loadResult();
		# ISO 8859 to UTF8
		$newCat = preg_replace("/([\x80-\xFF])/e", "chr(0xC0|ord('\\1')>>6).chr(0x80|ord('\\1')&0x3F)", $newCat);
		$objResponse = new JAXResponse();
		$objResponse->addCreate('categoryTable', 'tr', 'row' . $newId);
		$objResponse->addCreate('row' . $newId, 'td', 'cell1' . $newId);
		$objResponse->addAssign('cell1' . $newId, 'innerHTML', $newCat);
		$objResponse->addCreate('row' . $newId, 'td', 'cell2' . $newId);
		$objResponse->addAssign('cell2' . $newId, 'innerHTML', '&nbsp;');
		$objResponse->addCreate('row' . $newId, 'td', 'cell3' . $newId);
		$objResponse->addAssign('cell3' . $newId, 'innerHTML', "<span onclick=\"jax.icall('myblog','myxDeleteCategory','$newId');\" class=\"CommonTextButtonSmall\">Delete</span>");
		$objResponse->addAssign("newCat", "value", "");
		$objResponse->addAssign("categoryerror", "innerHTML", "<span class=\"successMsg\">Success! '$newCat' added.</span>");
		$objResponse->sendResponse();
	} else {
		$objResponse = new JAXResponse();
		# ISO 8859 to UTF8
		$newCat = preg_replace("/([\x80-\xFF])/e", "chr(0xC0|ord('\\1')>>6).chr(0x80|ord('\\1')&0x3F)", $newCat);
		$objResponse->addAssign("categoryerror", "innerHTML", "Error:Tag '$newCat' already exists.");
		$objResponse->sendResponse();
	}
	return;

Кто бы то же самое для 1251 подсказал...
 
1. Насколько я понял, это трабла разрабов и можно смело делать эту замену для всех языков?
Это опечатка. Языки тут совсем не причем.
2. А какие еще траблы удалось найти и пофиксить?
Мне баг реппорты не присылают :) По мере необходимости буду фиксить. Пишите в тему, помогу чем смогу.
Пошарился по офсайту. Похоже, дело в работе AJAX'a вот есть функция для коррекции в UTF8 (файл admin.myblog.php)
Дело в том что они криворукие чудовища. Для работы с БД они используют кодировку 8859, а для AJAX как и положено UTF-8. При этом абсолютно забывая, что эти преобразования убивают любую другую не базирующуюся на латыни кодировку. Так что эта проблема не только на 1251, но и в UTF-8 с русским языком. Я очистил код от этих преобразований, но это выход только для UTF-8. Для преобразования UTF-8 в 1251 и наоборот используйте функции: iconv() и mb_convert_encoding().

PHP:
function myxAddCategory($newCat) {
    global $mosConfig_absolute_path, $database;
    $newCat = html_entity_decode($newCat);
    $newCat = preg_replace('/[\s]{2,}/', ' ', $newCat);
    # Remove unwanted characters
    $newCat = preg_replace('/[.`~!@#$%\^&*\(\)\+=\{\}\[\]|\\<">,\\/\^\*;:\?\'\\\]/', '', $newCat);
    $newCat = trim($newCat);
    
    $database->setQuery("SELECT id from #__myblog_categories where name='$newCat'");
    $categoryexists = $database->loadResult();
    if ($newCat != "" and !$categoryexists) {
        $cat = $newCat;
        $database->setQuery("INSERT INTO #__myblog_categories SET name='$cat'");
        $database->query();
        $database->setQuery("SELECT id FROM #__myblog_categories ORDER BY id DESC");
        $newId = $database->loadResult();
        $objResponse = new JAXResponse();
        $objResponse->addCreate('categoryTable', 'tr', 'row' . $newId);
        $objResponse->addCreate('row' . $newId, 'td', 'cell1' . $newId);
        $objResponse->addAssign('cell1' . $newId, 'innerHTML', $newCat);
        $objResponse->addCreate('row' . $newId, 'td', 'cell2' . $newId);
        $objResponse->addAssign('cell2' . $newId, 'innerHTML', '&nbsp;');
        $objResponse->addCreate('row' . $newId, 'td', 'cell3' . $newId);
        $objResponse->addAssign('cell3' . $newId, 'innerHTML', "<span onclick=\"jax.icall('myblog','myxDeleteCategory','$newId');\" class=\"CommonTextButtonSmall\">Delete</span>");
        $objResponse->addAssign("newCat", "value", "");
        $objResponse->addAssign("categoryerror", "innerHTML", "<span class=\"successMsg\">Success! '$newCat' added.</span>");
        $objResponse->sendResponse();
    } else {
        $objResponse = new JAXResponse();
        $objResponse->addAssign("categoryerror", "innerHTML", "Error:Tag '$newCat' already exists.");
        $objResponse->sendResponse();
    }
    return;
 
Будешь смеяться, но для 1251 тоже заработало. Респектище!
Добавлено через 50 минут
Блин. Только обрадовался, как на тебе.
Все работало, пока MyBlog один стоял. как только поставил CommunityBuilder, так вернулась трабла с тегами. Добавляются нормально, а при клике выдает ту самую хрень.
Как это можно решить, а? В смысле, как-то научить компонент понимать 1251?
Все, я так понимаю, прячется в этом файле frontview.class.php
-------------------------------
В общем, проблема оказалась в другом. А именно в шаблоне сайта. При использовании дефолтного шаба от Лавры все в порядке, а крякозябры велезали при переходе на JA_Senecio.
Причем, если устанавливать все компоненты/модули/мамботы на включенном лавровском шабе, а потом перейти на другой, то все нормально работает.
PS. Кто бы еще подсказал, как шаблоны с кирилицей подружить можно?
--------------------------------
Блин. Все не правильно. Теги глючат при включенном встроенном SEF. Вот ведь зараза!
 
Для нормальной работы с кириллицей нужно во ВСЕХ файлах myblog (и обязательно в административных!) найти строчки содержащие
PHP:
0xC0|ord('\\1')>>6
и удалить их целиком.
 
а вот такой вопрос, какой компонент комментариев может работать с ним кроме JomComments ? Главенствующий фактор это возможность выбора категории в настройках....
 
У меня фришный AkoComment SE используется. Но там непонятка имеется. На одном хостинге (eomy) работает нормально, а на другом (freehostia) не хочет :(, хотя раздел указан, бот опубликован.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху