User Tools

Site Tools


documentation:create_first_plugin

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
documentation:create_first_plugin [2015/08/24 05:12]
127.0.0.1 external edit
documentation:create_first_plugin [2015/09/03 04:02]
mooeditor [What is boot setting?]
Line 686: Line 686:
  
 Create new ctp file in **/​app/​Plugin/​Note/​View/​Elements/​myNotes.ctp** Create new ctp file in **/​app/​Plugin/​Note/​View/​Elements/​myNotes.ctp**
 +
 +> New in version 2.2.1> Your ctp file must be place at /​app/​Plugin/​{plugin_name}/​View/​Widgets/​ instead of /​app/​Plugin/​{plugin}/​View/​Elements/​
  
 <file php myNotes.ctp>​ <file php myNotes.ctp>​
Line 763: Line 765:
 <?php $this->​Html->​scriptEnd();​ ?> <?php $this->​Html->​scriptEnd();​ ?>
 </​file>​ </​file>​
 +
 +> New in version 2.2.1> You don't have to use $this→requestAction() method to get the need variables anymore e.g: <font 10.0ptline-height:​ 13.0pt;/​arial;;#​000000;;#​ffffff><?​php $notes = $this→requestAction(array('​plugin'​ ⇒ '​Note',​ '​controller'​ ⇒ '​notes',​ '​action'​ ⇒ '​myNotes'​),​ array('​uri'​ ⇒ $this→here));?></​font>​. Instead, create a file in //​app/​Plugin/​{plugin_name}/​Controller/​Widgets/​{your_element_name}Widget.php//,​ for <font 10.0ptline-height:​ 13.0pt;​font-family:​ Arial , Helvetica , FreeSans , sans-serif;/​Arial , Helvetica , FreeSans , sans-serif;;#​000000;;#​ffffff>​example:</​font>​ <font 10.0ptline-height:​ 13.0pt;​font-family:​ Arial , Helvetica , FreeSans , sans-serif;/​Arial , Helvetica , FreeSans , sans-serif;;#​000000;;#​ffffff>//​app/​Plugin/​Note/​Controller/​Widgets/​myNotesWidget.php//</​font>​ with the content like the below code:
 +<​code>​
 +/* **myNotesWidget.ctp** ​ */
 +<?php
 +App::​uses('​Widget','​Controller/​Widgets'​);​
 +class MyNotesWidget extends Widget {
 +    public function beforeRender(Controller $controller) {
 +        $this->​Note = MooCore::​getInstance()->​getModel('​Note'​);​
 +        $notes = $this->​Note->​find('​all',​ array(
 +            '​conditions'​ => array('​uri'​ => $controller->​request->​here),​
 +            '​limit'​ => 1,
 +            '​order'​ => array('​Note.id'​ => '​DESC'​)
 +        ));
 +        $controller->​set('​notes',​$notes);​
 +    }
 +</​code>​
  
 ==== Create widget database ==== ==== Create widget database ====
Line 1034: Line 1053:
  
 <file php NoteSettingsController.php>​ <file php NoteSettingsController.php>​
- 
 <?php <?php
 class NoteSettingsController extends NoteAppController{ class NoteSettingsController extends NoteAppController{
Line 1100: Line 1118:
  
 Which case do we need? In common, almost plugin settings needn'​t a boot setting, but some still have one such as '​enabled'​ setting which makes us know whether user can access that plugin or not. Why do we need a boot setting? Because when we want to block access, we need to check enable or not in '​routes.php'​ file of plugin; And importantly,​ '​routes.php'​ file is loaded before the system loads unboot settings, so if we don't make '​enabled'​ setting by boot, we can't check it (because that setting doesn'​t exist at that time). Which case do we need? In common, almost plugin settings needn'​t a boot setting, but some still have one such as '​enabled'​ setting which makes us know whether user can access that plugin or not. Why do we need a boot setting? Because when we want to block access, we need to check enable or not in '​routes.php'​ file of plugin; And importantly,​ '​routes.php'​ file is loaded before the system loads unboot settings, so if we don't make '​enabled'​ setting by boot, we can't check it (because that setting doesn'​t exist at that time).
 +
 +> New in version 2.2** ** > In version 2.2, the "​{plugin}_enabled"​ setting have "​is_boot"​ field is '​1'​ by default when you created a new plugin
  
 ==== Create boot setting ==== ==== Create boot setting ====
Line 1262: Line 1282:
   * Update **/​app/​Plugin/​Note/​Model/​Note.php **  like this   * Update **/​app/​Plugin/​Note/​Model/​Note.php **  like this
  
-<code file Note.php>+Note.php
  
 +<code file>
 <?php <?php
 App::​uses('​NoteAppModel',​ '​Note.Model'​);​ App::​uses('​NoteAppModel',​ '​Note.Model'​);​
Line 1305: Line 1326:
  
 <file php bootstrap.php>​ <file php bootstrap.php>​
- 
 <?php <?php
 App::​uses('​NoteListener',​ '​Note.Lib'​);​ App::​uses('​NoteListener',​ '​Note.Lib'​);​
Line 1410: Line 1430:
  
 <file sql /​app/​Plugin/​Note/​Config/​install/​install.sql>​ <file sql /​app/​Plugin/​Note/​Config/​install/​install.sql>​
- 
 CREATE TABLE IF NOT EXISTS {PREFIX}notes ( CREATE TABLE IF NOT EXISTS {PREFIX}notes (
     id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,     id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
Line 1438: Line 1457:
  
 <file sql Copy SQL to /​app/​Plugin/​Note/​Config/​install/​uninstall.sql>​ <file sql Copy SQL to /​app/​Plugin/​Note/​Config/​install/​uninstall.sql>​
- 
 DROP TABLE IF EXISTS {PREFIX}notes;​ DROP TABLE IF EXISTS {PREFIX}notes;​
 DELETE FROM {PREFIX}core_blocks WHERE path_view = '​myNotes';​ DELETE FROM {PREFIX}core_blocks WHERE path_view = '​myNotes';​
Line 1723: Line 1741:
  
 <file php NotesController.php>​ <file php NotesController.php>​
- 
 if ($this->​Note->​save($this->​request->​data)) { if ($this->​Note->​save($this->​request->​data)) {
-        //Tag system ​       +        //Tag system
     $this->​loadModel('​Tag'​);​     $this->​loadModel('​Tag'​);​
     $this->​Tag->​saveTags($this->​request->​data['​Note'​]['​tags'​],​ $this->​Note->​id,​ '​Note_Note'​);​     $this->​Tag->​saveTags($this->​request->​data['​Note'​]['​tags'​],​ $this->​Note->​id,​ '​Note_Note'​);​
     //     //
- +
     $this->​Session->​setFlash(__d('​Note',​ 'Your note has been saved.'​));​     $this->​Session->​setFlash(__d('​Note',​ 'Your note has been saved.'​));​
     return $this->​redirect(array('​action'​ => '​index'​));​     return $this->​redirect(array('​action'​ => '​index'​));​
Line 1737: Line 1754:
  
 <file php add.ctp> <file php add.ctp>
- +//Tag system
-//Tag system ​       +
 <div class="​col-md-2">​ <div class="​col-md-2">​
         <​label><?​=__d('​Note',​ '​Tags'​)?></​label>​         <​label><?​=__d('​Note',​ '​Tags'​)?></​label>​
Line 1754: Line 1770:
  
 <code php> <code php>
- 
 if ($this->​request->​is(array('​post',​ '​put'​))) { if ($this->​request->​is(array('​post',​ '​put'​))) {
     $this->​Note->​id = $id;     $this->​Note->​id = $id;
     $this->​request->​data['​Note'​]['​user_id'​] = $this->​Session->​read('​uid'​);​     $this->​request->​data['​Note'​]['​user_id'​] = $this->​Session->​read('​uid'​);​
     if ($this->​Note->​save($this->​request->​data)) {     if ($this->​Note->​save($this->​request->​data)) {
-                //Tag system ​+                //Tag system
         $this->​Tag->​saveTags($this->​request->​data['​Note'​]['​tags'​],​ $id, '​Note_Note'​);​         $this->​Tag->​saveTags($this->​request->​data['​Note'​]['​tags'​],​ $id, '​Note_Note'​);​
         //         //
- +
         $this->​Session->​setFlash(__d('​Note',​ 'Your note has been updated.'​));​         $this->​Session->​setFlash(__d('​Note',​ 'Your note has been updated.'​));​
         return $this->​redirect(array('​action'​ => '​index'​));​         return $this->​redirect(array('​action'​ => '​index'​));​
Line 1774: Line 1789:
  
 </​code>​ </​code>​
- 
  
 <file php edit.ctp>​ <file php edit.ctp>​
- 
 //Tag system //Tag system
 <li> <li>
Line 1783: Line 1796:
         <​label><?​=__d('​Blog',​ '​Tags'​)?></​label>​         <​label><?​=__d('​Blog',​ '​Tags'​)?></​label>​
     </​div>​     </​div>​
-    <?​php ​+    <?php
     $tags_value = '';​     $tags_value = '';​
         if (!empty($tags)) $tags_value = implode(',​ ', $tags);         if (!empty($tags)) $tags_value = implode(',​ ', $tags);
Line 1799: Line 1812:
  
 <file php NoteHelper.php>​ <file php NoteHelper.php>​
- 
- 
 //Tag system //Tag system
 public function getTagUnionsNote($noteids) public function getTagUnionsNote($noteids)
Line 1811: Line 1822:
 { {
     return $this->​assetUrl('​Note.noimage/​note.png',​$options + array('​pathPrefix'​ => Configure::​read('​App.imageBaseUrl'​)));​     return $this->​assetUrl('​Note.noimage/​note.png',​$options + array('​pathPrefix'​ => Configure::​read('​App.imageBaseUrl'​)));​
-     +
     return $url;     return $url;
 } }
Line 1821: Line 1832:
  
 <file php NotesController.php>​ <file php NotesController.php>​
- 
 //Tag system //Tag system
 $this->​loadModel('​Tag'​);​ $this->​loadModel('​Tag'​);​
Line 1829: Line 1839:
  
 </​file>​ </​file>​
- 
- 
  
 <file php view.ctp>​ <file php view.ctp>​
- 
 //Tag system //Tag system
 <div class="​box_content">​ <div class="​box_content">​
Line 1841: Line 1848:
  
 </​file>​ </​file>​
- 
- 
  
 ===== How to using like system ===== ===== How to using like system =====
Line 1849: Line 1854:
  
 <file php NotesController.php>​ <file php NotesController.php>​
- 
 //Like system //Like system
 MooCore::​getInstance()->​setSubject($note);​ MooCore::​getInstance()->​setSubject($note);​
Line 1857: Line 1861:
  
 <file php view.ctp>​ <file php view.ctp>​
- 
 //Like system //Like system
 <div class="​content_center">​ <div class="​content_center">​
Line 1864: Line 1867:
             <?php echo $this->​renderLike();?>​             <?php echo $this->​renderLike();?>​
         </​div>​         </​div>​
-    </​div> ​           +    </​div>​
 </​div>​ </​div>​
 // //
  
 </​file>​ </​file>​
- 
  
 ===== How to using comment system ===== ===== How to using comment system =====
Line 1876: Line 1878:
  
 <file php notescontroller.php>​ <file php notescontroller.php>​
- 
 //Comment system //Comment system
 MooCore::​getInstance()->​setSubject($note);​ MooCore::​getInstance()->​setSubject($note);​
Line 1882: Line 1883:
  
 </​file>​ </​file>​
- 
  
 <file php view.ctp>​ <file php view.ctp>​
- 
 //Comment system //Comment system
 <div class="​content_center">​ <div class="​content_center">​
Line 1895: Line 1894:
  
 </​file>​ </​file>​
- 
  
 <file php NoteHelper.php>​ <file php NoteHelper.php>​
- 
 //Comment system //Comment system
 public function checkPostStatus($note,​$uid) public function checkPostStatus($note,​$uid)
 { {
     if (!$uid)     if (!$uid)
-        return false; ​      ​ +        return false; 
-         ​+
     $friendModel = MooCore::​getInstance()->​getModel('​Friend'​);​     $friendModel = MooCore::​getInstance()->​getModel('​Friend'​);​
     if ($uid == $note['​Note'​]['​user_id'​])     if ($uid == $note['​Note'​]['​user_id'​])
         return true;         return true;
-         +
     if ($note['​Note'​]['​privacy'​] == PRIVACY_EVERYONE)     if ($note['​Note'​]['​privacy'​] == PRIVACY_EVERYONE)
     {     {
         return true;         return true;
     }     }
-     +
     if ($note['​Note'​]['​privacy'​] == PRIVACY_FRIENDS)     if ($note['​Note'​]['​privacy'​] == PRIVACY_FRIENDS)
     {     {
Line 1920: Line 1917:
             return true;             return true;
     }     }
-      +
-     +
     return false;     return false;
 } }
Line 1931: Line 1927:
  
 </​file>​ </​file>​
- 
- 
  
 ===== How to using report system ===== ===== How to using report system =====
Line 1939: Line 1933:
  
 <file php view.tcp>​ <file php view.tcp>​
- 
 //Report system //Report system
 <?​=$this->​Html->​link( <?​=$this->​Html->​link(
Line 1956: Line 1949:
 ====== Plugin Development Suggestions ====== ====== Plugin Development Suggestions ======
  
-  * Do not hardcode the mooSocial database table prefix ​ into your Plugins .+  * Do not hardcode the mooSocial database table prefix into your Plugins .
   * Use the existing database tables instead of creating new custom tables if possible.   * Use the existing database tables instead of creating new custom tables if possible.
   * SELECT only what you need.Naming conventions are very important in CakePHP. By naming our model Post, CakePHP can automatically infer that this model will be used in the PostsController,​ and will be tied to a database table called posts.   * SELECT only what you need.Naming conventions are very important in CakePHP. By naming our model Post, CakePHP can automatically infer that this model will be used in the PostsController,​ and will be tied to a database table called posts.
documentation/create_first_plugin.txt · Last modified: 2015/09/03 00:08 (external edit)