예제 #1
0
 /**
  * Parameter ::= [Key FirstValueSeparator] Values .
  * @param Mana_Seo_Model_ParsedUrl $token
  * @throws Exception
  * @return bool
  */
 protected function _parseParameter($token)
 {
     $subToken = $token->zoomIn();
     // split by "/", add correction for token beginning with "/"
     $tokens = $this->_scanUntilSeparator($subToken, $this->_schema->getFirstValueSeparator());
     if ($tokens) {
         foreach ($tokens as $token) {
             // eat "/", mark as correction if there are no values after "/"
             if ($token->getTextToBeParsed()) {
                 if ($this->_getParameterUrlKey($token)) {
                     if (!$this->_setCurrentAttribute($token, $token->getParameterUrl()->getAttributeId(), $token->getParameterUrl()->getInternalName())) {
                         return false;
                     }
                     switch ($token->getParameterUrl()->getType()) {
                         case Mana_Seo_Model_ParsedUrl::PARAMETER_ATTRIBUTE:
                             if ($this->_parseAttributeValues($token)) {
                                 return true;
                             }
                             break;
                         case Mana_Seo_Model_ParsedUrl::PARAMETER_CATEGORY:
                             if ($this->_parseCategoryValues($token)) {
                                 return true;
                             }
                             break;
                         case Mana_Seo_Model_ParsedUrl::PARAMETER_PRICE:
                             if ($this->_parsePriceValues($token)) {
                                 return true;
                             }
                             break;
                         case Mana_Seo_Model_ParsedUrl::PARAMETER_TOOLBAR:
                             if ($this->_parseToolbarValues($token)) {
                                 return true;
                             }
                             break;
                         default:
                             throw new Exception('Not implemented');
                     }
                     continue;
                 }
             }
             $subToken->setParameterUrl(null);
             if (!$this->_setCurrentAttribute($subToken, false, false)) {
                 return false;
             }
             if ($this->_parseAttributeValues($subToken)) {
                 return true;
             }
         }
     }
     return false;
 }