Skocz do zawartości

Blog IPSBeyond.pl

  • wpisy
    71
  • komentarzy
    21
  • wyświetleń
    118743

Model komentarzy - jak dodać komentarze do aplikacji

Praktycznie każda aplikacja, którą piszemy, będziemy pisać w przyszłości będzie potrzebować systemu komentarzy. Nie ważne czy jest to aplikacja typu moje trasy, blog, platforma z ogłoszeniami. Zawsze dążymy do tego by użytkownik wchodził w jakąś interakcję z dodaną treścią. Najłatwiej jest to osiągnąć właśnie przez system komentarzy.

Co musimy zrobić?

Aby uruchomić system komentarzy w naszej aplikacji musimy wykonać 3 kroki:

  1. Dodać odpowiedni kod do klasy elementu, który będzie przetrzymywał komentarze
  2. Stworzyć odpowiednią strukturę tabeli
  3. Stworzyć model klasy komentarzy

Ale zacznijmy od początku.

Zmiana w pliku

Opiszę tutaj to na przykładzie jednej z moich aplikacji. Aplikacja znajduje się w przestrzeni nazw IPS\livestreams a elementem (modelem), który będzie przetrzymywać komentarze jest Stream. Zatem Otwieramy plik: /applications/livestreams/sources/Stream/Stream.php i wklejamy w nim wewnątrz klasy:

	/**
	 * @brief	Comment Class
	 */
	public static $commentClass = 'IPS\livestreams\Stream\Comment';

Struktura bazy danych

Tutaj musimy stworzyć dość prostą tabelę a mianowicie:

CREATE TABLE `ibf_livestreams_streams_comments` (
	`comment_id` INT(10) NOT NULL AUTO_INCREMENT,
	`comment_stream_id` INT(10) NOT NULL DEFAULT '0',
	`comment_member_id` MEDIUMINT(8) NOT NULL DEFAULT '0',
	`comment_author` VARCHAR(255) NULL DEFAULT NULL,
	`comment_ip_address` VARCHAR(46) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
	`comment_date` INT(10) NULL DEFAULT NULL,
	`comment_append_edit` TINYINT(1) NULL DEFAULT '0',
	`comment_approved` TINYINT(1) NOT NULL DEFAULT '0',
	`comment_text` MEDIUMTEXT NULL COLLATE 'utf8mb4_unicode_ci',
	`comment_edit_time` INT(10) NOT NULL DEFAULT '0',
	`comment_edit_name` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
	PRIMARY KEY (`comment_id`),
	INDEX `comment_parent_id` (`comment_stream_id`),
	INDEX `comment_author_id` (`comment_member_id`)
);

Idąc od początku:

  • comment_id - Id komentarza w bazie
  • comment_stream_id - Id elementu, którego komentarz ma dotyczyć
  • comment_member_id - Id autora komentarza
  • comment_author - Nazwa autora
  • comment_ip_address - Adres IP użytkownika
  • comment_date - Data dodania wpisu
  • comment_approved - Czy komentarz jest zatwierdzony
  • comment_text - Treść komentarza
  • comment_edit_time - Czas, kiedy komentarz był edytowany

Model klasy komentarzy

Plik musi nosić nazwę Comment.php i znajdować się w katalogu /applications/livestreams/sources/Stream/. A jego kod wygląda następująco:

<?php
/**
 * SolutionrDEVs Application
 * (SD) Live Streams
 *
 * @brief       Comment model
 * @author      Dawid Baruch <dawid.baruch@solutiondevs.pl> <a href='http://www.solutiondevs.pl'>SolutionDEVs</a>
 * @copyright   (c) 2005 - 2016 SolutionDEVs
 * @package     SolutionDEVs Apps
 * @subpackage  (SD) Live Streams
 * @link        http://www.solutiondevs.pl
 * @link        http://www.ipsbeyond.pl
 * @since       25 Aug 2016
 * @version     2.0.0
 */

namespace IPS\livestreams\Stream;

/* To prevent PHP errors (extending class does not exist) revealing path */
if( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
	header( ( isset( $_SERVER[fusion_builder_container hundred_percent="yes" overflow="visible"][fusion_builder_row][fusion_builder_column type="1_1" background_position="left top" background_color="" border_size="" border_color="" border_style="solid" spacing="yes" background_image="" background_repeat="no-repeat" padding="" margin_top="0px" margin_bottom="0px" class="" id="" animation_type="" animation_speed="0.3" animation_direction="left" hide_on_mobile="no" center_content="no" min_height="none"][ 'SERVER_PROTOCOL' ] ) ? $_SERVER[ 'SERVER_PROTOCOL' ] : 'HTTP/1.0' ) . ' 403 Forbidden' );
	exit;
}

/**
 * Stream Comment Model
 */
class _Comment extends \IPS\Content\Comment implements \IPS\Content\EditHistory, \IPS\Content\ReportCenter, \IPS\Content\Hideable, \IPS\Content\Reputation, \IPS\Content\Searchable, \IPS\Content\Embeddable
{
	/**
	 * @brief	[ActiveRecord] Multiton Store
	 */
	protected static $multitons;
	
	/**
	 * @brief	[Content\Comment]	Item Class
	 */
	public static $itemClass = 'IPS\livestreams\Stream';
	
	/**
	 * @brief	[ActiveRecord] Database Table
	 */
	public static $databaseTable = 'livestreams_streams_comments';
	
	/**
	 * @brief	[ActiveRecord] Database Prefix
	 */
	public static $databasePrefix = 'comment_';
	
	/**
	 * @brief	Database Column Map
	 */
	public static $databaseColumnMap = array(
		'item'				=> 'stream_id',
		'author'			=> 'member_id',
		'author_name'		=> 'author',
		'content'			=> 'text',
		'date'				=> 'date',
		'ip_address'		=> 'ip_address',
		'edit_time'			=> 'edit_time',
		'edit_member_name'	=> 'edit_name',
		'edit_show'			=> 'append_edit',
		'approved'			=> 'approved'
	);
	
	/**
	 * @brief	Application
	 */
	public static $application = 'livestreams';
	
	/**
	 * @brief	Title
	 */
	public static $title = 'livestreams_streams_comment';
	
	/**
	 * @brief	Icon
	 */
	public static $icon = 'video-camera';
	
	/**
	 * @brief	Reputation Type
	 */
	public static $reputationType = 'comment_id';
	
	/**
	 * @brief	[Content]	Key for hide reasons
	 */
	public static $hideLogKey = 'livestreams-scomment';
	
	/**
	 * Get URL for doing stuff
	 *
	 * @param	string|NULL		$action		Action
	 * @return	\IPS\Http\Url
	 */
	public function url( $action=NULL )
	{
		return parent::url( $action )->setQueryString( 'tab', 'comments' );
	}
}

I ogólnie to tyle, aby dodać komentarze do naszej aplikacji



0 komentarzy


Rekomendowane komentarze

Brak komentarzy do wyświetlenia.

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

×

Ważne informacje

Kontynuując przeglądanie strony, wyrażasz zgodę na używanie przez nas plików cookies.