Bonjour à tous,
Voila, j'ai cherché toute la journée et la j'abandonne ...
J'ai trouver la source d'un plugin pour cake 1.3 pour integrer le plugin datatable de jQuery.
dataTable est un plugin qui permet d'afficher, filter, trier des données dans un tableau.
J'ai réussi à l'integrer en mode normal (sans ajax), et j'ai vu que ce plugin fonctionne avec ajax, j'ai donc chercher à l'integrer via cakephp.
J'ai donc récupérer ce plugin, j'ai effectué les transformations pour qu'il soit compatible avec Cakephp 2 mais la je bug.
Quelqu'un s'y connait en component ? je n'arrive pas a acceder au données du model dans celui-ci :/
j'ai une erreur :
Fatal error: Call to a member function find() on a non-object in /Users/Adrien/Dropbox/PHP/Projet/app/plugins/Datatables/Controllers/Components/DatatablesComponent.php on line 93
et la ligne concerné :
$rResult = $this->$dataTables'use']->find('all', $n);
Voici le component modifié : ICI
le helper : ICI
l'appel :
public function membre_operation(){
$dataTables = array(
'sTable' => 'Compte',
'aColumns' => array(
'id' => array(
'sName' => 'id',
'sortable' => true,
'searchable' => true,
'aaSorting' => 'desc',
),
'solde' => array(
'sName' => 'solde',
'searchable' => false,
),
'name',
),
'use' => 'Compte', // Could this be the same as sTable? if so remove it and fix the component
'sAjaxSource' => array(
'action' => 'operation'
)
);
if ($this->request->is('ajax')) {
$this->autoRender = false;
debug($this->request);
$this->Datatables->output($dataTables);
}else{
//$this->Datatables->output($dataTables);
$this->set('dataTables', $dataTables);
}
Merci pour votre aide :)
Bon je t'ai envoyé les modifs.
C'est pas choses faciles, il y avait la fonction initialize qui n'était pas bonne.
En fonction, il fallait changer tout le fichier.
Dans ton js, tu avais un appel get avec sColumn, mais c'est sNames qui faut mettre.
Voilà ça fonctionne il y a bien un retour, maintenant il faut le mettre dans ton tableau.
A+
Corrigé mais toujours pareil, j'ai essayé de remplacer par $this->Compte->find vue que le model c'est Compte mais j'ai toujours la même erreur j'ai l'impression qu'il n'a pas chargé le model.
Au début du code j'avais une fonction qui posait problème, je l'ai enlever mais je pense que cela vien de ca :
function initialize(&$controller, $settings = array()) {
$this->controller =& $controller;
foreach ($this->controller->modelNames as $modelClass){
$controller->loadModel($modelClass);
$this->$modelClass = $controller->$modelClass;
}
}
qui generai ceci :
Notice (8): Trying to get property of non-object [APP/plugins/Datatables/controllers/components/DatatablesComponent.php, line 39]
Warning (2): Invalid argument supplied for foreach() [APP/plugins/Datatables/controllers/components/DatatablesComponent.php, line 39]
j'ai donc modifié le code par ca :
public function initialize($controller) {
$this->Controller = $controller;
}
Tu peux afficher un debug($this->$dataTables'use']) en dessous de la ligne et dire ce que ça affiche?
Le "$" il faut le laisser méaculpa^^
$dataTables = array(
"sTable" => "Compte",
"aColumns" => array(
"id" => array(),
"solde" => array(),
"name"
),
"use" => "Compte",
"sAjaxSource" => array(
"action" => "operation"
)
$this->$dataTables'use'] renvoie rien j'ai du faire un $this->$dataTables
Ok toujours au même endroit essaye $this->Compte, directement avec un debug.
Désolé si je fais pas étape, mais vu que j'ai pas le code directement au bout de mon clavier, je te dis ce que je ferai pas étape^^
Merci !
Je tien a dire qu'il utilise bien le component
Il est déclaré dans mon appcontroller
Essaye de faire un :
debug($this->Compte);
Juste au dessus de :
$this->Datatables->output($dataTables);
[code]Compte Object ( [actsAs] => Array ( [0] => Containable ) [displayField] => name [validate] => Array ( [name] => Array ( [notempty] => Array ( [rule] => Array ( [0] => notempty ) ) ) [proprietaire_id] => Array ( [numeric] => Array ( [rule] => Array ( [0] => numeric ) ) ) [compte_parent] => Array ( [numeric] => Array ( [rule] => Array ( [0] => numeric ) ) ) [solde] => Array ( [rule] => Array ( [0] => decimal ) ) [solde_initial] => Array ( [rule] => Array ( [0] => decimal ) ) ) [belongsTo] => Array ( [User] => Array ( [className] => User [foreignKey] => user_id [conditions] => [fields] => [order] => [counterCache] => ) ) [hasAndBelongsToMany] => Array ( [Proprietaire] => Array ( [className] => Proprietaire [joinTable] => proprietaires_comptes [foreignKey] => compte_id [associationForeignKey] => proprietaire_id [unique] => 1 [conditions] => [fields] => [order] => [limit] => [offset] => [finderQuery] => [deleteQuery] => [insertQuery] => [with] => ProprietairesCompte [dynamicWith] => 1 ) ) [hasMany] => Array ( [Operation] => Array ( [className] => Operation [foreignKey] => compte_id [dependent] => 1 [conditions] => [fields] => [order] => [limit] => [offset] => [exclusive] => true [finderQuery] => [counterQuery] => ) ) [useDbConfig] => default [useTable] => comptes [id] => [data] => Array ( ) [table] => comptes [primaryKey] => id [_schema:protected] => [validationErrors] => Array ( ) [validationDomain] => [tablePrefix] => [name] => Compte [alias] => Compte [tableToModel] => Array ( [comptes] => Compte ) [cacheQueries] => [hasOne] => Array ( ) [Behaviors] => BehaviorCollection Object ( [modelName] => Compte [_methods:protected] => Array ( [contain] => Array ( [0] => Containable [1] => contain ) [resetBindings] => Array ( [0] => Containable [1] => resetBindings ) [containments] => Array ( [0] => Containable [1] => containments ) [fieldDependencies] => Array ( [0] => Containable [1] => fieldDependencies ) [containmentsMap] => Array ( [0] => Containable [1] => containmentsMap ) ) [_mappedMethods:protected] => Array ( ) [_enabled:protected] => Array ( [0] => Containable ) [_loaded:protected] => Array ( [Containable] => ContainableBehavior Object ( [types] => Array ( [0] => belongsTo [1] => hasOne [2] => hasMany [3] => hasAndBelongsToMany ) [runtime] => Array ( ) [settings] => Array ( [Compte] => Array ( [recursive] => 1 [notices] => 1 [autoFields] => 1 ) ) [mapMethods] => Array ( ) ) ) ) [whitelist] => Array ( ) [cacheSources] => 1 [findQueryType] => [recursive] => 1 [order] => [virtualFields] => Array ( ) [_associationKeys:protected] => Array ( [belongsTo] => Array ( [0] => className [1] => foreignKey [2] => conditions [3] => fields [4] => order [5] => counterCache ) [hasOne] => Array ( [0] => className [1] => foreignKey [2] => conditions [3] => fields [4] => order [5] => dependent ) [hasMany] => Array ( [0] => className [1] => foreignKey [2] => conditions [3] => fields [4] => order [5] => limit [6] => offset [7] => dependent [8] => exclusive [9] => finderQuery [10] => counterQuery ) [hasAndBelongsToMany] => Array ( [0] => className [1] => joinTable [2] => with [3] => foreignKey [4] => associationForeignKey [5] => conditions [6] => fields [7] => order [8] => limit [9] => offset [10] => unique [11] => finderQuery [12] => deleteQuery [13] => insertQuery ) ) [_associations:protected] => Array ( [0] => belongsTo [1] => hasOne [2] => hasMany [3] => hasAndBelongsToMany ) [__backAssociation] => Array ( ) [__backInnerAssociation] => Array ( ) [__backOriginalAssociation] => Array ( ) [__backContainableAssociation] => Array ( ) [_insertID:protected] => [_sourceConfigured:protected] => [findMethods] => Array ( [all] => 1 [first] => 1 [count] => 1 [neighbors] => 1 => 1 [threaded] => 1 )[/code]
Ok^^ En fait tu avais pas besoin de l'afficher^^ Pas grave.
On va essayé quelque chose, change des bouts de code comme ceci :
$this->Datatables->output($this->Compte, $dataTables);
public function output ($Compte, $dataTables = null){
$rResult = $Compte->find('all', $n);
A voir si ça fonctionne...
J'ai plus l'erreur, par contre mon $this->request ne retourne plus rien :/
Notice (8): Trying to get property of non-object [APP\Plugins\Datatables\Controllers\Components\DatatablesComponent.php, line 70]
Notice (8): Undefined variable: ordering [APP\Plugins\Datatables\Controllers\Components\DatatablesComponent.php, line 88]
Notice (8): Trying to get property of non-object [APP\Plugins\Datatables\Controllers\Components\DatatablesComponent.php, line 89]
Notice (8): Trying to get property of non-object [APP\Plugins\Datatables\Controllers\Components\DatatablesComponent.php, line 90]
Notice (8): Trying to get property of non-object [APP\Plugins\Datatables\Controllers\Components\DatatablesComponent.php, line 95]
Warning (2): implode() [function.implode]: Invalid arguments passed [APP\Plugins\Datatables\Controllers\Components\DatatablesComponent.php, line 104]
Notice (8): Trying to get property of non-object [APP\Plugins\Datatables\Controllers\Components\DatatablesComponent.php, line 105]{"aoColumns":null,"sEcho":0,"iTotalRecords":1,"iTotalDisplayRecords":1,"aaData":]]}
Ligne 70 :
if ( $this->request->query'sSearch'] != "" )
et un debug($this->request) ne donne plus rien :/
Merci pour ton aide
Bon j'ai un peu de mal à piger.
Tu pourrais m'envoyer tout ton répertoire "app" en zip par email? Si ça te dérange pas.
extrarox@hotmail.fr
A+
Au risque de paraitre chiant, il me faut aussi la bdd^^
Et aussi le lien pour aller à la fameuse erreur
Alors problème résolu, déjà tu as mis dans répertoire Plugins, j'ai mis dans Plugin, bon ça change rien, sauf que l'on garde les conventions Cake2.
Après dans app\Plugins\Datatables\Views\Helpers, tu as mis DataTablesHelper.php, et le beug c'est "T", c'est DatatablesHelper.php, encore les conventions.
Après ça fonctionne sauf que ta requete Ajax ne renvoi rien.
Yep, par contre la requete devrait renvoyer quelque chose
en effet il existe un compte dans la bdd et il apparait pas dans le tableau.
j'ai cette erreur dans la console :
jquery.dataTables.min.js:64Uncaught TypeError: Cannot read property 'sEcho' of null