Catalog.php 3.66 KB
<?php

namespace common\models;
 
use Yii;
use yii\base\Model;
use yii\db\Query;

/**
 * Signup form
 */
class Catalog extends Model
{ 
    /**
     * весь список терминов
     */
    static function get ()
    {
        return yii::$app->db->createCommand('
            SELECT 
                termin_structure.termin_id,
                termin_structure.termin_pid,
                termin_lang.termin_title 
            FROM termin_structure  
                INNER JOIN termin_lang ON termin_lang.termin_id = termin_structure.termin_id
                    AND termin_lang.language_id = '.Yii::$app->params['language_id'].' 
            ORDER BY termin_structure.termin_id ASC, termin_structure.termin_pid ASC
        ')->queryAll();
    }
    
    /**
     * Выполняет поиск по параметрам
     * @param array $param принимает [catalog_id, language_id, return_one, return_field, show_all]
     * @return array one | array all | string значение масива
     */
    public function finInfo (array $params = [])
    {
        Tools::ifNotExist ($params, array (
            'catalog_id' => false,
            'language_id' => false,
            'return_one' => false,
            'return_field' => false,
            'show_all' => false,
            'to_array' => true,
        ));
    
        $model = new Catalog();
    
        $query = $model->find()->select('*');
    
        $query->joinWith(['relationCatalogLang']);
    
        $WHERE = array ();
    
        if ($params['catalog_id'])
        {
            $WHERE['catalog.catalog_id'] = $params['catalog_id'];
        }
    
        if ($params['language_id'])
        {
            $WHERE['catalog_i18n.language_id'] = $params['language_id'];
        }
    
        if (! empty ($WHERE))
        {
            $query->where($WHERE);
        }
    
        if ($params['to_array'])
        {
            $query = $query->asArray();
        }
    
        if ($params['return_one'] || $params['return_field'])
        {
    
            $result = $params['return_field'] ? $query->one($params['return_field']) : $query->one();
        }
        else
        {
            $result = $query->all();
        }
    
        return $result;
    }

    // ===================
    // ==== STRUCTURE ====
    // ===================
    
    var $mass = array (); 
 
    public function build ()
    {
        if ($this->mass = self::get ())
        {
            return $this->getRecrusive (8);
        }
    }

    public function findChild ($id)
    {
        $mass = array ();
    
        foreach ($this->mass as $row)
        {
            if ($row['termin_pid'] == $id)
            {
                $mass[] = $row;
            }
        }
    
        return $mass;
    }
    
    public function getRecrusive ($menu_id)
    { 
        $items = $this->findChild($menu_id);

        if (! empty ($items))
        { 
            echo '<ul>';
        
            foreach ($items as $row) 
            { 
                echo '<li>'.$row['termin_title'].'</li>';
                
                if ($row['termin_pid'] != 0)
                {
                    $this->getRecrusive($row['termin_id']);
                }
            }
 
            echo '</ul>';
        }

    }
    
    // =====

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getRelationCatalogLangPlus()
    {
        return $this->getRelationCatalogLang()->where(['language_id' => yii::$app->params['language_id']]);
    }
    
    /**
     * @return \yii\db\ActiveQuery
     */
    public function getRelationCatalogLang()
    {
        return $this->hasOne(CatalogLang::className(), ['catalog_id' => 'catalog_id']);
    }

}