lcnlcn
(Lcnlcn)
November 4, 2014, 1:04pm
1
Ciao a tutti sono nuovo in Yii2 pertanto potrei dire anche cavolate ma ho un problema
nel mio main.php è più precisamente nel layout frontend ho il comando include di php
<?php
include (’_headerfrontend.php’);
?>
e questo è il file _headerfrontend.php :
<header class="header" >
<?php
NavBar::begin([
'brandLabel' => 'My Company',
'brandUrl' => Yii::$app->homeUrl,
'options' => [
'class' => 'navbar navbar-static-top' ,
'role' => 'navigation',
'style' => 'margin-bottom : 0px',
],
]);
$menuItems = [
['label' => 'Home', 'url' => ['/site/index']],
['label' => 'About', 'url' => ['/site/about']],
['label' => 'Contact', 'url' => ['/site/contact']],
];
if (Yii::$app->user->isGuest) {
$menuItems[] = ['label' => 'Signup', 'url' => ['/site/signup']];
$menuItems[] = ['label' => 'Login', 'url' => ['/site/login']];
} else {
$menuItems[] = [
'label' => 'Logout (' . Yii::$app->user->identity->username . ')',
'url' => ['/site/logout'],
'linkOptions' => ['data-method' => 'post']
];
}
echo Nav::widget([
'options' => ['class' => 'navbar-nav navbar-right'],
'items' => $menuItems,
]);
NavBar::end();
?>
</header>
Quando visualizzo la pagina principale mi da errore #2
ho notato nel sorgente mi visualizza oltre a tutta la pagina anche il div con classe header
per cui presumo che il file _headerfrontend.php lo trova ma perchè non esegue tutto il resto?
incluso nei tag <?php e ?>
dove sbaglio ?
nonzod
(Nicola)
November 4, 2014, 3:21pm
2
Stai usando Yii quindi usa gli strumenti che Yii ti da!
Per includere viste in una vista ci sono i metodo appositi
lcnlcn
(Lcnlcn)
November 4, 2014, 3:25pm
3
ti ringrazio ma ho risolto nel file _headerfrontend.php mancano gli use del nav e navbar
ciao
Bene che hai risolto, ma non sottovaluterei quello che ha detto Nicola, implicitamente: yii tra le altre cose ha degli helper e dei metodi che non sono altro che wrapper ben scritti (e ben funzionanti, spesso con fallback in caso di errori) di funzioni php native, quindi è caldamente consigliato l’uso di yii e dei suoi strumenti in tutte le salse, piuttosto che dover reinventare la ruota tutte le volte.
Ciao
realtebo
(Mirkotebaldi)
November 5, 2014, 10:12am
5
Si, mi accodo anche io, NON fare a mano cose che Yii può e deve fare in automatico.
Quell’include poteva tranquillamente essere un renderPartial, o, ancora meglio, una modifica al tema
lcnlcn
(Lcnlcn)
November 5, 2014, 12:57pm
6
Scusate sono un po confuso :
vorrei dividere il main frontend in più viste in questa maniera
<?php
use yii\helpers\Html;
use yii\bootstrap\Nav;
use yii\bootstrap\NavBar;
use yii\widgets\Breadcrumbs;
use frontend\assets\AppAsset;
use frontend\widgets\Alert;
/* @var $this \yii\web\View */
/* @var $content string */
AppAsset::register($this);
?>
<?php $this->beginPage() ?>
<!DOCTYPE html>
<html lang="<?php Yii::$app->language ?>">
<head>
<meta charset="<?php Yii::$app->charset ?>"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<?php Html::csrfMetaTags() ?>
<title><?= Html::encode($this->title) ?></title>
<?php $this->head() ?>
</head>
<body class="skin-blue">
<?php $this->beginBody() ?>
<div class="wrap">
<!-- Inizio Header Navbar -->
<?php include(Yii::getAlias('@common') . '/layouts/_headerfrontend.php');?>
<!-- Fine Header Navbar -->
<!-- Inizio Content -->
<?php include (Yii::getAlias('@common') . '/layouts/_content.php');?>
<!-- Fine Content -->
</div>
<!-- Inizio Footer -->
<?php include (Yii::getAlias('@common') . '/layouts/_footer.php');?>
<!-- Fine Footer -->
<?php $this->endBody() ?>
</body>
</html>
<?php $this->endPage() ?>
come vedete il main è stato diviso in Header Content e Footer
utilizzando il comando include di php utilizzando invece come dite voi
i comandi yii2 cosa dovrei fare ?
realtebo
(Mirkotebaldi)
November 5, 2014, 3:09pm
7
Il file che ci hai copia/incollato qui sopra, immagino e spero che sia il view\layouts\main.php. Me lo confermi?
Ah, se è così, allora ha senso usare include/require… pensavo che stavi modificando una VISTA
lcnlcn
(Lcnlcn)
November 5, 2014, 4:49pm
8
infatti è il main sotto view/layout
quindi ho fatto bene
grazie
nonzod
(Nicola)
November 5, 2014, 5:15pm
9
Mi intrometto solo per dire che anche main.php è una vista (per vista si intende un oggetto \yii\web\View), come avrai notato tra i commenti c’è
/**
* @var \yii\web\View $this
* @var string $content
*/
che ti dice proprio che $this è una istanza di \yii\web\View
Quindi se, ad esempio, hai questi due files dentro view/layout :
nel main.php andrai a mettere:
...
<?= $this->render('_header'); ?>
...
Se vuoi passare una variabile o un oggetto ad una vista andrai ad aggiungere un parametro a render(), in questo modo:
...
<?= $this->render('_content', ['content' => $content]); ?>
...
In realtà, per quello che vuoi fare tu, potrebbe anche essere comodo usare i blocchi, ma ovviamente sta allo sviluppatore scegliere come strutturare la sua app!
realtebo
(Mirkotebaldi)
November 6, 2014, 9:53am
10
Wow, Nicola, ti darei +2 invece che +1 perchè ho imparato 2 cose in un colpo solo