Vai al contenuto

Friendly url IPS 4.0

Featured Replies

Inviato

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

Inviato
  • Admin

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

Inviato
  • Autore

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

Inviato
  • Autore

Dunque...alla voce interessata ho questo:

Friendly URL http://www.gameinvaders.it/forum/topic/{#id}-{?}

al posto di topic cosa devo inserire per avere il nome della sezione?

Inviato

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.

Inviato
  • Autore

Ok...grazie per la tua risposta ;)

Inviato

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 :(
Inviato
  • Autore

Posso provare a fare la modifica e magari ti aggiorno se il tutto funge come dovrebbe.

Inviato
  • Autore

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.

Inviato

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

Per favore accedi per lasciare un commento

Potrai lasciare un commento dopo aver effettuato l'accesso

Accedi Ora

Chi sta navigando 0

  • Nessun utente registrato visualizza questa pagina.

Informazioni importanti

Abbiamo inserito dei cookies nel tuo dispositivo per aiutarti a migliorare la tua esperienza su questo sito. Puoi modificare le impostazioni dei cookie, altrimenti puoi accettarli cliccando su continua. to insert a cookie message.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.