View Full Version : سوال: ساخت بخش پیغام خصوصی
naser_feb8646
چهارشنبه 03 مهر 1387, 21:55 عصر
سلام
دوستان من میخوام توی سایتم کاربر بتونه به مدیر سایت پیغام خصوصی بفرسه و همینطور بالاعکس حالا می شه لطف کنید و بگید چطور می تونم این بخش رو طراحی کنم:قلب:
salehbagheri
چهارشنبه 03 مهر 1387, 22:04 عصر
برادر عزیز! سوال شما خیلی کلیه! و جواب دادن بهش میشه یه مقاله!
سعی کنید این سوالتون رو به بخشهای کوچکتر تقسیم کنید!
خوب روشهای گوناگونی وجود داره!
از طریق بانک های اطلاعاتی!
از طریق غیر از بانکهای اطلاعاتی!
...
کدومش رو بگم؟!
kezack
چهارشنبه 03 مهر 1387, 22:32 عصر
با بانك اكه بنويسي كه جند تا دستور insert و select هست بخش ارتباط با ما كه در اكثر سايت ها هست از همين روش استفاده مي كنند
merlin_vista
چهارشنبه 03 مهر 1387, 22:44 عصر
من سيستم پيغام خصوصي را اينجوري نوشتم با استفاده از ديتابيس !!
الف - طراحي ديتابيس :
شما در يك جدول جدا حتماً كاربران خود را دخيره ميكنيد . براي اعتبار سنجي و اعمال ديگه . پس حتماً يك ID هر يوزر دارد .
در جدول پيغام خصوصي اين فيلد ها را درست كنيد
1 - ID
2 - Message
3 - Sender
4 - Reciverاين حداقل فيلد هاي هست كه احتياج داريد .
در يك صفحه كه به عنوان صفحه ارسال پيام است اين گونه عمل كن .
فيلد Message : يك تكس باكس يا يك اديتور بگزار .
فيلد Sender : آي دي كاربري است كه لوگين كرده است .
فيلد Reciver : ميتونيد يه تكس باكس بگزاريد كه كاربر UserNAme كاربري را كه ميخواهد پيغام را بگيرد وارد كند . ميتوني خود يوزرنيم را ذخيره كني . يا با يك سرچ كوچك ID اون كاربر را بگيري و ذخيره كني . ميتوني هم با يك Split آنها را از هم جدا كني و براي هر يك از كاربران ركور را ايجاد كني .
حالا ميريسيم به قسمت Inbox و OutBox
inbox : بايد با يه Select ساده ركورد هاي را كه فيلد Reciver آن برابر ايست با آي دي كاربر Login كرده را به دست بياري و نمايش بدي . يا تو GridView يا ....
Outbox : بايد با يه Select ساده ركورد هاي را كه فيلد Sender آن برابر ايست با آي دي كاربر Login كرده را به دست بياري و نمايش بدي . يا تو GridView يا ....
اين سناريو ممكنه به حالت هاي مختلفي بتوان نوشت يا بهينه كرد .
اگه سوال يا مشكلي بود بپرس ... ؟؟
قسمت كد نويسي با خودت .
naser_feb8646
چهارشنبه 03 مهر 1387, 23:34 عصر
برادر عزیز! سوال شما خیلی کلیه! و جواب دادن بهش میشه یه مقاله!
سعی کنید این سوالتون رو به بخشهای کوچکتر تقسیم کنید!
خوب روشهای گوناگونی وجود داره!
از طریق بانک های اطلاعاتی!
از طریق غیر از بانکهای اطلاعاتی!
...
کدومش رو بگم؟!
از طریق بانک های اطلاعاتی
من سيستم پيغام خصوصي را اينجوري نوشتم با استفاده از ديتابيس !!
الف - طراحي ديتابيس :
شما در يك جدول جدا حتماً كاربران خود را دخيره ميكنيد . براي اعتبار سنجي و اعمال ديگه . پس حتماً يك ID هر يوزر دارد .
در جدول پيغام خصوصي اين فيلد ها را درست كنيد
1 - ID
2 - Message
3 - Sender
4 - Reciverاين حداقل فيلد هاي هست كه احتياج داريد .
در يك صفحه كه به عنوان صفحه ارسال پيام است اين گونه عمل كن .
فيلد Message : يك تكس باكس يا يك اديتور بگزار .
فيلد Sender : آي دي كاربري است كه لوگين كرده است .
فيلد Reciver : ميتونيد يه تكس باكس بگزاريد كه كاربر UserNAme كاربري را كه ميخواهد پيغام را بگيرد وارد كند . ميتوني خود يوزرنيم را ذخيره كني . يا با يك سرچ كوچك ID اون كاربر را بگيري و ذخيره كني . ميتوني هم با يك Split آنها را از هم جدا كني و براي هر يك از كاربران ركور را ايجاد كني .
حالا ميريسيم به قسمت Inbox و OutBox
inbox : بايد با يه Select ساده ركورد هاي را كه فيلد Reciver آن برابر ايست با آي دي كاربر Login كرده را به دست بياري و نمايش بدي . يا تو GridView يا ....
Outbox : بايد با يه Select ساده ركورد هاي را كه فيلد Sender آن برابر ايست با آي دي كاربر Login كرده را به دست بياري و نمايش بدي . يا تو GridView يا ....
اين سناريو ممكنه به حالت هاي مختلفي بتوان نوشت يا بهينه كرد .
اگه سوال يا مشكلي بود بپرس ... ؟؟
قسمت كد نويسي با خودت .
دوست عزیز خیلی ممنون ولی یه سوالی که برام پیش اومد اینکه وقتی یه کاربر پیغام جدید داره چطور بهش اعلام بشه .
مثلاً وقتی لوگین کرد بهش گفته بشه که پیغام جدید داره:قلب:
milade
پنج شنبه 04 مهر 1387, 04:19 صبح
خوب شما یهفیلد دیگه اضافه کن و با false و true مقدار دهی کن.اگه یه نفر پیام فرستاد اونو false مقدار بده و در هنگام لاگین برای "پیامهای خوانده نشده" هر چی اون کاربر false داشت بشمار و بهش اعلام کن
موفق و پیروز باشی
h.alizadeh
پنج شنبه 04 مهر 1387, 05:12 صبح
آره یک فیلد اضافه کن برای وضعیت خوانده شدن/نشدن
وقتی پیامی ارسال میشه مقدار مثلا 0 بهش بده وقتی خونده شد یعنی پیام توسط کاربر باز شد مقدار اون فیلد رو یک کن...
موقع لوگین هم اگه نامه ای با مقدار فیلد0 داشت بگو که پیام خوانده نشده داری و...اینقدر...
merlin_vista
پنج شنبه 04 مهر 1387, 23:27 عصر
می تونی توی select کامندت یک شرط بزاری که مثلا با آیدی یوزرت یا نام کاربریش براش پیام ها رو بیاره.
و با delete پیام ها رو پاک کنی!
حالا ميريسيم به قسمت Inbox و OutBox
inbox : بايد با يه Select ساده ركورد هاي را كه فيلد Reciver آن برابر ايست با آي دي كاربر Login كرده را به دست بياري و نمايش بدي . يا تو GridView يا ....
Outbox : بايد با يه Select ساده ركورد هاي را كه فيلد Sender آن برابر ايست با آي دي كاربر Login كرده را به دست بياري و نمايش بدي . يا تو GridView يا ....
والا ما هم همينا گفتيم ،
لطفاً پست ها را با دقت بيشتر بخونيد و تا جايي كه اطمينان نسبت به درستي پستي كه ميزنيد نداريد از زند پست بي مورد خوداري كنيد .
naser_feb8646
شنبه 06 مهر 1387, 22:01 عصر
با سلام دوستان
یه سوال دیگه داشتم ازتون می خواستم بدونم چطور می تونم کاری کنم که مدیر بتونه در آن واحد یک پیغام رو برای تمام کاربران و یا بعضی از کاربران بفرسه:قلب:
salehbagheri
شنبه 06 مهر 1387, 22:19 عصر
تمامی کاربران رو از طریق Membership.GetAllUsers فراخوانی کنید و مقدار Reciever پیامتون را برابر این مقدار قرار بدهید!
لازم به ذکر است که هنگام فراخوانی کاربران، بین نام آنها از علامتی مخصوص مثلا (;) استفاده کنید که در هنگام جدا کردن آنها از طریق Split به مشکل برنخورید!
naser_feb8646
شنبه 06 مهر 1387, 22:23 عصر
تمامی کاربران رو از طریق Membership.GetAllUsers فراخوانی کنید و مقدار Reciever پیامتون را برابر این مقدار قرار بدهید!
لازم به ذکر است که هنگام فراخوانی کاربران، بین نام آنها از علامتی مخصوص مثلا (;) استفاده کنید که در هنگام جدا کردن آنها از طریق Split به مشکل برنخورید!
ممنون دوست عزیز ولی اگر برات ممکن بیشتر توضیح میدی چون من تا حالا با Membershipکار نکردم :قلب:
salehbagheri
شنبه 06 مهر 1387, 23:10 عصر
این تابع کمک زیادی بهتون میکنه!
Public Function Reciever() As List(Of String)
Try
Dim AllUsers As MembershipUserCollection = Membership.GetAllUsers()
Dim Users As New List(Of String)
For I As Integer = 0 To AllUsers.Count - 1
Users.Add(AllUsers(I).UserName)
Next
Return Users
Catch ex As Exception
Throw New InvalidOperationException(ex.Message)
End Try
End Function
naser_feb8646
شنبه 06 مهر 1387, 23:41 عصر
این تابع کمک زیادی بهتون میکنه!
Public Function Reciever() As List(Of String)
Try
Dim AllUsers As MembershipUserCollection = Membership.GetAllUsers()
Dim Users As New List(Of String)
For I As Integer = 0 To AllUsers.Count - 1
Users.Add(AllUsers(I).UserName)
Next
Return Users
Catch ex As Exception
Throw New InvalidOperationException(ex.Message)
End Try
End Function
دوست عزیز درسته الان با خودت می گی بابا این چقدر خنگه ولی اگر لطف کنی و بگی که این تابع چکار میکنه و من چجوری ازش استفاده کنم ازت خیلی ممنون می شم:خجالت:
merlin_vista
یک شنبه 07 مهر 1387, 00:08 صبح
همان طور كه دوست عزيز salehbagheri گفت :
شما بايد اين قابليت را به Textbox كه براي Reciever گذاشتيد بدهيد كه در صورتي كه كاربر با كاكتر مثلا ";" نام هاي كاربري گيرنده پيام را جدا كرد شما ابتدا آنها را در يك آرايه ذخيره كنيد و بعد با حلقه در آرايه حركت كنيد و براي تك تك نام كاربري هاي كه در آرايه هست پيام را ارسال كنيد (يك ركورد در جدول پيام ها ايجاد كنيد براي هر كاربر ) اين طوري كاربر امكان ارسال گروهي را پيدا ميكنه . براي محدود كردنش هم ميتونيد يه Counter بگزاريد و براش شرط بگزاريد كه اگه مثلاً 20 تا پيام فرستادي ديگه نفرس .
اگه خواستي مدير بفرسته براي كل اعضا كه قضيه يكم فرق داره .
به اين صورت بايد بنويسي كه :
با يك ديتاريدر تمام كاربران را از ديتابيس ميكشي بيرون (در اينجا منظور نام كاربري آنها ميباشد )
بعد يه حلقه مينويسي با While كه تا آخرين ركورد بچرخه . سپس ركورد ها را در ديتابيس درج كنه . اينجوري براي همه كاربران سايت پيغام را ارسال كرده اي .
while (reyder.Read())
{
//insert Code
}
اگر هم ميخواي كه قابليت انتخاب داشته باشه كه مدير از يه ليست نام كاربراني را كه ميخواهد پيغام را دريافت كنه را تيك بزنه و با زدن يك دكمه ارسال شروع بشه اينگونه عمل كن .
1 - تمام كاربران را از ديتابيس بخون و در يك گريدويو نمايش بده . در يك ستون گريدويو كه از نوع itemtempelet است يك چك باكس قرار بده و نام آن را chk_Message بگزار .
حالا در دكمه ارسال براي موارد انتخابي اين گونه بنويس .
تمام كاربراني را كه تيك خورده اند بخوان به شكلي كه در كد زير ميبيني :
string username_Reciver;
foreach (GridViewRow gridRow in this.GridView1.Rows)
{
CheckBox chk_Message = (CheckBox)gridRow.FindControl("chk_Message");
if (chk_Message.Checked)
{
username_Reciver = this.GridView1.DataKeys[gridRow.RowIndex].Value.ToString();
//Insert Code Form Send Message
}
}
براي استفاده از كد بالا به موارد زير توجه كن :
مقدار DataKeys گريد ويو را برابر با نام كاربري فرد در سايت قرار بده . Username Fild
در متغير username_Reciver نام كاربري هر فرد كه تيك خورده توسط مدير قرار ميگيرد . شما بايد اين متغير را برابر با Reciver در جدول پيام ها قرار بدهيد .
در قسمت Insert Code كد درج پيام را در ديتابيس بنويس .
اميدوارم منظورم را فهميده باشي .
به اميد ديدار ..
naser_feb8646
دوشنبه 08 مهر 1387, 12:03 عصر
merlin_vista عزیز
اگر برات امکان داره نحوه استفاده از کاراکتر (;) در بین نام کاربران را توضیح بدی یعنی به عبارت دیگه چطور بگم که کاربران با کاراکتر مثلاً(;) ا هم جدا شده اند:قلب:
merlin_vista
دوشنبه 08 مهر 1387, 13:19 عصر
merlin_vista عزیز
اگر برات امکان داره نحوه استفاده از کاراکتر (;) در بین نام کاربران را توضیح بدی یعنی به عبارت دیگه چطور بگم که کاربران با کاراکتر مثلاً(;) ا هم جدا شده اند:قلب:
براي جدا كردن username ها با ";" و قرار دادن هر كدام در يكي از خانه هاي آرايه :
string[] Usernames = this.TextBox1.Text.Split(';');شما براي insert هر ركور در جدول پيغام ها بايد با يك حلقه مثلاً foreach بين خانه هاي آرايه حركت كنيد و دستور insert را اجرا كنيد .
مثال :
foreach (string user in Usernames) {
if (user.Trim() != "")
{
//Insert Code : username=user
}
}
amironline
شنبه 20 مهر 1387, 17:08 عصر
يه سوال برا من پيش اومد كه گفتم نظر شما رو بپرسم
وقتي براي پيامها از يك جدول استفاده ميكنيم
و پيامهاي ارسالي كاربر را در يك ليست(GridViiew) و پيامهاي دريافتي را در يك ليست نمايش ميدهيم
حالا اگه كاربر پيام ارسال شده رو قبل از خونده شدن توسط كاربر ديگه پاك كنه، پيام از بين ميره
راه حلي كه بنظرم رسيد اين بود كه از دو جدول(يكي براي پيامهاي ارسالي و يكي براي پيامهاي دريافتي) استفاده كنيم
شما چه راه حلي پيشنهاد ميدين؟
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.