Yii Framework Forum: Komunikacja Między Użytkownikami - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Komunikacja Między Użytkownikami Rate Topic: -----

#1 User is offline   mentorq 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 105
  • Joined: 26-June 13

Posted 31 July 2013 - 01:32 AM

Witam.

Chciałbym stworzyć coś na zasadzie systemu komunikacji między użytkownikami opartym na bazie danych. Moja główna koncepcja wygląda tak, że tworze formularz, w którym jednym z pól będzie user_id do którego będzie adresowana wiadomość. Następnie z bazy danych pobrać wszystkie wiersze w których user_id = aktualnemu zalogowanemu id i wyświetlić to.

Tu pojawia się pytanie, czy takie coś w ogóle ma sens ? Nie próbowałem nigdy wcześniej niczego w tym stylu więc nie wiem czy takie rozwiązanie się sprawdzi.
0

#2 User is offline   .viktor. 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 88
  • Joined: 25-August 10
  • Location:Sokołów Podlaski, Poland

Posted 31 July 2013 - 01:41 AM

Cześć
Wszystko ma sens, jeżeli tylko spełani twoje założenia. Po twoim poscie widzę jednak, że po prostu potrzebujesz motywacji, więc weź się do roboty i nie marudź :)

p.s jak Ci nie wyjdzie, to zacznij od początku.
0

#3 User is offline   mentorq 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 105
  • Joined: 26-June 13

Posted 31 July 2013 - 01:45 AM

View Post.viktor., on 31 July 2013 - 01:41 AM, said:

Cześć
Wszystko ma sens, jeżeli tylko spełani twoje założenia. Po twoim poscie widzę jednak, że po prostu potrzebujesz motywacji, więc weź się do roboty i nie marudź :)

p.s jak Ci nie wyjdzie, to zacznij od początku.


Ta coś w tym jest ^^ Trochę marudzę, ale tylko dlatego, że ostatnio długo męczyłem się z czymś co okazało się nietrafione :D
0

#4 User is offline   mentorq 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 105
  • Joined: 26-June 13

Posted 31 July 2013 - 03:04 AM

adresat - model testowy dla wiadomości
adres_user_id - id usera do którego będzie wysyłana wiadomość


Udało mi się uzyskać już to co chciałem. Wysyłam wiadomość do użytkownika wybierając jego imie z dropDownList, następnie w view/adresat/index.php wyświetlam tylko te wiadomości w których adres_user_id = id usera zalogowanego.

controller:
public function actionIndex()
	{
                $current_id = Yii::app()->user->getId();
		$dataProvider=new CActiveDataProvider('Adresat', array(
                    'criteria'=>array(
                        'condition'=>'adres_user_id='.$current_id,
                        'order'=>'data_utworzenia DESC',
                    )
                ));
		$this->render('index',array(
			'dataProvider'=>$dataProvider,
		));
	}


model:
public function getAllUser()
        {
            $model = User::model()->findAll(array('order'=>'id'));
            $list = CHtml::listdata($model, 'id','firstname');
            return $list;
        }


form:
<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array(
	'id'=>'adresat-form',
	'enableAjaxValidation'=>false,
)); ?>
        
	<p class="note">Fields with <span class="required">*</span> are required.</p>

	<?php echo $form->errorSummary($model); ?>

	<div class="row">
		<?php echo $form->labelEx($model,'tytul'); ?>
		<?php echo $form->textField($model,'tytul',array('size'=>45,'maxlength'=>45)); ?>
		<?php echo $form->error($model,'tytul'); ?>
	</div>

	<div class="row">
		<?php echo $form->labelEx($model,'tresc'); ?>
		<?php echo $form->textArea($model,'tresc',array('rows'=>6, 'cols'=>50)); ?>
		<?php echo $form->error($model,'tresc'); ?>
	</div>

	

	<div class="row">
		<?php echo $form->labelEx($model,'podpis'); ?>
		<?php echo $form->textField($model,'podpis',array('size'=>45,'maxlength'=>45)); ?>
		<?php echo $form->error($model,'podpis'); ?>
	</div>

	<div class="row">
		<?php echo $form->labelEx($model,'adres_user_id'); ?>
		<?php echo $form->dropDownList($model,'adres_user_id',$model->getAllUser()); ?>
		<?php echo $form->error($model,'adres_user_id'); ?>
	</div>

	<div class="row buttons">
		<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
	</div>

<?php $this->endWidget(); ?>

</div><!-- form -->



Teraz mam 2 pytana, na które nie znam odpowiedzi.
1) Jak wykombinować żeby wysyłać wiadomość jednocześnie do kilku użytkowników ??
2) Wysyłać też np. też do grupy użytkowników, tzn: mam w tabeli user kolumne group_id, która pobiera wartość z tabeli group. Chciałbym zaznaczyć np checkbox w stylu "Wyślij do grupy nr 1" i w ten sposób wyłapie mi wszystkie user_id należące do tej grupy.
0

#5 User is offline   andrzej1_1 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 67
  • Joined: 16-April 13

Posted 01 August 2013 - 11:03 AM

Ostatnio robiłem u siebie system prywatnych wiadomości, więc mogę ci podpowiedzieć jak ma to wyglądać.
Tabela message: id, sender_id, receiver_id, owner, title, message, readed, readed_time, time
Myslę że nie muszę reszty tłumaczyć, a jedynie kolumne owner. Jeżeli jest wartość 0 to znaczy że należy ona do nadawcy, jeżeli 1 to należy do adresata, a 2 to należy do wszystkich. I każdą wiadomość wstawiasz dwa razy do bazy, aby inni nie kasowali nam tej samej wiadomości
1

#6 User is offline   mentorq 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 105
  • Joined: 26-June 13

Posted 01 August 2013 - 12:35 PM

Dzięki wielkie. Zastanawiałem się jak to zrobić myśląc nad bardzo złożonymi sposobami a można to zrobić tak prosto...

Nie do końca jeszcze wiem jak dobrze to zrobić z kasowaniem tych wiadomości (póki co najprawdopodobniej zablokuje możliwość usuwania)

Takie jeszcze pytanie, czy do twojego systemu używałeś rozszerzenia do edytowania tekstu w wiadomościach ? Coś na styl http://www.yiiframew...ion/extckeditor czy pozostawiłeś tak jak jest oryginalnie?
0

#7 User is offline   andrzej1_1 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 67
  • Joined: 16-April 13

Posted 01 August 2013 - 01:40 PM

Zostawiłem oryginalne, ale jeżeli chcesz jakiś edytor to bierz ckeditor bo ja z niego korzystałem i był dobry
0

#8 User is offline   sidewinder 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 208
  • Joined: 08-July 09
  • Location:Poland

Posted 02 August 2013 - 01:22 AM

Nie zapominajcie, że jako użykownicy Yii mamy prawo do skorzystania z licencji oemowej na Imperavi Redactor.
---------------------------------------------------------------------
"Never memorize what you can look up in books."
Albert Einstein
0

#9 User is offline   kradam 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 17
  • Joined: 22-October 12

Posted 02 August 2013 - 02:21 AM

View Postandrzej1_1, on 01 August 2013 - 11:03 AM, said:

Ostatnio robiłem u siebie system prywatnych wiadomości, więc mogę ci podpowiedzieć jak ma to wyglądać.
Tabela message: id, sender_id, receiver_id, owner, title, message, readed, readed_time, time
Myslę że nie muszę reszty tłumaczyć, a jedynie kolumne owner. Jeżeli jest wartość 0 to znaczy że należy ona do nadawcy, jeżeli 1 to należy do adresata, a 2 to należy do wszystkich. I każdą wiadomość wstawiasz dwa razy do bazy, aby inni nie kasowali nam tej samej wiadomości

Wydaje mi sie, że redundancja danych nie ma tu uzasadnienia. Jeśli wiadomość ma trafiać do więcej niż jednego adresata to należy utworzyć relację między tabelami Message i User:
User->messagesSent, HAS_MANY
Message->sender, BELONGS_TO
User->messagesReceived, MANY_MANY
Message->recipients, MANY_MANY


Skasowanie wiadomości w skrzynce danego użytkownika będzie wtedy odbywało się poprzez skasowanie rekordu (bądź umowne oznaczenie go jako skasowany) w tabeli pomocniczej.
0

#10 User is offline   mentorq 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 105
  • Joined: 26-June 13

Posted 02 August 2013 - 03:32 AM

View Postsidewinder, on 02 August 2013 - 01:22 AM, said:

Nie zapominajcie, że jako użykownicy Yii mamy prawo do skorzystania z licencji oemowej na Imperavi Redactor.


Dzięki za info, nie miałem o tym pojęcia ;)

Co do rozdzielania tego na Many_Many to też jeden ze sposobów. Póki co w wersji podstawowej myślę, że pierwszy pomysł wystarczy :)
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users