Визуализиране на съдържание

BoBySS

Registered
Здравейте, приятели-програмисти! :)

Пиша ви с молба за помощ... Имам следната БД:
Код:
DROP TABLE IF EXISTS `sasa`;
CREATE TABLE IF NOT EXISTS `sasa` (
	`post_id` int(6) NOT NULL auto_increment,
	
	`content_bg` TEXT COLLATE utf8_unicode_ci NOT NULL,
	`content_en` TEXT COLLATE utf8_unicode_ci NOT NULL,
	
	`author` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
	-- Публикувано на:
	`added` int(11) NOT NULL,
	`catid` tinyint(3) unsigned NOT NULL,
PRIMARY KEY (`post_id` )
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1;

Както се вижда, за български език се добавя съдържанието в content_bg, а за английски - в content_en таблиците. Самата наставка _en и _bg зависи от езика на сесията - $sesLang.
Опитвам се да отпечатам двата резултата по различен начин, т.е. ако потребителят е избрал български (content_bg) да се извеждат единствено таблиците, които имат съдържание в content_bg. Аналогично е и при случая с английския...
Засега прогресът ми е, че ги сменя и ги изкарва при смяната на езика, но в крайна сметка, ако е на български, полетата, съдържащи content_en излизат просто празни в сайта. Същото е и когато е избран английския - тези с content_bg се скриват. Някой може ли да ми помогне?
Ето по този начин се опитвам да ги визуализирам:
Код:
$query = mysql_query("SELECT post_id, content_".$sesLang.", author, added, catid FROM `sasa` ORDER BY `post_id` DESC LIMIT 10") or die(mysql_error());
while($row = mysql_fetch_array($query)) {
print $row['content_'.$sesLang];
}
Поздрави и предварително благодаря! :)
 
Предполагам @Replace пита конкретно за тези изречения

Засега прогресът ми е, че ги сменя и ги изкарва при смяната на езика, но в крайна сметка, ако е на български, полетата, съдържащи content_en излизат просто празни в сайта. Същото е и когато е избран английския - тези с content_bg се скриват. Някой може ли да ми помогне?

и наистина опитай се малко по-добре да ги обясниш.
 
1. Во кода който си дал прави, ли ит проблеми ?
2. Ро ако правиш за превод.. не е това най-добрия вариант. Инклудването на файлове е по лесно и удобно.

Ако не се получава така, просто проверявай сесията си с иф.. и след това си му задай заявките в зависимост от сесията.
 
Мерси за поправките, колеги... Ще се пробвам да обясня малко по-подробно.

И така, при запазването на езика в сесия (съответно от бутоните с флагчетата на държавите), искам да ми визуализира точно резултатите от съответния език. Затова таблицата е разделена на content_bg и content_en. Запазвам сесията със $sesLang, като тя има 2 единствени стойности - bg и en. Поради това заявката ми изглежда по този начин.
Когато в крайна сметка езикът е Български ($sesLang = bg), тогава се подразбира, че трябва да извежда content_bg, а да скрива content_en. Обратното е, когато езикът е Английски ($sesLang = en). Проблемът - при скриването остава таблицата празна, а най-добре ще е да я скрие. Затова и ми трябва помощ.
В целта си обяснението ми да е максимално добро направих и два шота на резултатите, които получавам при тази заявка:

При content_bg

При content_en

Тъй като часовете са еднакви, ясно си личи същността на проблема.
Поздрави!
 
relax15pyt каза:
А защо реши да го правиш с база данни?

Защото извличам съдържанието от БД, за да го визуализирам. :)
Сесията запазвам така:
Код:
	$getLang = $_GET['lang'];
	$sesLang = $_SESSION['lang'];
	if (isset($getLang)) {
		switch ($getLang) {
			case "bg": $sesLang = "bg";
				break;
			case "en": $sesLang = "en";
				break;
		}
	} elseif (!isset($getLang) && empty($sesLang)) {
		$sesLang = "bg";
	}
	require "lang/$sesLang.php"; //Файлът с езика

Ако просто създам 2 таблици в БД - sasa_bg и sasa_en ще стане при заявка от вида на:
Код:
$query = mysql_query("SELECT * FROM `sasa_".$sesLang."` ORDER BY `post_id` DESC LIMIT 10") or die(mysql_error());
Но точно в това е разковничето - че търся как с 1 таблица и 2 полета (sasa - content_bg, content_en) да стане. Ако не, ще се придържам към алтернативния вариант... Иначе - ако $sesLang приеме стойност bg - да показва всички полета с content_bg, а ако $sesLang = en - всички полета с content_en.
Поздрави!
 
BoBySS каза:
Ако просто създам 2 таблици в БД - sasa_bg и sasa_en ще стане при заявка от вида на:
Код:
$query = mysql_query("SELECT * FROM `sasa_".$sesLang."` ORDER BY `post_id` DESC LIMIT 10") or die(mysql_error());
Но точно в това е разковничето - че търся как с 1 таблица и 2 полета (sasa - content_bg, content_en) да стане. Ако не, ще се придържам към алтернативния вариант... Иначе - ако $sesLang приеме стойност bg - да показва всички полета с content_bg, а ако $sesLang = en - всички полета с content_en.
Поздрави!
Няма нужда да си правиш две клетки, за да покажеш съдържанието според езика. Прави си една, и според какъв език е зададен на потребителя показвай съдържанието на клетката, новината и етц.
 
Като го правя с база данни полетата си ги правя по следния начин

lid, lang, definition, content

Като lid си получава число от auto_increment
lang има стойности дали en, дали bg, пък ако искаш и ru, ro, es и т.н.
definition съдържа името на константата(аз го правя чрез define(), но ти, ако искаш махни тази колона) примерно POST, SEND, REGISTER и бля-бля...
content то е ясно съдържанието

След това взимам съдържанието и правя в един цикъл


PHP:
while($row = mysql_fetch_assoc($query)){
       define("{$row['definition']}", $row['content']);
}

и така, като добавянето на езка става примерно

1, bg, SIGNIN, Вход
2, bg, SIGNUP, Регистрация
3, en, SIGNIN, Sign in
4, en, SIGNUP, Sign up
...

като заявката е

[sql]WHERE lang = $sesLang ORDER BY lang ASC/DESC[/sql]
 

Back
Горе