2009-09-02 4 views
1

Я хотел бы создать (или найти) библиотеку отчетов php, которую я могу использовать, чтобы мои пользователи могли сообщать о любом типе контента как о плохом. На самом деле, если бы они могли сообщать контент как хороший (что, я думаю, означало бы систему рейтинга), это было бы еще лучше. Поэтому, если кто-нибудь знает о такой библиотеке, я бы с удовольствием узнал об этом.Отчеты пользователя Библиотека

В любом случае, я так понимаю, что база данных работает, и я хотел бы знать, если это звучит правильно.

  1. ID - идентификатор строки
  2. USER_ID - ID пользовательского голосования/отчетности
  3. ITEM_ID - УНИКАЛЬНЫЙ строка таблицы Идентификатор элемента сообщает (пост, другой пользователь, ссылки, и т.д. ...)
  4. TYPE - название таблицы это относится к (сообщений, пользователей, ссылки, и т.д. ...)
  5. DATE - Дата и время отчета
  6. VALUE - Я думаю, это может быть голос UP или DOWN голосование

Включая столбец [TYPE], я могу использовать эту систему голосования для всех типов контента на моем сайте, а не только для одного (например, для сообщений на форуме). Сохраняя user_id, я могу быть уверенным, что на каждого пользователя на пользователя отправляется только один голос/отчет.

+1

Это одна из тех вещей, которые достаточно просты, и специфичные для приложения достаточно, что это, вероятно, проще построить его самостоятельно. Если вы не используете популярную инфраструктуру или платформу, в этом случае может существовать модуль, но вам нужно указать, какую платформу/платформу вы используете –

ответ

1

Ну, я пошел вперед и построил его, как я уже сказал. Фрэнк был прав, это было не слишком сложно. Вот код упаковывают кто-либо хочет использовать его на MVC, который поддерживает AR стиле DB называет как CodeIgniter или MicroMVC:

/* 
* Multi-table user voting model 
*/ 
class votes extends model { 

    public static $table = 'votes'; 


    function cast($user_id = NULL, $item_id = NULL, $type = NULL, $vote = TRUE) { 

     $where = array(
      'user_id' => $user_id, 
      'item_id' => $item_id, 
      'type'  => $type 
     ); 

     //Try to fetch this row 
     $row = $this->db->get_where(self::$table, $where); 

     //Look for an existing vote row 
     if($row && ! empty($row[0])) { 

      //Fetch row 
      $row = $row[0]; 

      //If they already voted this way... then we're done! 
      if($row->vote == $vote) { 
       return; 
      } 

      //Else update the row to the new vote 
      $row->vote = $vote; 
      $row->date = convert_time(time()); 

      $this->db->update(self::$table, $row, array('id' => $row->id)); 

      return; 
     } 

     //Else create a new vote for this item 
     $row = array(
      'user_id' => $user_id, 
      'item_id' => $item_id, 
      'type'  => $type, 
      'date'  => convert_time(time()), 
      'vote'  => $vote, 
     ); 

     $this->db->insert(self::$table, $row); 
    } 
} 
Смежные вопросы