۶ میلیون تومن هدیه🎁 + کلی آفر جذاب در کمپین تابستون🔥 تابستون کوتاهه پس بزن بریم 👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ محسن محمدی رهنما
نمایش نویسنده پیش فرض در هنگام بروزرسانی پست
جامعه نود جی اس ایجاد شده در ۱۷ خرداد ۱۳۹۹

عرض سلام و ادب خدمت استاد محترم و دوستان عزیز؛ خواستم عرض کنم خدمت شما اینکه در قسمت بروزرسانی , استاد فرمودن که وقتی روی هر پستی کلیک میکنیم و وارد صفحه ویرایش که شدیم در قسمت نام نویسنده , نام نویسنده اون پست هم توی منوی 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 رو گذاشتم تا از منوی موجود به تمامی نویسنده‌ها دسترسی داشته باشه . امیدوارم براتون مفید و کاربردی  باشه . حالا دوستان شما هم بیایید کد مربوط به وضعیت مطلب رو بنویسید و با بقیه به اشتراک بزارید. ممنون از همگی

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

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

ممنون

Ali Naseri ۱۸ خرداد ۱۳۹۹، ۲۲:۵۱

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

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

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>

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

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

Ali Naseri ۱۹ خرداد ۱۳۹۹، ۰۰:۱۷

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

محسن محمدی رهنما ۱۹ خرداد ۱۳۹۹، ۰۷:۴۳