Sito One Page

Salve sto realizzando un sito Onepage con yii

Ho proceduto cosi per implementare tutte le sezioni nella vista site view/site/index.php




<?php

/* @var $this SiteController */


$this->pageTitle=Yii::app()->name;


Yii::import('application.controllers.SliderController');

$controller_instance = new SliderController("Slider"); //string $id, CWebModule $module=NULL

$controller_instance->actionIndex();


$this->renderPartial('pages/about');


Yii::import('application.controllers.ModelliController');

$controller_instance = new ModelliController("Modelli"); //string $id, CWebModule $module=NULL

$controller_instance->actionIndex();


$this->renderPartial('pages/servizi');


Yii::import('application.controllers.SiteController');

$controller_instance = new SiteController("Site"); //string $id, CWebModule $module=NULL

$controller_instance->actionContact();


?>



cosi facendo riesco ad implementare tutte le sezioni,e riesco a far scrollare la pagina con l’animazione tramite jquery.

il menu l’ho costruito cosi!,premetto che ho creato un nuovo tema onepage e l’ho posizionato dentro themes,e nel file di configurazione ho configurato in modo che prendesse quello e funziona




<div id="main-menu">

				<div class="container">

					<div class="sixteen columns">

						<nav id="menu">

							


<?php $this->widget('zii.widgets.CMenu',array(

							'id'=>'nav',

							'items'=>array(

								array('label'=>'Home', 'url'=>array('site/index#Home'), 'active' =>'current'),

								array('label'=>'Chi Siamo', 'url'=>array('/site/index#About')),

								array('label'=>'Modelli', 'url'=>array('/site/index#Modelli')),

								array('label'=>'Servizi', 'url'=>array('/site/index#Servizi')),

								array('label'=>'Contatti', 'url'=>array('/site/index#Contatti')),

								),

							'htmlOptions' => array( 'class' => 'menu-nav' ) ,

							

		)); ?>

					

						</nav><!-- end menu -->

					</div>

				</div><!-- end container -->

			</div><!-- end menu -->	



il problema avviene quando cambio pagina, mi spiego meglio…,ad un certo punto quando faccio scorrere la pagina fino alla sezione “modelli” al suo interno ho creato un menu dove si può selezionare la categoria! e funziona…l’url a cui vengo reinderizzato è “http://localhost/sites/applicazione/modelli/categoria?category=MontainBike

qui ottengo i dati filtrati per categoria, se ora provo a cliccare sul menu principale alla voce "Home", in cui posso vedere che il link è "http://localhost/sites/applicazione/site/index#Home", non mi funge clicco e nonostante il link sia corretto non riesco a rientrare in home!; facendo delle prove ho provato ad inserire nella view "categoria" lo stesso menu senza tag html nel seguente modo




<?php $this->widget('zii.widgets.CMenu',array(

							

							'items'=>array(

								array('label'=>'Home', 'url'=>array('site/index#Home')),

								array('label'=>'Chi Siamo', 'url'=>array('/site/index#About')),

								array('label'=>'Modelli', 'url'=>array('/site/index#Modelli')),

								array('label'=>'Servizi', 'url'=>array('/site/index#Servizi')),

								array('label'=>'Contatti', 'url'=>array('/site/index#Contatti')),

								),

							

		)); ?>



se clicco su quel menu…riesco a rientrare in Home!!, perchè?

praticamente se tolgo l’animazione lo scroll




// One Page Nav Activate

		$(document).ready(function() {

			$('#menu').onePageNav({

				scrollOffset:jQuery('#main-menu').outerHeight(),

				begin: function() {

				console.log('start');

				},

				end: function() {

				console.log('stop');

				}

			});

		});



funziona…però no avrei più l’effetto desiderato…,mi chiedo perchè fa conflitto con l’url???

avevo messo lo script nel main del layout… e quindi lo eseguiva sempre!..,spostandolo sulla vista site/index… funziona tutto a dovere, cmq volevo sapere se è corretto l’impostazione che ho fatto per il sito onepage, usando il renderPartial in effetti ho un “buco”, se per esempio qualcuno digitasse questo link http://localhost/sites/applicazione/modelli/", si vedrebbe una pagina senza css caricati!..questo perchè…




public function actionIndex()

	{

		$dataProvider=new CActiveDataProvider('Modelli');

		$this->renderPartial('index',array(

			'dataProvider'=>$dataProvider,

		));

	}




Secondo me è tutto sbagliato. Stai usando un framework senza usare un framework. Butta pure via Yii, non ti serve, usa il classico vecchio php from scratch.

Perchè?..ci sono rimasto male :( …,devo seguire un’altra direzione…o per fare un sito onepage non va bene?..vorrei capire

diciamo che yii offre tanto, ma nel tuo caso ti è servito a poco, anzi forse ti ha complicato leggermente le cose :lol: , comunque capisco che anche a scopo didattico uno ci si avvicini anche per progetti minuscoli.

riguardo alla tua richiesta per quello che renderizza chiamando alcune rotte non previste

"http://localhost/sites/applicazione/modelli/", imposta la defaultAction nel controller di riferimento a tuo piacimento, e il layout corretto e dovresti risolvere.

in questa maniera




class ModelliController extends CController

{

  public $layout='//layouts/main';

  public $defaultAction = 'index';


  public function actionIndex()

  {


  }


}



siccome avevo una sezione prodotti con una relazione una a molti,un pannello di controllo,il sito dovrà essere modificato più volte,mi era sembrato più comodo :D, e cmq volevo fare esperienza…,sperando di fare progetti più grandi,anche se comunque è un progetto piccolo…penso mi serva anche per imparare,la risposta di sensorario mi aveva scoraggiato!,ma penso che non l’abbia detto in quel senso :), cmq per evitare quel problema seguirò il tuo consiglio, ci sarebbe stato anche un’altro modo per implementare tutto su un unica view…per ottenere il website one page?

bhe chiaramente si riferiva al tuo approccio di “fischiare” tutto nella view, senza rispettare il contesto in cui stai lavorando, e lo standard MVC che è alla base del framework :D

quindi questo vuol dire…che fare un sito one page con yii è sprecato?

No, è proprio sbagliato. Yii è un framework MVC. Una applicazione di una pagina, non è MVC. Quindi Non ti serve Yii. Tutto qui.

grazie :) ora è più chiaro

Io non sono d’accordissimo… grazie a yii sto realizzando un sito che è “onepage” per desktop e “multipage” per mobile. Non dico che visto che si possa fare sia giusto. Però non capisco l’affermazione “è proprio sbagliato” e soprattutto non la condivido. “onepage” o “multipage” è solo una questione di layout… o mi sfugge qualcosa?

Ti sfugge che Yii è un framework MVC.

E secondo te un’applicazione single page non può essere realizzata sfruttando il pattern MVC?

Si, ma rispettando il pattern MVC.

Per capirci, … tu non stai usando il controller.

Io avevo chiesto indicazioni su che strada seguire, se come ho proceduto era sbagliato…,volevo solo capire qual’era la strada corretta!,anche io dalla tua affermazione ho capito che era proprio irrealizzabile :)

La strada è il pattern MVC. Ma per capire come funziona devi solo leggere la documentazione.

si ho capito…, io ho sbagliato perchè ho implementato su una view…, avrei dovuto agire sul controller?

Dai una letta qui: Model View Control

ok!