{"action":"created","issue":{"url":"https://api.github.com/repos/pa-de-solminihac/clementine-framework-module-crud/issues/6","labels_url":"https://api.github.com/repos/pa-de-solminihac/clementine-framework-module-crud/issues/6/labels{/name}","comments_url":"https://api.github.com/repos/pa-de-solminihac/clementine-framework-module-crud/issues/6/comments","events_url":"https://api.github.com/repos/pa-de-solminihac/clementine-framework-module-crud/issues/6/events","html_url":"https://github.com/pa-de-solminihac/clementine-framework-module-crud/issues/6","id":56064495,"number":6,"title":"améliorer la documentation","user":{"login":"pa-de-solminihac","id":2463094,"avatar_url":"https://avatars.githubusercontent.com/u/2463094?v=3","gravatar_id":"","url":"https://api.github.com/users/pa-de-solminihac","html_url":"https://github.com/pa-de-solminihac","followers_url":"https://api.github.com/users/pa-de-solminihac/followers","following_url":"https://api.github.com/users/pa-de-solminihac/following{/other_user}","gists_url":"https://api.github.com/users/pa-de-solminihac/gists{/gist_id}","starred_url":"https://api.github.com/users/pa-de-solminihac/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pa-de-solminihac/subscriptions","organizations_url":"https://api.github.com/users/pa-de-solminihac/orgs","repos_url":"https://api.github.com/users/pa-de-solminihac/repos","events_url":"https://api.github.com/users/pa-de-solminihac/events{/privacy}","received_events_url":"https://api.github.com/users/pa-de-solminihac/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/pa-de-solminihac/clementine-framework-module-crud/labels/1%20-%20Ready","name":"1 - Ready","color":"CCCCCC"},{"url":"https://api.github.com/repos/pa-de-solminihac/clementine-framework-module-crud/labels/enhancement","name":"enhancement","color":"84b6eb"}],"state":"open","locked":false,"assignee":{"login":"pa-de-solminihac","id":2463094,"avatar_url":"https://avatars.githubusercontent.com/u/2463094?v=3","gravatar_id":"","url":"https://api.github.com/users/pa-de-solminihac","html_url":"https://github.com/pa-de-solminihac","followers_url":"https://api.github.com/users/pa-de-solminihac/followers","following_url":"https://api.github.com/users/pa-de-solminihac/following{/other_user}","gists_url":"https://api.github.com/users/pa-de-solminihac/gists{/gist_id}","starred_url":"https://api.github.com/users/pa-de-solminihac/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pa-de-solminihac/subscriptions","organizations_url":"https://api.github.com/users/pa-de-solminihac/orgs","repos_url":"https://api.github.com/users/pa-de-solminihac/repos","events_url":"https://api.github.com/users/pa-de-solminihac/events{/privacy}","received_events_url":"https://api.github.com/users/pa-de-solminihac/received_events","type":"User","site_admin":false},"milestone":null,"comments":9,"created_at":"2015-01-30T18:00:26Z","updated_at":"2015-03-20T22:38:57Z","closed_at":null,"body":"Notamment les points suivants : \r\n- l'explication sur tout ce que le module CRUD permet de faire est incomplète, et peut être pas à sa place\r\n- expliquer quel est le point d'entrée une fois installé (les URL : /**monmodule**, /**monmodule**/create etc.)\r\n\r\nExpliquer également comment on personnalise l'affichage : \r\n  + en renommant un champ avec \r\n```php\r\n$this->mapFieldName('table.champ', 'Mon <em>beau</em>nom');\r\n```\r\n  + en masquant un champ avec \r\n```php\r\n$this->hideField('table.champ');\r\n```\r\n  + en changeant l'ordre des champs avec \r\n```php\r\n$this->moveField('table.champ', 'table.champ_avant_lequel_insérer');\r\n```\r\n  + en forcant le type d'un champ en surchargeant la fonction `override_fields`, notamment pour créer des champs d'upload : \r\n```php\r\n$this->overrideField('table.field', 'file', array(\r\n    'max_filesize' => 10000000,\r\n    'extensions'   => array('jpg', 'pdf'),\r\n    'dest_dir'     => __FILES_ROOT__ . '/files/media',\r\n));\r\n```\r\n\r\n  + en surchargeant les vues utilisées pour générer le HTML d'un champ, dans le fichier view/**monmodule**/update_fields/custom_**table**.**champ**.php : \r\n\r\n  + en créant des champs `custom` avec \r\n```php\r\n// un simple champ vide\r\n$this->addField('table.fake_field');\r\n// un champ calculé avec définition SQL\r\n$this->addField('table.calculated_field', null, array(\r\n    'sql_definition' => 'CONCAT(IF(...))'\r\n));\r\n```\r\n\r\n  + en masquant des sections avec \r\n```php\r\n$this->hideSection('xlsbutton');\r\n```\r\n\r\n- comment on peut gérer plusieurs tables et leurs relations gràce à l'attribut `$this->tables` du modèle : \r\n  + `inner join`\r\n  + `left join`, `group by` et tables en lecture seule\r\n\r\n- comment on peut utiliser CRUD pour compléter des modules existants (exemple : module `users`, module `push`)\r\n\r\n- comment on le skin avec le module `skinbo` sans casser le fonctionnement en AJAX : \r\n  + installer la dépendance `skinbo=2`\r\n  + ajouter une entrée dans le menu admin en surchargeant `view/design/menu_admin.php`\r\n  + surcharger la vue de la page `index` en créant le fichier view/**monmodule**/index.php : \r\n```php\r\nif (!$request->AJAX) {\r\n    $this->getBlock('design/header-admin', $data, $request);\r\n}\r\n$this->getParentBlock($data, $request);\r\nif (!$request->AJAX) {\r\n    $this->getBlock('design/footer-admin', $data, $request);\r\n}\r\n```\r\n\r\n- comment on protège une page avec des droits (installer la dépendance `users=4`, surcharger les contrôleurs des pages à protéger en utilisant : \r\n```php\r\n$this->getModel('users')->needPrivilèges('nom_du_privilege');\r\n```\r\n"},"comment":{"url":"https://api.github.com/repos/pa-de-solminihac/clementine-framework-module-crud/issues/comments/84171054","html_url":"https://github.com/pa-de-solminihac/clementine-framework-module-crud/issues/6#issuecomment-84171054","issue_url":"https://api.github.com/repos/pa-de-solminihac/clementine-framework-module-crud/issues/6","id":84171054,"user":{"login":"pa-de-solminihac","id":2463094,"avatar_url":"https://avatars.githubusercontent.com/u/2463094?v=3","gravatar_id":"","url":"https://api.github.com/users/pa-de-solminihac","html_url":"https://github.com/pa-de-solminihac","followers_url":"https://api.github.com/users/pa-de-solminihac/followers","following_url":"https://api.github.com/users/pa-de-solminihac/following{/other_user}","gists_url":"https://api.github.com/users/pa-de-solminihac/gists{/gist_id}","starred_url":"https://api.github.com/users/pa-de-solminihac/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pa-de-solminihac/subscriptions","organizations_url":"https://api.github.com/users/pa-de-solminihac/orgs","repos_url":"https://api.github.com/users/pa-de-solminihac/repos","events_url":"https://api.github.com/users/pa-de-solminihac/events{/privacy}","received_events_url":"https://api.github.com/users/pa-de-solminihac/received_events","type":"User","site_admin":false},"created_at":"2015-03-20T22:38:57Z","updated_at":"2015-03-20T22:38:57Z","body":"Parler des nouveautés de CRUD 5, notamment :\r\nResponsive design\r\n---\r\n- intégration avec le module **BOOTSTRAP3** et responsive design avec **BOOTSTRAP3CRUD** : module permettant de skinner les formulaires **CRUD** avec bootstrap / bootstrap-material.\r\n- vue `index` responsive, CSS en `table-layout: fixed` (désactivable avec l'option de config `[module_crud]table_layout_fixed`)\r\n\r\nHeader et footer\r\n---\r\n- chargement automatique des blocks header et footer s'ils existent (`monmodule/header` et `monmodule/footer` du module héritant de **CRUD**, voire `crud/header` et `crud/footer` par défaut).\r\n- header/footer surchargeables par page : `module/header-create.php` par exemple\r\n- ajout de `header`,`footer`,`updatebutton` aux sections masquables avec `hideSection`\r\n\r\nPersonnalisation des formulaires générés\r\n---\r\n- surcharges facilitées des classes CSS et libellés des boutons avec les fonctions `addClass`/`removeClass` (qui manipulent `$this->data['more_classes_*']` et `$this->data['button_label_*']`)\r\n- fonction `wrapFields()` pour encadrer un (ou une série de) champ(s) avec un block ouvrant et un block fermant\r\n\r\nPersonnalisation des liens\r\n---\r\n`'url_retour_parameters'` dans l'`url_retour` (par exemple pour récupérer l'id de l'enregistrement qu'on vient de créer)\r\n- passage de paramètres dans toutes les URL générées grâce à `setOption('url_parameters', ...)`\r\n\r\nMappings\r\n---\r\n- mapping `'togglebutton'` pour une checkbox interprétée spécialement si skin avec le module **BOOTSTRAP3MATERIAL**\r\n- mapping `span` pour un simple affichage (avec champ \"hidden\" correspondant)\r\n- mapping `input` pour forcer un `input type=\"text\"`\r\n- gestion des attributs HTML `readonly` fonctionne sur `textarea`, `input [type=*]`, `date/time`, `checkbox`, `togglebutton`, `radio`, et `file`), `disabled`, et `autofocus`, positionnable par le biais de la fonction `overrideField` qui permet aussi de surcharger toutes les métas\r\n- mapping `'date'`/`'time'`/`'datetime'`, et formats de dates configurables avec `[module_crud]default_date_format`.\r\n- intégration avec le module **BOOTSTRAP3DATETIMEPICKER** pour avoir eonasdan-datetimepicker (soit en fallback pour les navigateurs qui ne gèrent pas nativement le champ en HTML5, soit systématiquement si on le configure avec `[module_bootstrap3datetimepicker]force_crud_datepicker=1`)\r\n\r\nHooks\r\n---\r\n- hook `alter_post` pour permettre de modifier/compléter les données postées avant de les sauver\r\n- hooks `wrap_fields_*` pour centraliser les appels à `wrapFields()`\r\n- ajout de `$request` comme premier paramètre dans les hooks `add_fields*`, `override_fields*`, `move_fields*`, `rename_fields*`, `hide_sections*`, `hide_fields*`, `alter_values*`, `wrap_fields*`"}}