1

Temat: Przetwarzanie danych

witam,
korzystam z i18n do tlumaczenia zawartosci bazy.
Problem pojawił się przy edycji bo nie wiem jak to mogę zedytować.
Do i18n przesyłam name, description oraz url - i te wartosc sa zapisywane.

Jednak gdy chce odczytać dane to nie mam tego description oraz url (oczywiście w bazie sa)
Robię wg. tego przykładu:
http://book.cakephp.org/pl/view/797/Ret … or-a-field

$this->Product->bindTranslation(array ('name' => 'ProductsDescriptions'));

i to co zwraca mi $this->data wyglada tak

[Product] => Array
                (
                    [id] => 1
                    [image] => jkh
                    [date] => 2009-07-29
                    [locale] => pol
                    [description] => opis po polsku
                    [url] => urllllll
                    [name] => nazwa produktu po polsku
                )

             

            [ProductsDescriptions] => Array
                (
                    [0] => Array
                        (
                            [id] => 1
                            [locale] => pol
                            [model] => Product
                            [foreign_key] => 1
                            [field] => name
                            [content] => nazwa produktu po polsku
                        )

                    [1] => Array
                        (
                            [id] => 4
                            [locale] => eng
                            [model] => Product
                            [foreign_key] => 1
                            [field] => name
                            [content] => nazwa po angielsku
                        )

                    [2] => Array
                        (
                            [id] => 7
                            [locale] => rus
                            [model] => Product
                            [foreign_key] => 1
                            [field] => name
                            [content] => nazwa po rusku
                        )

                )

Jak mam wyciągnąć description i opis skoro 3 razy by byla wartosc field oraz content?

Jeśli ktoś ma jakiś pomysł - proszę o odpowiedź.

pozdr.

2

Odp: Przetwarzanie danych

Moze ustawiaac pole locale  dla wybranego jezyka ? ?

Ostatnio edytowany przez robal77 (2009-08-01 16:47:55)

3

Odp: Przetwarzanie danych

nie rozumiem. możesz rozwinąć pytanie?

4

Odp: Przetwarzanie danych

Sprobuj w kontrolerze walnac taki kod przed wyciagnieciem danych z modaelu

$this->Product->locale = array('pol');
albo
$this->Product->locale = 'pol';


Ewlentualnie zerknij w zrodla behaviora i  poszuka stringa "locale" i zobacz co sie dzieje w kodzie na okolo niego.

5

Odp: Przetwarzanie danych

Spójrz na tablice Product.
Behavior automatycznie wyciaga dane wg. aktualnego jezyka do pól name, description, url.

Problem w tym, że ja chcę na raz edytować wszystkie 3 języki.

6

Odp: Przetwarzanie danych

"Problem w tym, że ja chcę na raz edytować wszystkie 3 języki." - ciezko to wywnioskowac czytajac pierwszy post ;-)


Czyli musisz sobie w widoku w petli wygenerowac odpowiednie pola formularza dla kazdego z jezykow np :

<?php foreach($data["ProductsDescriptions"] as $index => $record)  { ?>
     <?php e($form->hidden("ProductsDescription.{$index}.jakiesPole",array("value" => $record["jakies_pole"]))) ?>
       ....
       ....
       ....
<?php } ?>


po submicie bedziesz miec w tablicy $this->data

taka tablice

[ProductDescription] => array(
     [0] => array ("jakies_pole" => "wartosc" ......),
     .....
     [n] => array ("jakies_pole" => "wartosc" .......),
);

O ile behavior nie bedzie w stanie sam tego zapisac, musisz kazdy rekord aktualizowac z osobna rowniez w petli ..

Ostatnio edytowany przez robal77 (2009-08-01 17:36:23)

7

Odp: Przetwarzanie danych

nie w tym rzecz.

problem lezy w tym, ze odczytuje tylko nazwe.

        [field] => name
                            [content] => nazwa produktu po polsku

brakuje description i url.

teraz zapytanie dla tabeli i28n wyglada tak

SELECT `ProductsDescriptions`.`id`, `ProductsDescriptions`.`locale`, `ProductsDescriptions`.`model`, `ProductsDescriptions`.`foreign_key`, `ProductsDescriptions`.`field`, `ProductsDescriptions`.`content` FROM `mayer_i18n` AS `ProductsDescriptions` WHERE `model` = 'Product' AND `field` = 'name' AND `ProductsDescriptions`.`foreign_key` = (22)

nie potrzebne jest to `field` = 'name'

8

Odp: Przetwarzanie danych

ok, mój problem spowodowany był błędem na stronie CakePHP, a w zasadzie drobną różnicą.

wg. API powinno być:

bindTranslation( $model, $fields, $reset = true )

tymczasem u mnie dziala tak:

bindTranslation($fields, $reset)