Необвързващ код

kulov

Registered
Здравейте, в момента работя по многоезичността на един сайт и възникна проблем.. Тей като може би се сещате, че ако сайта не е статичен, както в случая и стойностите, който ще се извежда, били те заглавие на сайта, текст на дадена новина или нещо от сорта и те трябва да имат отделни полета за отделните езици.. Какво имам в предивд:

Имам таблица да речем siteoptions в която трябва да имам поле за заглавието на сайта, но стойността на заглавието трябва да е според това на какъв език съм, за това трябва да имам няколко полета ->

title_bg, title_en ... и т.н, според това колко езика имам.

Така проблема идва в това, че аз нямам само 1 поле с много езици както в случая, имам повече тоест имам и site_title_bg, site_title_en и т.н

След като изведа в админ панела всичките стойности от тези полета, целта ми е и да могат да се редактират и записват, но не по дървен начин, ами някак си "необвързващо". Какво имам в предивид, ако в последствие имам нужда да добавя още един език това ще става напълно автоматизирано, като няма да е нужно да добавя каквото и да е било в бд-то или нещо от сорта, та ето и тук идва проблема. Ето кода

Код:
$lang=mysql_query("SELECT `short` FROM `languages` ORDER BY `id` ASC") or die(mysql_error());
while($lang_row=mysql_fetch_assoc($lang))
{
	$short=$lang_row['short'];
	$array=array("title_", "site_title_");

	for ($i=0; $i<=count($array); $i++)
	{
             $post."_".$lang_row[short]=$_POST[$array[$i].$lang_row[short]];
              $table=$array[$i].$short;
	mysql_query("UPDATE `siteoptions` SET `$table` = '$post_$lang_row[short]'") or die(mysql_error());
		}
	}
Проблема е в това, че изпълнява заявката само за първата стойност на масива.. Дефакто ако се мъча да променя стойностите по полетата title всичко е ок, но само ако title е на първо място в масива.. Ако докато title е на първо място се помъча да редактирам site_title стойностите изчезват.. И обратното ..
 
relax15pyt каза:
А защо правиш по този начин взимането. Останалата преведена част пак ли в база данни се съдържа ?

Динамичната част, която не е статична е в базата данни, и се записва по този начин : името на полето_езика. Всичката информация се записва в голям масив в един файл и се извежда, както и статичната информация е в мазив в същият файл ..
 
Ами за статичните данни защо не го направиш така...

Правиш едно поле(в случая си започнал примера с title) title и правиш няколко записа според зависи на колко езика ще ти е сайта и в началото или края добавяш bg:(ако ще слагаш отпред) или :bg(ако ще слагаш отзад) и после вадиш този запис, който съдържа отпред езика, който е избран. В случая съм дал пример за bg. Вадиш записа и изкарваш останалото без bg: и така.

И така ще е по-удобно в една таблица да наръгаш няколко колони за различните статични данни с няколко записа, които зависят от броя на езиците и ги вадиш по-този начин. По по-прост начин не се сещам.
 
relax15pyt каза:
Ами за статичните данни защо не го направиш така...

Правиш едно поле(в случая си започнал примера с title) title и правиш няколко записа според зависи на колко езика ще ти е сайта и в началото или края добавяш bg:(ако ще слагаш отпред) или :bg(ако ще слагаш отзад) и после вадиш този запис, който съдържа отпред езика, който е избран. В случая съм дал пример за bg. Вадиш записа и изкарваш останалото без bg: и така.

И така ще е по-удобно в една таблица да наръгаш няколко колони за различните статични данни с няколко записа, които зависят от броя на езиците и ги вадиш по-този начин. По по-прост начин не се сещам.



Нямам нужда да ми обесняваш как да си структорирам кода или нещо от сорта .. задал съм си въпроса.. А и какъв е смисала да си натоварвам сървара и да правя системата по-трудна за превод..

Системата ще представляза CMS система, и ще е с много възможности за разширение, както и другите ЦМС системи, и тази ще е със статични стойности в променливи, един файл с всички статични стойности .. Както при всички ЦМС системи ако знаеш как е.. Ако го правя по твоя начин не мислиш ли, че ще е труден превода на други езици, нова таблица и нови полета, все по-голяма база данни, все повече заявки.. Няма смисъл да си усложнявам живота :?:

Вече само по темата моля :)
 
Така "един сайт" в първото ти мнение ни най-малко не описва съкращението CMS. Като ще се изясняваме да се изясняваме до край. Нали така?

Не виждам какво е усложнението. Какво като се добавя нов език ще правиш нова колона ли (title_XX) ? И никъде не съм споменал за направа на нова таблица. Имаш една таблица с няколко колони. Всяка една за всяка отделна статична стойност. И например:

Код:
title             нещо_др          нещо_др2
bg:title       bg:нещо_др    bg:нещо_др2
en:title       en:нещо_др    en:нещо_др2
ru:title       ru:нещо_др    ru:нещо_др2
ro:title       ro:нещо_др    ro:нещо_др2

При добавянето какво ти прече да го направиш с голяма база данни на всеки град като списъка да е от тип BG (Bulgaria), UK(United Kingdom), US(United States) и да си избира и посредство това да се добавя за всеки запис отпред конкретния език.


А по твоя код. Пробва ли да съединяваш променливите по този начин

Код:
${post."_".$lang_row['short']}
?
 
Защо трябва да спорим за това в момента не мога да разбера ?

Първо. Къде си виждал система, която структорира кода за многоезичността по този начин ? А я се замисли когато искам да превеждам на още един език, какво правя ? Експортирам базата, и добавям още една колона с нови полета за новият език, ако допусна грешка трябва да влизам в дб-то и да едитвам.. Ако записите както в моя случай ще се хиляди, можеш ли да се замислиш за какво натоварване става дума ?

Не виждам изобщо защо спорим за това, казал съм, че така ще го правя, значи така съм преценил, че е най-удачно да се направи. Най-малкото, че няма и една система структорирала кода си по този начин ;)

В случая няма никакво значение дали ще е CMS система или Някаква по-малка системка.. По твоя начин може да се направи само някакво статично сайтче с 20-30 динамични записа, и превеждането на нов език няма да е толкова трудоемка работа, а както се подразбира, в моя случай няма да е ;) Вземи се поинтересувай малко от CMS системите като цяло и виж как си пишат кода ;)

Стига толкова по тази тема ! Това изобщо няма какво да го коментираме, трябва ми решение на проблема който съм посочил по-горе :idea: Не искам повече спам !
 
За какви експорти какви глупости ми приказваш бе човек.



Добре да обсъдим твойта структора. По това, което ти ми обясняваш и което аз разбрах е, че в базата данни имаш колони от тип


Код:
title_bg       title_en      site_title_bg       site_title_en       news_title_bg       news_title_en
Заглваие    Title             Сайт заглавие    Site title              Новина заглавие           News title

Така ли ? И за всяка нова статична стойност добавяш нова колона със стойността и на съответния език ?


$post нещо от тези ли трябва да получава title, site_title, news ?

Код:
$lang=mysql_query("SELECT `short` FROM `languages` ORDER BY `id` ASC") or die(mysql_error()); 
while($lang_row=mysql_fetch_assoc($lang)) 
{ 
   $short=$lang_row['short']; 
   $array=array("title_", "site_title_"); 

   for ($i=0; $i<=count($array); $i++) 
   { 
             ${post."_".$lang_row['short']}=$_POST[${array[$i].$lang_row['short']}];
              ${table.$i} = $array[$i].$short; 
   mysql_query("UPDATE `siteoptions` SET `${table.$i}` = '${post."_".$lang_row['short']}'") or die(mysql_error()); 
      } 
   }

Пробвай така...
 
ДА !

За какви експорти ? Ако всички статични стойности са ми в дб-то, ще добавям нови записи ръчно ли ? Е то така ще минат години докато добавя 1000 записва .. За това казах експорт, като като експортирам кода ще ги добавя по-бързо !

Ще имам динамични стойности за Името на сайта, името в <title> тага, ще имам динамични стойности са заглавието на сайта, което седи в хедъра, там има и подзаглавие, съответно и за него, динамични стойности за заглавията на панелите, за новините, за тестовете и за всички такива неща, който се добавят динамично.

Код:
title_bg, title_en, title_fr, title_de
Това са полетата за title в момента, както виждаш още от сега има 4 езика, а ще стават и повече и всички трябва да се направи максимално динамично и лесно за употреба. Като си предствиш, че това е CMS система, и че статичните записи ще са хиляди, можеш ли да си помислиш колко ще е натоварващо това всичкото да е в базата данни.. Второто което е, че ако имам някаква правописна грешка да речем, ако имам няколко хиляди записи, ще ми е трудно да стигна точно до този ред, който искам да редактирам, в това просто няма никакъв смисъл. Работил съм с малко CMS системи, и то само e107, joomla, phpmelody и спецялно за phpmelody съм правил превод, там кода е структориран точно по този начин, както и във другите, във vldpersonal също, навсякаде е така направено !

Направил съм го така, че когато избереш Френски да речем, то ти инклудва languages/fr.php, където кода е нещо такова

Код:
<?php
$value=array();
$value[0]="Тук стойност за нещо статично";
$value[1]="Тук стойност за нещо статично 2";
?>

и като цяло когато ми трябва превод на друг език просто копирам този код и си редактирам тези стойности, което е 1 милион пъти по-добре от твоя начин, който не мога да разбера от къде ти е дошъл на ума, дори при положение, че ти казах, че записите ще са много !
 
Проблема е с този код


Код:
	$lang=mysql_query("SELECT `short` FROM `languages` ORDER BY `id` ASC") or die(mysql_error());
while($lang_row=mysql_fetch_assoc($lang))
{
   $short=$lang_row['short'];
   $array=array("title_", "site_title_");

   for ($i=0; $i<=count($array); $i++)
   {
             $post."_".$lang_row[short]=$_POST[$array[$i].$lang_row[short]];
              $table=$array[$i].$short;
   mysql_query("UPDATE `siteoptions` SET `$table` = '$post_$lang_row[short]'") or die(mysql_error());
      }
   }


Изпълнява само първата стойност на масива.. Така както виждаш първата стойност на масива $array е title_

Както споменах имам полета title_bg, title_en.. и т.н, по същият начин имам и полета site_title_bg, en и т.н. По-надоло в кода им се добавя тази стойност bg, en, fr, de и т.н. Целта ми е не да правя всеки път нов код за всяко едно поле, ами всичко да става от един код, както трябва да е сега, но променя стойноста само на полето, който е първо в масива.

Така това е снимка на тези полета title_bg, en

b7c9bc99dddbe197.PNG


Така, имената на тези полета са title_bg, title_en, title_fr, title_de.

По-отдоло имам подобни полета, само дето тяхните имена са site_title_bg, site_title_en ... и т.н

Когато искам да променя стойноста да речем на заглавието на Френски, всичко е ок, само когато title е първо в масива, ако сложа site_title първи в масива, то ако се помъча да променя стойноста на title, всичките стойности ще се изчистят и ще мога да редактирам успешно само стойностите на site_title .. Объркано е но незнам как да го обясня..
 
Супер много грешки в кода ти, като цяло дава това

Parse error: syntax error, unexpected '[', expecting '(' in E:\xampp\htdocs\schoolcms\admin\pages\siteoptions.php on line 165

Отстранявам грешката, не взима стойноста от масива, връща само името на езика.. бъркоч като цяло :?:
 
Оф взе да си казва думата часа. Утре ще го видя пак, че вече се чудя как ти чета дългите постове и как ти отговарям.

Кажи също $post съдържа ли нещо като цяло ?


П.С. Пробвай да върнеш както си беше кода и да оставиш само това така

Код:
${table.$i} = $array[$i].$short;

като и в заявката го направиш по този начин. Последно решение за тази вече!
 
$post садържа информацията, кяото се вкарва в базата данни.

имената на input полетата са title_ezik и в случая това има в масива, title_ а езика се добавя после, това и садържа $post тоест то садържа инфорамцията от всички въведените полета в масива ..
 
Хм, странно, май оспях да го напрвя, ще тествам още, няма да затварям темата, ето кода за момента
Код:
	$lang=mysql_query("SELECT `short` FROM `languages` ORDER BY `id` ASC") or die(mysql_error());
	while($lang_row=mysql_fetch_assoc($lang))
	{
		$short=$lang_row['short'];
		$array=array("title_$short", "site_title_$short");

		foreach ($array as $array)
		{
            $post=$_POST[$array];
            $table=$array;
			mysql_query("UPDATE `siteoptions` SET `$table` = '$post'") or die(mysql_error());
		}
	}
 
$array as $array не е добра практика, защото някой път може да сгафиш с получените данни. Най-добре задай друго име на променливата след as. Не за друго, а да нямаш проблеми.
 

Back
Горе