Viết module đơn giản cho phpfox

Thảo luận trong 'Phpfox' bắt đầu bởi PeaJaStr, 17/4/15.

  1. PeaJaStr

    PeaJaStr Moderator Staff Member

    Tham gia:
    27/3/15
    Bài viết:
    193
    "Thích" đã nhận:
    54
    Điểm nhận Cup:
    28
    Giới tính:
    Nam
    Qua các bài trước mình đã giới thiệu cho các bạn biết cách sử dụng , cấu trúc của phpfox rồi
    Bài này sẽ hướng dẫn viết một chức năng nho nhỏ cho phpfox


    Bài này mình sẽ viết chức năng follow / unfollow 1 user. Đây là bài đầu tiên mình được học và thực hành về phpfox..Cũng là một trong những tutorial dễ và đơn giản về phpfox..
    Bài viết chủ yếu dành cho những người mới học về phpfox,

    Thôi nào bắt đầu thôi:
    Dưới đây là ảnh của 1 trang bình thường, giao diện default - nebula.. Cũng chưa viết hay thêm bớt cái gì..
    Khi vào 1 user (không phải là user của mình nhé) thì sẽ có mấy cái button như thế kia.
    Nội dung chính của mình sẽ trình bày là:

    Viết chức năng follow- unfollow 1 user nào đó. Một khi đã follow user thì có thể xem được feed, ảnh của user đó[​IMG]

    Bước 1: Thêm cái button follow và unfollow lên cái thanh header của profile
    Đầu tiên chúng ta phải biết mấy cái button kia (send messege, addfriend ...) ở chỗ nào, thì ta mới có thể thêm 1 button follow/unfollow vào cạnh mấy cái button đó
    Có nhiều cách nhưng đơn giản nhất là element mấy cái button send message hay addfriend tìm tên class, id rồi dò trong code.. Chắc chắn chỉ cần dò trong module profile là đủ
    Như mình element bằng firebug (1 trong những add on của firefox) thì thấy như sau:

    [​IMG]

    Thử dò theo từ : "profile_header_inner" trong thư mục template của module profile tôi thấy có file
    header.html.php có nội dung đấy.. (đương dẫn: module/profile/template/default/block/header.html.php)
    Vậy ta cần thêm mấy cái buton follow/unfollow vào cái file head.html.php

    Bạn để ý từ mình bôi đỏ trên kia nhé:
    + Trong tất cả các template đều có 1 folder default - Đây là folder giao diện gốc của phpfox
    +Nếu bạn đã cài 1giao diện , mình tạm gọi là A thì có thể xuất hiện thêm folder tên là A ở trong template của profile (Mình nói có thể nhé, Vì thông thường một giao diện nó sẽ viết lại khá nhiều template, tuy nhiên đôi khi nó chỉ cần sửa vài template thôi, có thể không sửa giao diện của profile nên sẽ không có)
    +Vì vậy bạn cần sửa file header.html.php ở theme hiện tại đang active, (nếu theme hiện tại đang active mà không có cái file header.html.php thì ta sửa ở theme default)
    + Phpfox khuyến nghị bạn không nên sửa ở code core của nó (vì sẽ ảnh hưởng tới việc update sau này) Tuy nhiên bài này mình sẽ chỉ hướng dẫn cách viết 1 ứng dụng đơn giản nhất thôi , còn việc làm thế nào để k sửa code core thì xin hẹn gặp ở 1 bài khác


    Tiếp tục nào .
    Bây giờ bạn tạo 1 bảng mới tên là phpfox_follow và có 4 trường là : id (primary key, auto increment, user_id, user_follow_id, timestamp)
    Code:
    -
    -- Table structure for table `phpfox_follow`
    --
    
    CREATE TABLE `phpfox_follow` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `user_id` int(11) unsigned NOT NULL,
      `user_follow_id` int(11) unsigned NOT NULL,
      `time_stamp` int(11) unsigned NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
    --
    -- Indexes for dumped tables
    --
    
    --
    -- Indexes for table `phpfox_follow`
    --
    ALTER TABLE `phpfox_follow`
    ADD PRIMARY KEY (`id`);
    Trong đó: user_id là user của thằng đi follow
    user_follow_id là user của thằng được follow
    Bây giờ bạn mở file: module/profile/include/component/block/header.class
    tìm đoạn $this->template()->assign(array(
    thêm vào trước đó nội dung sau:

    PHP:
    $iFollowed Phpfox::getService('profile.follow')->getFollowStatus($aUser['user_id']);
    và thêm sửa lại đoạn $this->template()->assign(array( thành
    Code:
    $this->template()->assign(array(
                'aUser' => $aUser,
                'iFollowed' => $iFollowed
            ));
    * Giải thích: $iFollowed: là để check xem user này đã follow chưa

    Tiếp theo: ta tạo 1 file có đường dẫn là: module/profile/include/service/follow.class.php File này sẽ tương tác với database.

    Nội dung là :
    PHP:
    <?php

    class Profile_Service_Follow extends Phpfox_Service {
        public function 
    __construct() {
            
    $this->_sTable Phpfox::getT('follow');
        }

        public function 
    getFollowStatus($iFollowUserId) {
            
    $iUserId Phpfox::getUserId();
            
    $iIsFollow = (int) $this->database()->select('COUNT(*)')
                ->
    from($this->_sTable)
                ->
    where('user_id = ' .$iUserId ' AND user_follow_id = ' .$iFollowUserId)
                ->
    execute('getField');
            return 
    $iIsFollow;
        }

        public function 
    doFollowUser($iFollowUserId) {
            
    $this->database()->insert($this->_sTable, array(
                
    'user_id' => Phpfox::getUserId(),
                
    'user_follow_id' => $iFollowUserId,
                
    'time_stamp' => PHPFOX_TIME
            
    ));
        }

    public function 
    doUnFollow($iFollowUserId) {
      return 
    $this->database()->delete($this->_sTable'user_id = ' .Phpfox::getUserId().' AND user_follow_id = '$iFollowUserId);}

    }
    ?>
    Giờ ta mở file: template/default/block/header.html.php
    Chú ý chỗ bôi đỏ: (thay bằng theme đang chạy nếu có, đơn giản là nếu ta site của ta đang chạy theme A , mà ta sửa trong default thì nó chỉ có tác dụng trong default nếu theme A của ta có file header.html.php)

    Tìm dòng:
    {if Phpfox::isModule('mail') && Phpfox::getService('user.privacy')->hasAccess('' . $aUser.user_id . '', 'mail.send_message')}

    Thêm vào trước đó:
    Code:
     <li id="follow" {if $iFollowed}style="display: none;"{/if}><a href="#" onclick="$.ajaxCall('profile.doFollow', 'user_id={$aUser.user_id}'); return false;">Follow</a></li>
                            <li id="un_follow"{if !$iFollowed}style="display: none;"{/if} ><a href="#" onclick="$.ajaxCall('profile.doUnfollow', 'user_id={$aUser.user_id}'); return false;">Un-Follow</a></li>
    Đoạn này sẽ hiển thị ra 2 cái button. và sự kiện gọi ajax khi ta ấn vào button.
    [​IMG]
    Giờ ta mở file: module/profile/include/component/ajax/ajax.class.php
    Ta viết thêm 2 function như ở dưới và file này:

    Code:
     public function doFollow() {
            $aUserFollowId = $this->get('user_id');
            if(Phpfox::getService('profile.follow')->doFollowUser($aUserFollowId)) {
                $this->show("#un_follow");
                $this->hide("#follow");
            } else {
                $this->alert("Error");
            }
    
        }
    
        public function doUnfollow() {
            $aUserFollowId = $this->get('user_id');
            if(Phpfox::getService('profile.follow')->doUnFollow($aUserFollowId)){
                $this->show("#follow");
                $this->hide("#un_follow");
            } else {
                $this->alert("Error");
            }
    
        }
    Kết quả :
    [​IMG]

    Xem trong db:
    [​IMG]


    Xong như vậy là mình đã hướng dẫn cho các bạn cách viết 1 chức năng nho nhỏ..
    Phần sau mình sẽ hướng dẫn thêm chức năng chỉ hiện feed của những người đã follow

    Hẹn gặp lại..



    Bài viết này thuộc sở hữu của http://laptrinhphpviet.com Vui lòng trích dẫn tác giả khi sao chép.. Cám ơn !
     
    Last edited: 17/4/15
    Long nguyen likes this.

    Bình Luận Bằng Facebook

  2. PeaJaStr

    PeaJaStr Moderator Staff Member

    Tham gia:
    27/3/15
    Bài viết:
    193
    "Thích" đã nhận:
    54
    Điểm nhận Cup:
    28
    Giới tính:
    Nam
    Lâu lâu mới viết tut.. công nhận viết lâu thật ;)
     
  3. ceofox

    ceofox New Member

    Tham gia:
    17/4/15
    Bài viết:
    1
    "Thích" đã nhận:
    0
    Điểm nhận Cup:
    1
    Giới tính:
    Nữ
    Hay quá bạn ơi
     
  4. asvenus

    asvenus Moderator

    Tham gia:
    27/3/15
    Bài viết:
    5
    "Thích" đã nhận:
    0
    Điểm nhận Cup:
    1
    Giới tính:
    Nam
    hay quá
     
  5. PeaJaStr

    PeaJaStr Moderator Staff Member

    Tham gia:
    27/3/15
    Bài viết:
    193
    "Thích" đã nhận:
    54
    Điểm nhận Cup:
    28
    Giới tính:
    Nam
    thank em..
     
  6. htung147

    htung147 New Member

    Tham gia:
    11/5/15
    Bài viết:
    6
    "Thích" đã nhận:
    1
    Điểm nhận Cup:
    1
    Giới tính:
    Nam
    Nghề nghiệp:
    sinh viên
    Đến từ:
    hanoi
    Trang chủ:
    anh ơi anh cho em xin mail anh dc ko ạ em đang bí một số chỗ về php ko biet hỏi ai :( anh gửi mail anh vào hòm thư giúp em nhé
     
  7. PeaJaStr

    PeaJaStr Moderator Staff Member

    Tham gia:
    27/3/15
    Bài viết:
    193
    "Thích" đã nhận:
    54
    Điểm nhận Cup:
    28
    Giới tính:
    Nam
    em pm inbox anh đi..
    mail ở đây thì lộ hết ;)
     
  8. 2111002778

    2111002778 Member

    Tham gia:
    1/8/15
    Bài viết:
    44
    "Thích" đã nhận:
    8
    Điểm nhận Cup:
    8
    Giới tính:
    Nam
    hi mod, em mới tìm hiểu về PHPFox , cụ thể là chỉ mới cài đặt , hiện tại em muốn tùy chỉnh , viết theme mới và viết thêm các modul cho nó , anh có tài liệu gì về vấn đề trên chia sẻ cho em với nha:).
    Cám ơn anh
     
  9. PeaJaStr

    PeaJaStr Moderator Staff Member

    Tham gia:
    27/3/15
    Bài viết:
    193
    "Thích" đã nhận:
    54
    Điểm nhận Cup:
    28
    Giới tính:
    Nam
    không có tài liệu đâu bạn nhé.. nhưng chịu khó đọc mấy bài mình hướng dẫn và code là sẽ hiểu.. bạn cần gì thì cứ pm mình
    add skype của mình vào
     
    2111002778 likes this.
  10. 2111002778

    2111002778 Member

    Tham gia:
    1/8/15
    Bài viết:
    44
    "Thích" đã nhận:
    8
    Điểm nhận Cup:
    8
    Giới tính:
    Nam
    skype của bác là gì vậy , inbox mình với :) . thanks bác
     
  11. phuonganhlovechan

    phuonganhlovechan New Member

    Tham gia:
    3/8/15
    Bài viết:
    6
    "Thích" đã nhận:
    1
    Điểm nhận Cup:
    3
    Giới tính:
    Nữ
    Hay quá ạ T_T anh có thể cho em xin sky để em học hỏi thêm kinh nghiệm làm phpfox không ạ! Em mới tìm hiểu và mới biết cài đặt thôi ạ
     
  12. PeaJaStr

    PeaJaStr Moderator Staff Member

    Tham gia:
    27/3/15
    Bài viết:
    193
    "Thích" đã nhận:
    54
    Điểm nhận Cup:
    28
    Giới tính:
    Nam
    có gì thắc mắc bạn cứ post lên diễn đàn..
     
  13. Vu Van Hat

    Vu Van Hat Moderator

    Tham gia:
    7/4/15
    Bài viết:
    35
    "Thích" đã nhận:
    1
    Điểm nhận Cup:
    8
    Trên bản 3.8 mình chạy theo tut lúc follow có message báo error. mình nghĩ nên sửa
    Hàm doFollowUser trong file module/profile/include/service/follow.class.php thành:
    PHP:
     public function doFollowUser($iFollowUserId) {
            
    $return false;
            try{
                
    $this->database()->insert($this->_sTable, array(
                    
    'user_id' => Phpfox::getUserId(),
                    
    'user_follow_id' => $iFollowUserId,
                    
    'time_stamp' => PHPFOX_TIME
                
    ));
                
    $return true;
            } catch (
    Exception $e){
                
    Phpfox::log($e->getMessage());
            }

            return 
    $return;

        }
    Hoặc đơn giản hơn là return về cái query kia luôn
    PHP:
     public function doFollowUser($iFollowUserId) {
             return   
    $this->database()->insert($this->_sTable, array(
                    
    'user_id' => Phpfox::getUserId(),
                    
    'user_follow_id' => $iFollowUserId,
                    
    'time_stamp' => PHPFOX_TIME
                
    ));
             
        }


     
    Last edited: 6/7/16

Share This Page