نمایش نویسنده پیش فرض در هنگام بروزرسانی پست

پرسیده شده
فعالیت 1426 روز پیش
دیده شده 581 بار
0

عرض سلام و ادب خدمت استاد محترم و دوستان عزیز؛ خواستم عرض کنم خدمت شما اینکه در قسمت بروزرسانی , استاد فرمودن که وقتی روی هر پستی کلیک میکنیم و وارد صفحه ویرایش که شدیم در قسمت نام نویسنده , نام نویسنده اون پست هم توی منوی dropdown مون بصورت پیش فرض نمایش داده بشه ( یعنی بطور پیش فرض روی اولین گزینه نباشه ) تا متوجه بشیم نویسنده پست چه کسی بوده و در عین حال بتونیم از لیست نویسنده ها یکیو انتخاب کنیم و در نهایت ذخیره ویرایش کنیم . من برای این مسئله یه راه حل پیدا کردم و گفتم با شما به اشتراک بزارم , اونم استفاده از Helper ها بود , به این شکل که در مرحله اول وارد فایل index  در پوشه bootstrap شوید (همونجایی که Handelbars تون  رو پیکربندی کردید)  و داخل اون متغییر hbs که نوشته بودیم یه helper به این صورت بنویسید

const hbs = expressHandleBars.create({
    defaultLayout: "main",
    layoutsDir: `${__dirname}../../views/admin/layout`,
    helpers: {
      select: function (value, options) {
        return options
          .fn(this)
          .split("\n")
          .map(function (v) {
            var t = 'value="' + value + '"';
            return !RegExp(t).test(v)
              ? v
              : v.replace(t, t + ' selected="selected"');
          })
          .join("\n");
      },
    },
  });

این helper ی که نوشتم یه مقدار ورودی میگیره و میاد اون مقدار ورودی رو با تمامی value ی option های موجود در select تطابق میده اون optionی که valueش مطابق مقدار ورودی باشه رو بهش خاصیت selected میده و درنهایت به عنوان گزینه پیش فرض درنظر میگیره . من نامش رو چون مربوط به select میشد گذاشتم select شما هر نامی که دوست داشتید بزارید براش ,  حالا داخل editPost.handlebars تون (همون صفحه ی مربوط به ویرایش پست) توی اون قسمت مربوط به نام نویسنده ها این رو مینویسیم

<select name="author" id="author">
  {{#select post.author_id}}
     {{#each users}}
         <option value="{{this.id}}" >{{this.full_name}}</option>
      {{/each}} 
   {{/select}}        
</select> 

توی این قسمت هم اومدم select رو (نام همون helper ی ایجادش کردم ) برابر با شناسه نویسنده قرار دادم تا وقتی کاربر روی هرپستی که گزینه ویرایش رو زد وقتی که وارد صفحه ویرایش بشه نام نویسنده اون پست توی منو بصورت پیش فرض نمایش داده بشه و در عین حال اون حلقه each رو گذاشتم تا از منوی موجود به تمامی نویسنده ها دسترسی داشته باشه . امیدوارم براتون مفید و کاربردی  باشه . حالا دوستان شما هم بیایید کد مربوط به وضعیت مطلب رو بنویسید و با بقیه به اشتراک بزارید. ممنون از همگی

فایل پیوست

1
حذف شده

بسیار عالی ، ممنون از اطلاع رسانی محسن جان خیلی ممنون 

اگه امکانش کمی درباره کدی که نوشتی توضیح میدی

ممنون

فایل پیوست

محمد علی ناصری

توسط

محمد علی ناصری

18 خرداد 99

حذف شده
سلام محمد علی جان ،چطوری دوست خوبم ؟ . ممنون از شما که وقت گذاشتی خوندی . ببین محمد علی جان من اول اومدم یه helper نوشتم بهش دوتا مقدار ورودی (value , options) اختصاص دادم , value در واقع همون مقداری که قراره بیاد جای مقدار خاصیت value مربوط به option مون بشینه یعنی <'option value='myValue> (در اینجا myValue همون مقدار ورودی که خدمتت عرض کردم )
حذف شده
و خواستم با استفاده از map داخل select یه حلقه بزنم و بگم هر option یکه مقدار value ش برابر با مقدار ورودی م بود به اون option خاصیت selected تخصیص بده . خب از اونجایی که وقتی میخوای با map کار کنی باید مقدارت از نوع آرایه باشه پس من اومدم با استفاده از split یه حرکتی زدم (همونطور که میدونی split با توجه به ورودی که بهش میدی مقادیر رو داخل آرایه قرار میده) اگر دقت کرده باشی option های داخل select زیره هم هست درسته؟
حذف شده
پس به split گفتم که توی select م هر جا "n\" (کاراکتری که باعث میشه المانها زیرهم قرار بگیره) بیاد از هم جدا گنه و داخل یه آرایه قرارش بده تا در نهایت بتونم از map استفاده کنم و در آخر هم با استفاده از join هم از نوع آرایه درشون آوردم
حذف شده
حالا بیایم داخل فایل Handlebars مون .بزار از داخلی ترین قسمت کدم برات توضیح بدم یعنی همون each من اول این حلقه رو گذاشتم تا بیاد تمامی کاربر از database خونده بشن (نیاز به توضیح نیست میدونی دیگه) . حالا قسمت جالب اینجاست من این حلقه رو آوردم داخل اون helper ی که درستش کردم ، خاطرت هست دیگه مقدار ورودی میگرفت حالا اون مقدار ورودی رو بهش گفتم برابر با شناسه نویسنده پست (author_id) قرارش میده
حذف شده
و اون option خاصیت selected میگیره. حالا این شناسه چطوری بدست میاد ؟ زمانی که شما روی پست هر کاربر کلیک میکنید . یادته ؟ استاد موس رو روی پست ها هاور میکرد گوشه پایین سمت چپ صفحه بهمراه id نویسنده نمایش داده میشد. باز اگه جاییش برات سوال بود بگو تا بیشتر توضیح بدم
1
حذف شده

سلام خدمت استاد گرامی و دانشجویان عزیز

بنده برای قسمت وضعیت نوشته بدین صورت اقدام کردم:

exports.edit = async (req,res) => {
    const post = await postModel.find(req.params.postID);
    switch(post.status){
        case 2:
            post.isActive = true;
            break;
        case 1:
            post.isReview = true;
            break;
        case 0:
            post.isNotActive = true;
            break
    }
    console.log(post);
    res.render('admin/posts/edit', {layout: 'admin',post});
}

 

و در view:
 

<label class="adomx-radio-2 danger">
   <input type="radio" name="status" value="0" {{#if post.isNotActive}}checked=""{{/if}}> 
<i class="icon"></i>پیش نویس</label>
                                        
<label class="adomx-radio-2 warning">
   <input type="radio" name="status" value="1" {{#if post.isReview}}checked=""{{/if}}> 
<i class="icon"></i>در حال بازبینی</label>
                                        
<label class="adomx-radio-2 success">
   <input type="radio" name="status" value="2" {{#if post.isActive}}checked=""{{/if}}>
<i class="icon"></i>منتشر شده</label>

که این روش خیلی ساده است و هرجایی کاربرد نداره و فقط برای دیتاهایی که تنوع مقادیرشون کمه میتونه کار کنه

و روشی هم که دوست خوبمون آقای محمدی رهنما برای یوزر ها اعلام کردند خیلی خوبه که خیلی میتونه کار رو راحت کنه که من زیاد ازش سر در نیاوردم

فایل پیوست

محمد علی ناصری

توسط

محمد علی ناصری

19 خرداد 99

0
حذف شده

سلام به همگی دوستان . من برای اینکه سوء تفاهم پیش نیاد یه مسئله ای خواستم خدمتتون عرض کنم که من نمیدونستم استاد محترم با استفاده از Helper ها این قضیه رو ( نمایش نویسنده پست و وضعی ت مطلب هنگام بروزرسانی) رو پیاده سازی کردن  به همین خاطر گفتم تمرین خوبیه که خودم پیاده سازیش کنم در نهایت دلم نیمود با شما به اشتراک نذارم خواستم بگم پیش خودتون فکر نکنید " خسته نباشی اینو که استاد گفته بود که ! ". روی صحبتم با اون دسته از عزیزان هست که پست من رو چندین بار نگاه کردن و نه تنها مشارکت نداشتن بلکه رای منفی هم بهم داده بودن ?  

فایل پیوست

محسن محمدی رهنما

توسط

محسن محمدی رهنما

19 خرداد 99

جلسه به روز رسانی مطلب