2016-04-19 3 views
-1

Ich habe folgendes Schema:Wie kann man zu einem späteren Zeitpunkt eine zweite Sprache für die Internationalisierung hinzufügen?

<!-- language: lang-xml --> 
<table name="blog" phpName="Blog"> 
    <column name="id" type="INTEGER" required="true" primaryKey="true" autoIncrement="true" /> 
    <column name="title" phpName="Title" type="VARCHAR" size="100" required="true" /> 
    <column name="short_link" phpName="ShortLink" type="VARCHAR" size="64" required="false" /> 
    <column name="description" phpName="Description" type="LONGVARCHAR" required="false" /> 
    <column name="content" phpName="Content" type="LONGVARCHAR" required="false" /> 
    <column name="visibility" phpName="Visibility" type="INTEGER" default="-1" required="true" /> 

    <behavior name="i18n"> 
     <parameter name="i18n_columns" value="title, short_link, description, content" /> 
    </behavior> 
    <behavior name="timestampable" /> 
    <behavior name="soft_delete" /> 
    <behavior name="versionable" /> 
</table> 

<table name="blog_i18n" phpName="blogi18n"> 
    <column name="id" type="INTEGER" required="true" primaryKey="true" /> 
    <column name="locale" type="VARCHAR" size="5" required="true" primaryKey="true" /> 
    <column name="title" phpName="Title" type="VARCHAR" size="100" required="false" /> 
    <column name="short_link" phpName="ShortLink" type="VARCHAR" size="64" required="false" /> 
    <column name="description" phpName="Description" type="LONGVARCHAR" required="false" /> 
    <column name="content" phpName="Content" type="LONGVARCHAR" required="false" /> 

    <foreign-key foreignTable="blog" onDelete="setnull" onUpdate="cascade"> 
     <reference local="id" foreign="id" /> 
    </foreign-key> 

    <behavior name="timestampable" /> 
    <behavior name="soft_delete" /> 
    <behavior name="versionable" /> 
</table> 

Wenn ich einen neuen Beitrag hinzufügen, fügt es eine Sprache (Haupt App Sprache), die Idee ist, die Option für weitere Sprachen zu einem späteren Zeitpunkt zu verlassen.

dies ist der Code, der die Post ergänzt: bis hier alle Werke schön wie erwartet, aber wenn ich versuche, auszuführen bearbeitet, auf welcher Sprache auch immer, es tut

<!-- language: lang-php --> 
public function addBlogPost(Application $app) { 

    $data = array (
     'title' => $app['request']->get('Title'), 
     'language' => $app['request']->get('Language'), 
     'short-link' => $this->createShortLink($app, $app['request']->get('Title')), 
     'description' => $app['request']->get('Description'), 
     'content' => $app['request']->get('Content') 
     ); 

    $blog = new Blog(); 

    $blog->setLocale($data['language']); 
    $blog->setTitle($data['title']); 
    $blog->setShortLink($data['short-link']); 
    $blog->setDescription($data['description']); 
    $blog->setContent($data['content']); 

    try { 
     $blog->save(); 
     $app['session']->getFlashBag()->add(
      'success', 
      'success_add_blog_text' 
      ); 
      return $app->redirect($app['url_generator']->generate('adminBlog')); 
    } catch (PropelException $pe) { 
     $app['session']->getFlashBag()->add(
      'error', 
      'error_add_blog_text' 
      ); 
     return $app->redirect($app['url_generator']->generate('adminBlog')); 
    } 
} 

Up Arbeit.

<!-- language: lang-php --> 
public function editBlogPost(Application $app) { 
    $id = $app['request']->get('id'); 
    $lang = $app['request']->get('language'); 
    if(!is_numeric($id)) { 
     $app['session']->getFlashBag()->add(
       'error', 
       'blog_doesnt_exists_text' 
      ); 
     return $app->redirect($app['url_generator']->generate('adminBlog')); 
    } 

    $data = array (
     'id' => $app['request']->get('id'), 
     'language' => $app['request']->get('language'), 
     'title' => $app['request']->get('title'), 
     'short-link' => $app['request']->get('short-link'), 
     'description' => $app['request']->get('description'), 
     'content' => $app['request']->get('content') 
     ); 

    $post = BlogQuery::create(); 

    $post->setLocale($data['language']); 
    $post->setTitle($data['title']); 
    $post->setShortLink($data['short-link']); 
    $post->setDescription($data['description']); 
    $post->setContent($data['content']); 

    try { 
     $post->save(); 
     $app['session']->getFlashBag()->add(
      'success', 
      'success_edit_blog_text' 
      ); 
     return $app->redirect($app['url_generator']->generate('adminBlog')); 
    } catch (PropelException $pe) { 
     $app['session']->getFlashBag()->add(
      'error', 
      'error_edit_blog_text' 
      ); 
     return $app->redirect($app['url_generator']->generate('adminBlog')); 
    } 
} 

Fehler 500.

nicht definierte Methode ModelCriteria :: setLocale()

ist, was ich bekommen. Soll ich stattdessen mit Blogl18nQuery bearbeiten? Oder mache ich es von Anfang an falsch?

+0

Wie instanziieren Sie 'ModelCriteria'? 'setLocale()' ist offensichtlich nicht im Bereich. – Marcus

+0

hmm! Es scheint, es ist nicht auf BlogQuery, dann wieder scheint es "Bearbeiten" ist nicht der Ort, um neue Sprachen hinzuzufügen ... gona einen Vergleich versuchen und vielleicht eine private Methode, um neue Sprachen hinzuzufügen! lass euch wissen, was ich finde – JLChafardet

Antwort

0

Ok nach einigen Tests (aufgrund der fehlenden Willen komplexe Suchvorgänge durchführen, Antworten bekommen muss ich zugeben)

das ist, was ich tat, und es funktioniert (es kann nicht die beste Lösung tho sein, aber funktioniert für jetzt).

<!-- language: lang-php --> 
public function editBlogPost(Application $app) { 
    $id = $app['request']->get('id'); 
    $lang = $app['request']->get('language'); 
    if(!is_numeric($id)) { 
     $app['session']->getFlashBag()->add(
       'error', 
       'blog_doesnt_exists_text' 
      ); 
     return $app->redirect($app['url_generator']->generate('adminBlog')); 
    } 

    // check if the item exists, if it doesnt, error. 
    $blog = BlogQuery::create() 
     ->filterById($id) 
     ->count(); 
    if($blog<1) { 
     $app['session']->getFlashBag()->add(
      'error', 
      'blog_doesnt_exists_text' 
      ); 
     return $app->redirect($app['url_generator']->generate('adminBlog')); 
    } 

    $data = array (
     'id' => $app['request']->get('id'), 
     'language' => $app['request']->get('language'), 
     'title' => $app['request']->get('Title'), 
     'short-link' => $app['request']->get('ShortLink'), 
     'description' => $app['request']->get('Description'), 
     'content' => $app['request']->get('Content') 
     ); 

    $post = new Blogi18n(); 
    $post->setId($data['id']); 
    $post->setLocale($data['language']); 
    $post->setTitle($data['title']); 
    $post->setShortLink($data['short-link']); 
    $post->setDescription($data['description']); 
    $post->setContent($data['content']); 

    try { 
     $post->save(); 
     $app['session']->getFlashBag()->add(
      'success', 
      'success_edit_blog_text' 
      ); 
     return $app->redirect($app['url_generator']->generate('adminBlog')); 
    } catch (PropelException $pe) { 
     $app['session']->getFlashBag()->add(
      'error', 
      'error_edit_blog_text' 
      ); 
     return $app->redirect($app['url_generator']->generate('adminBlog')); 
    } 

} 

Ich ging mit der Verwendung von Blogi18n und das hat den Trick.

Verwandte Themen