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; }
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; }