2013-11-18 2 views
1

Я использую SmoothTranslate Behavior для CakePHP. Он использует Cake's TranslateBehavior.CakePHP 2.4 pagination sort on I18n переведенное поле

http://bakery.cakephp.org/articles/sky_l3ppard/2010/01/05/smoothtranslate-to-make-smooth-translations

У меня есть модель, содержащее содержимое ("Content"). У меня есть поля, которые переведены, поэтому у меня тоже есть модель I18n.

Когда я Тринг сортировать переводное поле, как это:

<?php echo $this->Paginator->sort('I18n__title.content',__('Title')); ?> 

компонент Paginator каплю это потому, что I18n__title является автоматическим генерироваться псевдонимом для преобразованной области, а не псевдоним Teh модели ("Содержание").

PaginatorComponent линии 396:

$ correctAlias ​​= ($ object-> псевдоним == $ псевдоним);

$ object-> alias - это «Содержимое», но псевдоним $ column - «I18n__title».

Весь код PaginatorComponent:

foreach ($options['order'] as $key => $value) { 
      $field = $key; 
      $alias = $object->alias; 
      if (strpos($key, '.') !== false) { 
       list($alias, $field) = explode('.', $key); 
      } 
      $correctAlias = ($object->alias == $alias); 

      if ($correctAlias && $object->hasField($field)) { 
       $order[$object->alias . '.' . $field] = $value; 
      } elseif ($correctAlias && $object->hasField($key, true)) { 
       $order[$field] = $value; 
      } elseif (isset($object->{$alias}) && $object->{$alias}->hasField($field, true)) { 
       $order[$alias . '.' . $field] = $value; 
      } 
     } 

Может CakePHP 2.x сортировать по переведенному полю?

+0

В этом состоянии CakePhp вы не можете преобразовать поля сортировки, возможно, Cake 3.0 будет содержать это будущее в новый перевод модель. – lamasgergo

ответ

2

Да, это можно сделать. О методе контроллера вы должны иметь вызов компонента Paginator, как это:

$articles = $this->paginate(); 

Вы должны изменить его на что-то вроде этого, добавляя I18n__title.content в белый список параметров, как это:

$articles = $this->paginate(null, array(), array('I18n__title.content', ... other fields you wanna sort must also be added)); 

Таким образом, вы избегаете его для удаления в запросе как не распознанное поле в модели (проверьте метод validateSort на PaginatorComponent)

+0

Это сработало для меня! Thanx – lamasgergo

 Смежные вопросы

  • Нет связанных вопросов^_^