示例#1
0
文件: skill.php 项目: kevthunder/arch
 function getTargetHandlers($named = false)
 {
     App::import('Lib', 'ClassCollection');
     App::import('Lib', 'SetMulti');
     $class = ClassCollection::getClass('handler', 'Skills');
     $methods = get_class_methods($class);
     $targetHandlers = SetMulti::pregFilter('/^target\\w*$/', $methods);
     //debug($targetHandlers);
     if ($named) {
         $list = array();
         foreach ($targetHandlers as $handler) {
             $list[$handler] = Inflector::humanize(Inflector::underscore($handler));
         }
         $targetHandlers = $list;
     }
     return $targetHandlers;
 }
示例#2
0
 function getAllRelated($products = null, $opt = array())
 {
     $defOpt = array('minField' => false);
     $opt = array_merge($defOpt, $opt);
     $relatedModels = array();
     foreach ($products as $key => $product) {
         if (empty($product['Related']) && empty($product[$this->alias]['Related'])) {
             $relatedRef = $this->getRelatedRef($product);
             $relatedRef['key'] = $key;
             if (empty($relatedModels[$relatedRef['model']])) {
                 $relatedModel = $this->getRelatedClass($relatedRef);
                 //if(!empty($relatedModel->data[$relatedModel->alias]['id']) && $relatedModel->data[$relatedModel->alias]['id'] == $relatedRef['foreign_id']){
                 //	$products[$key]['Related'] = $relatedModel->data[$relatedModel->alias];
                 //}else{
                 if ($relatedModel) {
                     $relatedModels[$relatedRef['model']]['class'] = $relatedModel;
                     $relatedModels[$relatedRef['model']][] = $relatedRef;
                 }
                 //}
             } else {
                 $relatedModels[$relatedRef['model']][] = $relatedRef;
             }
         }
     }
     foreach ($relatedModels as $alias => $refs) {
         $relatedModel = $refs['class'];
         $tmp = $relatedModel->recursive;
         unset($refs['class']);
         App::import('Lib', 'Shop.SetMulti');
         $relatedModel->recursive = -1;
         $ids = Set::extract('/foreign_id', $refs);
         $findOpt = array('conditions' => array($relatedModel->alias . '.id' => $ids));
         if ($opt['minField']) {
             $fields = $this->dynamicFieldsExtractData($relatedModel, $opt);
             $fields = array_values(Set::flatten($fields));
             $fields = SetMulti::pregFilter('/^Related\\./', $fields);
             $fields = str_replace('Related.', $relatedModel->alias . '.', $fields);
             $fields[] = $relatedModel->alias . '.id';
             $cpy = $fields;
             $fields = array();
             foreach ($cpy as $field) {
                 if ($relatedModel->hasField(str_replace($relatedModel->alias . '.', '', $field))) {
                     $fields[] = $field;
                 }
             }
             //debug($fields);
             $findOpt['fields'] = $fields;
         }
         $manyRelated = $relatedModel->find('all', $findOpt);
         $relatedModel->recursive = $tmp;
         $manyRelated = SetMulti::group($manyRelated, $relatedModel->alias . '.id', array('singleArray' => false));
         //debug($manyRelated);
         foreach ($refs as $ref) {
             if (!empty($manyRelated[$ref['foreign_id']])) {
                 $products[$ref['key']] = (array) $products[$ref['key']];
                 $products[$ref['key']]['Related'] = $manyRelated[$ref['foreign_id']][$relatedModel->alias];
             }
         }
     }
     return $products;
 }