/**
     * @param string $kw
     * @return array
     */
    public function keywordsAutocomplete( $kw = null )
    {
        $regularResults = parent::keywordsAutocomplete();

        foreach( $regularResults as $k => $v )
            $regularResults[$k]['type'] = 'r';
        
        if( is_null($kw) )
            $kw = isset($_GET['term']) ? $_GET['term'] : '';
        
        $input = mb_strtolower( $kw, 'UTF-8' );
        
        $solrFilter         = $this->solrFilter();
        $solrFacetsFiler    = $this->solrFacetsFilter();
        
        if( $solrFilter )
            $filters[] = $solrFilter;

        if( $solrFacetsFiler )
            $filters[] = $solrFacetsFiler;

        $filters[] = sprintf( 'attr_headline_lc_s:%s*', $input );
        
        $params = array( 'q'       => '*:*',
                         'qt'      => 'ezpublish',
                         'defType' => 'edismax',
                         'rows'    => 5,
                         'fl'      => 'meta_main_node_id_si, attr_headline_t, subattr_section___source_id____s',
                         'fq'      => implode( ' AND ', $filters ),
                         'json.nl' => 'arrarr' );

        $solrResults = MerckManualFunctionCollection::rawSearch($params);
        $topics      = array();

        if( $solrResults['response']['numFound'] )
        {
            foreach( $solrResults['response']['docs'] as $doc )
            {
                $sectionId      = $doc['subattr_section___source_id____s'][0];
                $topicUrlResult = MerckManualFunctionCollection::fetchUnifiedUrl( $sectionId, null, $doc['meta_main_node_id_si'], 'topic' );
                $topics[]       = array(
                            'label' => $doc['attr_headline_t'],
                            'url'   =>  $topicUrlResult['result'],
                            'type'  => 't' );
            }
        }

        return array_merge( $topics, array_slice($regularResults, 0, 10 - count( $topics ) ) );
    }
コード例 #2
0
    /**
     * @param string $applicationName Compatibility with other getNodeUrl operators
     * @param eZContentObjectTreeNode $node
     * @param boolean $languageCode
     * @return string
     */
    public static function getMerckManualNodeUrl($applicationName, $node, $languageCode = false)
    {
        if( $languageCode )
            $node->setCurrentLanguage($languageCode);

        /* @type $dataMap eZContentObjectAttribute[] */
        $chapterNode = ( $node->attribute( 'depth' ) > 4 ) ? $node->fetchParent() : $node;
        $topicNode   = ( $node->attribute( 'depth' ) > 4 ) ? $node : null;
        $linkType    = is_null( $topicNode ) ? 'chapter' : 'topic';
        $dataMap     = $chapterNode->dataMap();

        if ( !$dataMap || !isset($dataMap['serialized_taxonomies']) || !$dataMap['serialized_taxonomies']->hasContent() )
            return "";

        $serial        = $dataMap['serialized_taxonomies']->content();
        $sectionRemote = null;

        if( isset($serial['section']) && is_array($serial['section']) )
            $sectionRemote = $serial['section'][0];

        $fetchResult = MerckManualFunctionCollection::fetchUnifiedUrl($sectionRemote, $chapterNode, $topicNode, $linkType);

        return $fetchResult['result'];
    }