예제 #1
0
$inquiry = new \com\boxalino\p13n\api\thrift\ChoiceInquiry();
$inquiry->choiceId = $p13nChoiceId;
// Setup a search query
$searchQuery = new \com\boxalino\p13n\api\thrift\SimpleSearchQuery();
$searchQuery->indexId = $p13nAccount;
$searchQuery->language = $p13nLanguage;
$searchQuery->returnFields = $p13nFields;
$searchQuery->offset = $p13nOffset;
$searchQuery->hitCount = $p13nHitCount;
$searchQuery->queryText = $p13nSearch;
// Connect search query to the inquiry
$inquiry->simpleSearchQuery = $searchQuery;
// Add inquiry to choice request
$choiceRequest->inquiries = array($inquiry);
// Call the service
$choiceResponse = $p13n->choose($choiceRequest);
$results = array();
/** @var \com\boxalino\p13n\api\thrift\Variant $variant */
foreach ($choiceResponse->variants as $variant) {
    /** @var \com\boxalino\p13n\api\thrift\SearchResult $searchResult */
    $searchResult = $variant->searchResult;
    foreach ($searchResult->hits as $item) {
        $result = array();
        foreach ($item->values as $key => $value) {
            if (is_array($value) && count($value) == 1) {
                $result[$key] = array_shift($value);
            } else {
                $result[$key] = $value;
            }
        }
        // Widget's meta data, mostly used for event tracking
예제 #2
0
 public function findRawRecommendations($id, $role, $p13nChoiceId, $count = 5, $offset = 0, $fieldName = 'products_group_id', $context = array(), $contextItems = array())
 {
     $timing = $this->newTiming("findRawRecommendations");
     $p13nHost = $this->config->get('boxalino_host');
     $p13nAccount = $this->getAccount();
     $p13nUsername = $this->config->get('boxalino_username');
     $p13nPassword = $this->config->get('boxalino_password');
     $cookieDomain = $this->config->get('boxalino_domain');
     $p13nLanguage = $this->getShortLocale();
     $p13nFields = array('id', 'products_group_id');
     // Create basic P13n client
     $p13n = new HttpP13n();
     $p13n->setHost($p13nHost);
     $p13n->setAuthorization($p13nUsername, $p13nPassword);
     // Create main choice request object
     $choiceRequest = $p13n->getChoiceRequest($p13nAccount, $cookieDomain);
     $choiceRequest->inquiries = array();
     // Add context parameters if given
     if (count($context)) {
         foreach ($context as $key => $value) {
             if (!is_array($value)) {
                 $context[$key] = array($value);
             }
         }
         $requestContext = new \com\boxalino\p13n\api\thrift\RequestContext();
         $requestContext->parameters = $context;
         $choiceRequest->requestContext = $requestContext;
     }
     $contextItemIds = is_array($id) ? $id : array($id);
     $contextItems = [];
     foreach ($contextItemIds as $i => $itemId) {
         $contextItems[] = new \com\boxalino\p13n\api\thrift\ContextItem(array('indexId' => $p13nAccount, 'fieldName' => $fieldName, 'contextItemId' => $itemId, 'role' => $i == 0 ? $role : 'subProduct'));
     }
     // Setup a search query
     $searchQuery = new \com\boxalino\p13n\api\thrift\SimpleSearchQuery();
     $searchQuery->indexId = $p13nAccount;
     $searchQuery->language = $p13nLanguage;
     $searchQuery->returnFields = $p13nFields;
     $searchQuery->offset = $offset;
     $searchQuery->hitCount = $count;
     $searchQuery->groupBy = 'products_group_id';
     $searchQuery->filters = array(new \com\boxalino\p13n\api\thrift\Filter(array('fieldName' => 'bx_type', 'stringValues' => array('product'))));
     if (!is_array($p13nChoiceId)) {
         $p13nChoiceId = array($p13nChoiceId);
     }
     foreach ($p13nChoiceId as $choiceId) {
         // Setup main choice inquiry object
         $inquiry = new \com\boxalino\p13n\api\thrift\ChoiceInquiry();
         $inquiry->choiceId = $choiceId;
         $inquiry->minHitCount = $count;
         // Connect search query to the inquiry
         $inquiry->simpleSearchQuery = $searchQuery;
         if (!empty($id)) {
             $inquiry->contextItems = $contextItems;
         }
         // Add inquiry to choice request
         $choiceRequest->inquiries[] = $inquiry;
     }
     // Call the service
     try {
         $choiceResponse = $p13n->choose($choiceRequest);
         if ($this->isDebugProtected()) {
             $this->debug($choiceRequest);
             $this->debug($choiceResponse);
         }
     } catch (Exception $e) {
         $this->debug("choose failed", $e->getMessage());
         if ($this->isDebug()) {
             exit;
         }
         Shopware()->PluginLogger()->debug('Boxalino Recommendation: Error occurred with message ' . $e->getMessage());
         return;
     }
     $timing();
     return $choiceResponse;
 }