PHP iki MySQL tabloları bir ağaç oluşturmak ve HTML ile yazdırmak zorunda. Benim asıl sorun nerede veri almak için iki tablo var olmasıdır. Ben web sitesinde 3 dil var ve tüm çeviriler translations masada kalır, çünkü bir tablo pages ve diğer translations olduğunu.
Bu tablo şeması yer almaktadır:
pages
id INT
id_user INT
id_parent INT
order INT
template INT
image VARCHAR
flag_active INT
flag_extra INT
edited INT
created INT
translations
id INT
id_user INT
locale VARCHAR
module VARCHAR
pk INT
label VARCHAR
value TEXT
edited INT
Ben bir sayfa eklerken değerleri title, slug and text
sayfalarının çevirilere (şema üzerinde değil, yerele bağlı olarak vardır çünkü):
INSERT INTO pages (id_user, template, image, flag_active, flag_extra, edited, created)
VALUES (1, 0, 'test.jpg', 1, 1, 12345, 12345)
<!-- the pages.id is 4, for example, for next insert: -->
INSERT INTO translations (id_user, locale, module, pk, label, value, edited)
VALUES (1, 'en', 'pages', 4, 'title', 'This is the title in English', 12345)
INSERT INTO translations (id_user, locale, module, pk, label, value, edited)
VALUES (1, 'en', 'pages', 4, 'slug', 'this-is-the-title-in-english', 12345)
INSERT INTO translations (id_user, locale, module, pk, label, value, edited)
VALUES (1, 'en', 'pages', 4, 'text', 'This is the text in English', 12345)
INSERT INTO translations (id_user, locale, module, pk, label, value, edited)
VALUES (1, 'es', 'pages', 4, 'title', 'Este es el titulo en Español', 12345)
INSERT INTO translations (id_user, locale, module, pk, label, value, edited)
VALUES (1, 'es', 'pages', 4, 'slug', 'este-es-el-titulo-en-espanol', 12345)
INSERT INTO translations (id_user, locale, module, pk, label, value, edited)
VALUES (1, 'es', 'pages', 4, 'text', 'Este es el contenido en Español', 12345)
Ve ben belirli bir dilde bir sayfaya erişmek için var o zaman, PHP ilk ben tablodan sayfayı seçin pages
ve translations
için arayın: {[(2 )]} ve ben tüm ben sayfasından ihtiyacınız olan bilgileri ve tercüme metin değerlerini olsun.
Ben benim çeviriler sisteminin nasıl çalıştığını izah ettik. Çünkü I need to build a tree from this pages in one language Şimdi uç (ve önyüz) bir sorunu var. Benim fikrim bu bir PHP şey değil, bir MySQL biri olacağını düşünüyorum, çünkü bir özyinelemeli dizi atmak ama ben verileri birleştirmek için nasıl bilmiyorum gitmektir.
Ben ağaç işlev oluşturmak değil ve ben, çünkü ağaç işlevlerine gerektiğini düşünüyorum:
- Ben sayfa veri ve çeviri birleştirerek, MySQL sorgu / ler den üretmek ve dizi gerekir.
- Ben iç içe ağacı ile HTML bir
<ol />
listesini oluşturmak gerekir.
Önce ağaç dizinin, MySQL biri için, I need to make a MySQL for EACH entry? Ya da bu bir MySQL sorgu sadece yapılabilir? Kod örneği, test edilmiş ve yazılı doğrudan değil:
function mysql_tree($parent_id = 0)
{
$return = array();
$query = "SELECT * FROM pages WHERE id_parent=$parent_id";
$result = mysql_query($query);
if(mysql_num_rows($result) != 0)
{
$i = 0;
while($row = mysql_fetch_array($result))
{
$return[$i] = array(
'id' => $row["id"];
//etc
);
// Time to merge the data for each page from translations????
$return[$i]["childs"] = mysql_tree($row["id"]);
$i++;
}
}
return $return;
}
Ikinci ağacı fonksiyonu için ben MySQL benzer o şey herhalde?
Şimdiden teşekkürler!
İç içe listenin UPDATE:, örneğin Vincent talep
Array(
[0] => Array(
[id] => 4
[id_user] => 1
[id_parent] => 0
[order] => 0
[template] => 1
[image] => NULL
[flag_active] => 1
[flag_extra] => 0
[edited] => 12345
[created] => 12345
[title] => This is the title in English
[slug] => this-is-the-slug-in-english
[childs] => Array(
[0] => Array(
[id] => 5
[id_user] => 1
[id_parent] => 4
[order] => 0
[template] => 1
[image] => NULL
[flag_active] => 1
[flag_extra] => 0
[edited] => 12345
[created] => 12345
[title] => This is the title in English 2
[slug] => this-is-the-slug-in-english-2
[childs] => NULL
)
)
)
)
Ve HTML ağacı:
<ol>
<li class="id_4"><a href="/pages/this-is-the-slug-in-english">This is the title in English</a>
<ol>
<li class="id_5"><a href="/pages/this-is-the-slug-in-english-2">This is the title in English 2</a></li>
</ol>
</li>
</ol>