コード例 #1
0
 protected function calculaUrlAmigable($datos)
 {
     $urlPrefix = '';
     $urlAmigable = '';
     $slug = '';
     $columnaSlug = $this->varEnvMod['fieldGeneratorUrlFriendly'];
     // Si hay que generar la url amigable
     if ($columnaSlug) {
         $bloqueoUrlPrefix = $datos->getLockUrlPrefix()->getIDTipo() == '1';
         $datos->setLockUrlPrefix($bloqueoUrlPrefix);
         $bloqueoSlug = $datos->getLockSlug()->getIDTipo() == '1';
         $datos->setLockSlug($bloqueoSlug);
         $perteneceA = $datos->getBelongsTo()->getPrimaryKeyValue();
         // CALCULAR EL PREFIJO DE LA URL -----------------------------------
         //
         // Si está bloqueado el prefijo, se calcula
         if ($bloqueoUrlPrefix) {
             if ($this->varEnvMod['isModuleRoot']) {
                 // Es el módulo padre de la app
                 if ($perteneceA) {
                     $objetoPadre = new $this->entity($perteneceA);
                     if ($objetoPadre->getUrlHeritable()->getIDTipo() == '1') {
                         $urlPrefix = $objetoPadre->getUrlFriendly();
                     } else {
                         $urlPrefix = "/" . $this->varEnvApp['globales']['urlPrefix'];
                     }
                     unset($objetoPadre);
                 } else {
                     $urlPrefix = "/" . $this->varEnvApp['globales']['urlPrefix'];
                 }
             } else {
                 // No es el módulo padre de la app. Miro a ver si
                 // está linkado con otro módulo
                 $linkModule = $this->varWebMod['globales'];
                 if ($linkModule['linkFromColumn'] != '' and $linkModule['linkToEntity'] != '' and $linkModule['linkToColumn'] != '') {
                     // Está linkado con otro módulo. El prefijo será la url amigable
                     // del padre si es heredable
                     $idToLink = $datos->getColumnValue($linkModule['linkFromColumn']);
                     if (is_object($idToLink)) {
                         $idToLink = $idToLink->getPrimaryKeyValue();
                     }
                     $moduloPadre = new $linkModule['linkToEntity']($idToLink);
                     if ($moduloPadre->getUrlHeritable()->getIDTipo() == '1') {
                         $urlPrefix = $moduloPadre->getUrlFriendly();
                     } else {
                         $urlPrefix = "/" . $this->varEnvApp['globales']['urlPrefix'];
                     }
                     unset($moduloPadre);
                 }
             }
         } else {
             // Si no está bloqueado, se toma el indicado por el usuario y se limpia
             $urlPrefix = Textos::limpia($datos->getUrlPrefix());
             if ($urlPrefix) {
                 $urlPrefix = "/" . $urlPrefix;
             }
         }
         // -----------------------------------------------------------------
         // CALCULAR EL SLUG ------------------------------------------------
         //
         // Si está bloquedo el slug, se calcula
         if ($bloqueoSlug) {
             $slug = $datos->{"get{$columnaSlug}"}();
         } else {
             // Si no está bloqueado, se toma el indicado por el usuario
             $slug = $datos->getSlug();
         }
         $slug = Textos::limpia($slug);
         // -----------------------------------------------------------------
         // Construir la url amigable, límito su longitud al valor indicado
         // en la variable de entorno del proyecto
         if ($urlPrefix != '') {
             $urlAmigable = $urlPrefix;
         }
         $urlAmigable .= "/{$slug}";
         $urlAmigable = str_replace("//", "/", $urlAmigable);
         if ($this->varEnvPro['maxLengthUrlsFriendly']) {
             $urlAmigable = substr($urlAmigable, 0, $this->varEnvPro['maxLengthUrlsFriendly']);
         }
         if ($this->varEnvMod['parametros'] != '') {
             $urlAmigable .= "/" . $this->varEnvMod['parametros'];
         }
         $urls = new CpanUrlAmigables();
         $filtro = "Idioma='{$_SESSION['idiomas']['actual']}' and Entity='{$this->entity}' and IdEntity='{$datos->getPrimaryKeyValue()}'";
         $rows = $urls->cargaCondicion("Id", $filtro);
         $idUrl = $rows[0]['Id'];
         if (!$idUrl) {
             if ($_SESSION['idiomas']['actual'] == 0) {
                 // Pongo el controlador, action, template y parametros con las variables de entorno, pero...
                 $urls->setController($this->varEnvMod['controller']);
                 $urls->setAction($this->varEnvMod['action']);
                 $urls->setTemplate($this->varEnvMod['template']);
                 $urls->setParameters($this->varEnvMod['parametros']);
             } else {
                 $filtro = "Idioma='0' and Entity='{$this->entity}' and IdEntity='{$datos->getPrimaryKeyValue()}'";
                 $rows = $urls->cargaCondicion("Controller,Action,Template,Parameters", $filtro);
                 $row = $rows[0];
                 if ($row) {
                     // Si la entidad tiene padre (belongsto), pongo el controller del padre
                     $urls->setController($row['Controller']);
                     $urls->setAction($row['Action']);
                     $urls->setTemplate($row['Template']);
                     $urls->setParameters($row['Parameters']);
                 }
             }
             // Si el objeto es hijo (belongsTo), pongo el del objeto padre
             if ($datos->getBelongsTo()->getPrimaryKeyValue() > 0) {
                 $clasePadre = $datos->getClassName();
                 $urlPadre = new CpanUrlAmigables();
                 $filtro = "Idioma='{$_SESSION['idiomas']['actual']}' and Entity='{$clasePadre}' and IdEntity='{$datos->getBelongsTo()->getPrimaryKeyValue()}'";
                 $rows = $urlPadre->cargaCondicion("Controller,Action,Template,Parameters", $filtro);
                 $row = $rows[0];
                 if ($row) {
                     // Si la entidad tiene padre (belongsto), pongo el controller del padre
                     $urls->setController($row['Controller']);
                     $urls->setAction($row['Action']);
                     $urls->setTemplate($row['Template']);
                     $urls->setParameters($row['Parameters']);
                 }
             }
             $urls->setIdioma($_SESSION['idiomas']['actual']);
             $urls->setUrlFriendly($this->entity . $datos->getPrimaryKeyValue());
             $urls->setEntity($this->entity);
             $urls->setIdEntity($datos->getPrimaryKeyValue());
             $idUrl = $urls->create();
         }
         $rows = $urls->cargaCondicion("Id, Entity, IdEntity", "Idioma='{$_SESSION['idiomas']['actual']}' and UrlFriendly='{$urlAmigable}'");
         $row = $rows[0];
         if ($row['Id'] and ($row['Entity'] != "{$this->entity}" or $row['IdEntity'] != "{$datos->getPrimaryKeyValue()}")) {
             // Ya existe esa url amigable, le pongo al final el id
             $urlAmigable .= "-" . $idUrl;
             $slug .= "-" . $idUrl;
         }
         $urls = new CpanUrlAmigables($idUrl);
         $urls->setUrlFriendly($urlAmigable);
         $urls->setEntity($this->entity);
         $urls->setIdEntity($datos->getPrimaryKeyValue());
         $urls->setPrivacy($datos->getPrivacy()->getIDTipo());
         $urls->setAccessProfileList($datos->getAccessProfileList());
         $urls->setAccessProfileListWeb($datos->getAccessProfileListWeb());
         $urls->save();
     }
     $array = array();
     if ($urlPrefix . $urlAmigable . $slug) {
         $array = array('prefix' => $urlPrefix, 'url' => $urlAmigable, 'slug' => $slug);
     }
     return $array;
 }
コード例 #2
0
 static function actualizaUrlAmigable($controller, $entidad, $idEntidad, $slug)
 {
     $slug = Textos::limpia($slug);
     $objeto = new $entidad($idEntidad);
     $objeto->setSlug($slug);
     $objeto->setUrlFriendly("/" . $slug);
     $objeto->setUrlHeritable(0);
     $objeto->save();
     $url = new CpanUrlAmigables();
     $url->setIdioma(0);
     $url->setUrlFriendly("/" . $slug);
     $url->setEntity($entidad);
     $url->setIdEntity($idEntidad);
     $url->setController($controller);
     $url->setAction('Index');
     $url->setTemplate('Index');
     $url->create();
     return $slug;
 }