Vai al contenuto
Max

4.x Friendly url IPS 4.0

Recommended Posts

Max

Ciao ragazzi, lo scrivo qui dato che sul forum ufficiale non riesco ad esprimermi come vorrei dato che l'inglese non è proprio il mio forte.

Esiste la possibilità tramite il file .htaccess o altro per far in modo che cliccando, ad esempio su l'ultima risposta postata, il link anzichè essere forum/topic/titolo discussione diventi forum/titolo sezione/titolo dscussione?

Grazie in anticipo per le eventuali risposte ;)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Askancy

Ciao ragazzi, lo scrivo qui dato che sul forum ufficiale non riesco ad esprimermi come vorrei dato che l'inglese non è proprio il mio forte.

Esiste la possibilità tramite il file .htaccess o altro per far in modo che cliccando, ad esempio su l'ultima risposta postata, il link anzichè essere forum/topic/titolo discussione diventi forum/titolo sezione/titolo dscussione?

Grazie in anticipo per le eventuali risposte ;)

Facendo chiarezza, tu vorresti:

 

da:

a

http://esempio.it/forum/14-titioloohttp://esempio.it/forum/sezione/14-titiolo

/forum/14-titolo sinceramente te lo sconsiglio, comunque con IPS4 puoi modificare i Friendly Url direttamente dall'admin senza agire sul htaccess, basta andare su sistema->Configurazione avanzata

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Max

Facendo chiarezza, tu vorresti:

 

da:

a

http://esempio.it/forum/sezione/14-titiolo'>http://esempio.it/forum/14-titioloohttp://esempio.it/forum/sezione/14-titiolo

/forum/14-titolo sinceramente te lo sconsiglio, comunque con IPS4 puoi modificare i Friendly Url direttamente dall'admin senza agire sul htaccess, basta andare su sistema->Configurazione avanzata

L'ideale sarebbe la seconda opzione:

http://esempio.it/forum/sezione/14-titiolo

vedo in admin e vediamo se riesco nel mio intento

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
BomAle

applications\forums\sources\Topic\Topic.php

    /**     * Get URL     *     * @param    string|NULL        $action        Action     * @return    \IPS\Http\Url     */    public function url( $action=NULL )    {        $_key    = md5( $action );        if( !isset( $this->_url[ $_key ] ) )        {            $this->_url[ $_key ] = \IPS\Http\Url::internal( "app=forums&module=forums&controller=topic&id={$this->tid}", 'front', 'forums_topic', array( $this->title_seo ) );                    if ( $action )            {                $this->_url[ $_key ] = $this->_url[ $_key ]->setQueryString( 'do', $action );            }        }            return $this->_url[ $_key ];    }
\system\Http\Url.php

	/**	 * Make friendly	 *	 * @param	string|array	$seoTemplate	The key for making this a friendly URL; or a manual FURL definition	 * @param	string|array	$seoTitles		The title(s) needed for the friendly URL	 * @param	bool			$protocol		Protocol (one of the PROTOCOL_* constants)	 * @return	void	 */	public function makeFriendly( $seoTemplate, $seoTitles, $protocol = 0 )	{		-----------------------			$url = preg_replace_callback( '/{(\#|\@|\?)([^}]+?)?}/i', function( $match ) use ( &$parsed, $titleMatch, $seoTitles, $seoTemplate )			{				if ( $match[1] === '?' )				{					if ( !isset( $match[2] ) )					{						$match[2] = $titleMatch++;					}					if ( !isset( $seoTitles[ $match[2] ] ) )					{						return '';					}					return $seoTitles[ $match[2] ];				}				else				{					$toReturn = ( !empty($parsed[ $match[2] ]) ) ? $parsed[ $match[2] ] : '';					unset( $parsed[ $match[2] ] );					return $toReturn;				}			}, $definition['friendly'] );			$qs = $this->queryString;			parse_str( $definition['real'], $ignore );			foreach ( array_keys( $ignore ) as $i )			{				unset( $qs[ $i ] );			}						$trailingSlash = mb_strpos( $definition['friendly'], '.' ) !== FALSE ? '' : '/';			if ( \IPS\Settings::i()->htaccess_mod_rewrite )			{				$this->setUrl( rtrim( static::baseUrl( $protocol ) . $url, '/' ) . ( $qs ? '/?' . http_build_query( $qs, '', '&' ) : $trailingSlash ) );			}			else			{				$this->setUrl( static::baseUrl( $protocol ) . 'index.php?/' . $url . ( $qs ? '/&' . http_build_query( $qs, '', '&' ) : ( $url ? $trailingSlash : '' ) ) );			}		}				/* Set it */		$this->isFriendly = TRUE;	}
non è possibile, perchè in molte variabili viene usato: applications\forums\sources\Forum\Forum.php

\IPS\Http\Url::internal( "app=forums&module=forums&controller=topic&id={$this->last_id}", 'front', 'forums_topic', array( $this->seo_last_title ) )
senza che passi la variabile del nome della sezione... mi spiace, dovrebbe essere fatto tramite una hook per tale funzione risalendo al forum_name del topic e configurarlo nell'url.

 

EDIT:

 

se vuoi link come:

http://localhost/ips4/index.php?/a-test-forum/t/1-welcome/
devi fare una modifica nella funzione url() del file applications\forums\sources\Topic\Topic.php

cerca quindi:$this->_url[ $_key ] = \IPS\Http\Url::internal( "app=forums&module=forums&controller=topic&id={$this->tid}", 'front', 'forums_topic', array( $this->title_seo ) );e sostituisci con:$this->_url[ $_key ] = \IPS\Http\Url::internal( "app=forums&module=forums&controller=topic&id={$this->tid}&forum_name={$this->container()->name_seo}", 'front', 'forums_topic', array( $this->title_seo ) );
tiJdea9.png

poi occorre configurare il furl nel lato admin esempio proposto:

UYWOaLf.png

{@forum_name} è la variabile che include il nome della sezione parente...

 

questo però non l'ho testato ancora bene... perchè alcuni topic (configurazione iniziale per esempio) non dovrebbero mostrare il nome della sezione/forum che la contiene.

insomma bisogna stare attenti, e testare il tutto ancora.

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
BomAle

Ok...grazie per la tua risposta ;)

ho modificato qua sopra, bisogna ottenere conferme dagli sviluppatori di ips... io non mi assumo la responsabilità di eventuali guasti :(

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Max

Edit:

Funziona solo in parte...mi spiego, se clicco per andare dalla pagina principale del forum all'ultimo messaggio scritto allora mi da errore 404 not found.

Invece se seguo la prassi e cioè cliccando sulla sezione e successivamente sul post allora tutto ok.

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
BomAle

va fatta un altra modifica ovunque venga usato il template "forums_topic"

			if( $this->last_post )			{				$result = array(					'author'		=> \IPS\Member::load( $this->last_poster_id ),					'topic_url'		=> \IPS\Http\Url::internal( "app=forums&module=forums&controller=topic&id={$this->last_id}", 'front', 'forums_topic', array( $this->seo_last_title ) ),					'topic_title'	=> $this->last_title,					'date'			=> $this->last_post				);			}

questo è presente nel file \applications\forums\sources\Forum\Forum.phpGE3hP4e.png

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Crea un account o accedi per lasciare un commento

You need to be a member in order to leave a comment

Crea un account

Iscriviti per un nuovo account nella nostra comunità. È facile!

Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.

Accedi Ora

×