ফ্রিমার্কার টেমপ্লেটে কোনও ভেরিয়েবল বিদ্যমান কিনা তা কীভাবে পরীক্ষা করবেন?


175

আমার একটি ফ্রিমার্কার টেম্পলেট রয়েছে যার মধ্যে একাধিক স্থানধারক রয়েছে যার জন্য টেমপ্লেটি প্রক্রিয়া করার সময় মান সরবরাহ করা হয়। আমি ব্যবহারকারীর নাম ভেরিয়েবল সরবরাহ করা থাকলে শর্তসাপেক্ষে টেম্পলেটটির কিছু অংশ অন্তর্ভুক্ত করতে চাই:

[#if_exists userName]
  Hi ${userName}, How are you?
[/#if_exists]

যাইহোক, ফ্রিমার্কার ম্যানুয়ালটি ইঙ্গিত দিচ্ছে যে if_exists হ্রাস করা হয়েছে, তবে আমি এটি অর্জনের অন্য কোনও উপায় খুঁজে পাচ্ছি না। অবশ্যই আমি ইউসারনাম অতিরিক্ত বুলিয়ান ভেরিয়েবল সরবরাহ করতে পারলাম এবং এটি ব্যবহার করতাম:

[#if isUserName]
  Hi ${userName}, How are you?
[/#if]

তবে যদি ব্যবহারকারীর নাম বিদ্যমান কিনা তা পরীক্ষা করার কোনও উপায় থাকে তবে আমি এই অতিরিক্ত পরিবর্তনশীলটি এড়াতে পারি।

উত্তর:


304

মান বিদ্যমান কিনা তা পরীক্ষা করতে:

[#if userName??]
   Hi ${userName}, How are you?
[/#if]

বা স্ট্যান্ডার্ড ফ্রিমার্কার সিনট্যাক্স সহ:

<#if userName??>
   Hi ${userName}, How are you?
</#if>

মানটি বিদ্যমান এবং খালি নেই কিনা তা পরীক্ষা করতে:

<#if userName?has_content>
    Hi ${userName}, How are you?
</#if>

1
যদি অন্য কারও দ্বারা এটিকে ফেলে দেওয়া হয় তবে #if সিনট্যাক্সটি বন্ধনীগুলির চেয়ে অক্ষরের চেয়ে কম এবং বৃহত্তর দ্বারা ঘিরে থাকা উচিত। উদাহরণস্বরূপ: <# আইফ ব্যবহারকারীর নাম ??>
ক্যামেরন

এই সিনট্যাক্সটি ব্যবহার করা আসলে সম্ভব, সুতরাং আমি কেবল প্রশ্নের বাক্য গঠনটি
উলফ লিন্ডব্যাক

10
এটি কেবল ভের উপস্থিত কিনা তা পরীক্ষা করে দেখুন। তবে আপনার যদি "ইউজারনেম" এ খালি স্ট্রিং থাকে তবে <# আইফ ইউজারনেম ??> সত্য হবে! এই সমস্যাটি সমাধানের জন্য এই পৃষ্ঠায় @ ব্যবহারকারী1546081 উত্তর দেখুন।
অ্যাড্রিয়েন

94

এটি একটি ভাল ফিট বলে মনে হচ্ছে:

<#if userName?has_content>
... do something
</#if>

http://freemarker.sourceforge.net/docs/ref_builtins_expert.html


2
বৈচিত্রটি উপস্থিত রয়েছে কিনা তা পরীক্ষা করে দেখে মনে হয় এটির লিখিত সামগ্রী নাল বা খালি না থাকলে (এখানে খালি স্ট্রিংগুলি উল্লেখ করে)।
অ্যাড্রিয়েন

4
এটিকে হ্রাস করতে হবে কারণ এটি প্রযুক্তিগতভাবে ভুল এবং ভেরিয়েবলটি উপস্থিত থাকলে (কী অপশনটি চেক করতে চেয়েছিল) তবে খালি থাকলে তা অনিচ্ছাকৃত (মিথ্যা নেতিবাচক) আচরণের দিকে পরিচালিত করবে ।
ম্যাডব্রেকস

65

এছাড়াও আমি মনে করি if_exists যেমন ব্যবহার করা হয়েছিল:

Hi ${userName?if_exists}, How are you?

যা ইউজারনাম নাল হলে ভাঙবে না, ফলাফল যদি নাল হয় তবে:

Hi , How are you?

if_exists এখন অবচয় করা হয়েছে এবং এটি ডিফল্ট অপারেটরের সাথে প্রতিস্থাপন করা হয়েছে! হিসাবে হিসাবে

Hi ${userName!}, How are you?

ডিফল্ট অপারেটর ডিফল্ট মানকেও সমর্থন করে যেমন:

Hi ${userName!"John Doe"}, How are you?

1
বুলিয়ান মূল্যায়ন করতে ডিফল্ট মান অপারেটর ব্যবহার করা যায় না। সেই হিসাবে এটি ifঅপের অনুরোধ হিসাবে কোনও বিবৃতিতে ব্যবহার করা যাবে না ।
ম্যাডব্রেক্স

5

আমি মনে করি যে প্রচুর লোকেরা তাদের ভেরিয়েবলটি খালি নেই তেমনি রয়েছে কিনা তা পরীক্ষা করে দেখতে সক্ষম হতে চাইছেন। আমি মনে করি যে অস্তিত্ব এবং শূন্যতার জন্য পরীক্ষা করা অনেক ক্ষেত্রে ভাল ধারণা এবং এটি আপনার টেমপ্লেটটিকে আরও দৃust় এবং মূ .় ত্রুটিগুলির প্রবণ করে তোলে। অন্য কথায়, আপনি যদি নিশ্চিত হন যে এটির ব্যবহারের আগে আপনার ভেরিয়েবলটি নাল নয় এবং খালি নয়, তবে আপনার টেমপ্লেটটি আরও নমনীয় হয়ে যায়, কারণ আপনি এটিতে নাল ভেরিয়েবল বা একটি খালি স্ট্রিং ফেলে দিতে পারেন এবং এটি একই কাজ করবে উভয় ক্ষেত্রে.

<#if p?? && p?has_content>1</#if>

ধরা যাক আপনি এটি নিশ্চিত করতে চান যে pএটি কেবল সাদা জায়গার চেয়ে বেশি। তারপরে আপনি এটি পরীক্ষা করতে আগে এটি ছাঁটাই করতে পারেন কিনা তা দেখার জন্য has_content

<#if p?? && p?trim?has_content>1</#if>

হালনাগাদ

দয়া করে আমার পরামর্শটি উপেক্ষা করুন - has_contentযা প্রয়োজন তা হ'ল খালি চেকের সাথে এটি নাল চেক করে। এরকম p?? && p?has_contentসমতূল্য p?has_contentযাতে আপনি হিসাবে ভাল শুধু ব্যবহার করতে পারি has_content


2

ফ্রিমার্কার ২.৩..7 এর আগের সংস্করণগুলির জন্য

আপনি ??অনুপস্থিত মানগুলি হ্যান্ডেল করতে ব্যবহার করতে পারবেন না , পুরানো বাক্য গঠনটি হ'ল:

<#if userName?exists>
   Hi ${userName}, How are you?
</#if>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.