Search code examples
zend-frameworklocale

How to use locale in select query in Zend model


On my administrator cms I can add newsitems and add a language code in column 'language' to the newsitem 'en' or 'nl'. In the bootstrapfile the language is set through:

public function _initLanguage()
{
    $objSessionLanguage= new Zend_Session_Namespace('Zend_Lang'); 
    $objLocale = new Zend_Locale();
    $locale = new Zend_Locale();
    $language = $locale->getLanguage();
    $region = $locale->getRegion();
    Zend_Loader::loadClass('Zend_Controller_Request_Http');
    $request = new Zend_Controller_Request_Http();

    if($language=='nl' or $language=='en')
    {
        if($language=='nl')
        {
            $localFile = 'dutch.php';        
            $Locale = 'nl';
        }else
        {           {
                $localFile = 'english.php';      
                $Locale = 'en';

        }
        $objSessionLanguage->localFile=$localFile;
        $objSessionLanguage->Locale=$Locale;

    }else
    {
        if(!isset($objSessionLanguage->localFile))
        {
            $localFile = 'english.php';      
            $Locale = 'en';
        }else
        {
            $localFile = $objSessionLanguage->localFile;
            $Locale =$objSessionLanguage->Locale;
        }           
    }

    $objTranslate = new Zend_Translate('array', APPLICATION_PATH .'/../language/english.php', 'en');
    $objTranslate->addTranslation(APPLICATION_PATH .'/../language/'.$localFile, $Locale);
    $objTranslate->setLocale($Locale);
    Zend_Registry::set("Zend_Translate", $objTranslate);
}

To display newsitems in a NewsList I want to select the newsitems in the newsmodel depending on language.

<?php

class Admin_Model_News extends  Zend_Db_Table_Abstract
{
    protected $_modelName = 'news';
    protected $_modelLabel = 'News';
    protected $_name = 'news';  
    protected $_objGeneralSettingVar;

public function init()
{
    parent::init(); 
    $this->_objGeneralSettingVar =  Zend_Registry::get( "objGeneralSettingVar");
}    
public function fetchNewsList()
{
    $objSelect = $this->select()->limit(5);
    $objSelect->where ("language = '$language'");
    $objSelect->order("news_date DESC");

    return $this->fetchAll($objSelect)->toArray(); 
}
}

But with the above

$objSelect->where ("language = '$language'");

no newsitems is displayed. I am sure I am missing something but can not seem to find it. How can I use the language setting in selecting newsitems on language?


Solution

  • In Admin_Model_News you are using

    $objSelect->where ("language = '$language'");
    

    for your where clause, but $language has not been set anywhere, so you are querying Where language = null.

    The function fetchNewsList should look like this:-

    public function fetchNewsList($language)
    {
        $objSelect = $this->select()->limit(5);
        $objSelect->where ("language = '$language'");
        $objSelect->order("news_date DESC");
    
        return $this->fetchAll($objSelect)->toArray(); 
    }
    

    You don't show how you are using Admin_Model_News, but it should be something like this:-

    $news = new Admin_Model_News();
    $newList = $news->fetchNewsList(howeverYouGetlanguage());