Transmission de variable avec $this->passedArgs
Bonsoir, après avoir installer cake, j'ai essayer la création d'un blog:
j'ai commencé a faire la pagination:
1- on crée une pagination des différents article proposé, elle son numéroté de
1 à N
2- on crée a droite une autre pagination mais cette fois par des liens(on utlise $html->link , on affiche les différents catégories , et si on clique dessus on tombe sur le groupe d'article qui correspond a un thème.
j'ai réussi a faire la pagination de numérotation ( on clique sur 1|2|3 etc..)
pour essayer d'expliquer la chose, car c'est pas évident je montre ma table qui s'appelle posts
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
--
-- TABLE posts
________________
--
CREATE TABLE IF NOT EXISTS `posts` (
`id` int(3) unsigned NOT NULL AUTO_INCREMENT,
`titre` varchar(60) NOT NULL,
`contenu` longtext NOT NULL,
`date` datetime NOT NULL,
`category_id` int(2) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ; |
ici on a une clef étrangère category_id qui est lié a une table catégories,la voici
Code:
1 2 3 4 5 6
|
TABLE categories
______________
id titre
1 entreprise
2 article |
ici c'est le script (la vu) aquel j'ai un lien qui contient la page des différent a un autre groupe d'article (si j'efface ce bout de scipt je n'ai pas d'erreur)
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
$menu = $this->requestAction
(array ("controller"=>"Categories","action"=>"clist") );
foreach ($menu as $m)
{
$m=$m['Category'];
echo "<li>"
.$html->link($m['titre'],
array("controller"=>"Posts","action"=>"category",$m['id'])).'</li>';
} |
voici ce que le controleur va recupère
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
Array
(
[0] => Array
(
[Category] => Array
(
[id] => 1
[titre] => entreprise
)
)
[1] => Array
(
[Category] => Array
(
[id] => 2
[titre] => article
)
)
) |
lorsque que je clique sur le lien ($html->link...) j'ai une erreur
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
Missing Method in PostsController
Error: The action category is not defined in controller PostsController
Error: Create PostsController::category() in file: app\controllers\posts_controller.php.
<?php
class PostsController extends AppController {
var $name = 'Posts';
function category() {
}
}
?>
Notice: If you want to customize this error message, create app\views\errors\missing_action.ctp. |
lorsque je survole le lien j'ai bien afficher:
Code:
1 2 3
|
http://localhost/cakephp/Posts/category/1 (ou bien 2 pour l'autre lien)
donc je suppose que la vu envoie bien les informations necessaires |
a la fin du tuto il est indiquée:
Code:
1 2 3
|
* Edit : Lorsque vous changez de page dans une catégorie le système "bug". En effet, j'ai oublié de préciser à paginator qu'il devait faire passer l'id de la catégorie en paramètre. Pour régler le souci il faut ajouter dans la vue avant la première utilisation de paginator :
$paginator->options(array('url' => $this->passedArgs)); |
d'après ce que j'ai compris il faut mettre ce bout de scipt avant de faire un $paginator, je l'ai donc ajouté:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
<div id="map">
<?php
$paginator->options(array('url' => $this->passedArgs));
echo $paginator->numbers();
foreach($resultat as $a):
echo '<div>'.$html->image('/structure/image/logo.png').'<p><span>'.$a["Post"]
["titre"].'</span></p></div>';
echo '<br/><span>'.
date("d/m/y",strtotime($a['Post']['date'])).'::'.$a['Category']['titre']
.'</span>';
echo '<p>'.$a["Post"]["contenu"].'</p>';
endforeach
?>
</div> |
ici c'est le bout de scipt(en amont) de la même vu (le bout de script ou on clique sur le lien)
je donne les 2 modèles je suis sous ph5
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
<?php
class Category extends AppModel {
}
?>
_____________________________
<?php
class Post extends AppModel {
public $belongsTo='Category';
}
?> |
avec le MCV c'est 3 fois plus difficiles a expliquer le problème on ne peut dissocier les bouts de script.
cela n'a rien changé au problème :(
si quelqu'un a le courage de m'aider(faut avoué que c'est super long...:roll:)
merci d'avance :)