কীভাবে এল () দিয়ে ইএমপিটিওয়াই অ্যাঙ্কর-লিংক তৈরি করবেন?


20

আমি আজাক্স-কলিংয়ের উদ্দেশ্যে l()এমন কিছু পাওয়ার জন্য ব্যবহার করার চেষ্টা করছি <a href='#' ...>/programming/1698453/drupal-creating-anchor-only-link-with-l খুব ডান জিনিস পাসে হবে - একটি বিকল্প ব্যবহার l()মত 'fragment' => 'foo'মত একটি লিঙ্ক উত্পাদন করতে <a href='#foo'...>- কিন্তু আমি একটি পরিষ্কার '#' পাওয়ার চেষ্টা করছেন। এটি করার কোনও উপায় আছে, বা আমার কি খণ্ড খণ্ডের অংশ হিসাবে কিছু দেওয়া উচিত এবং এটি নিয়ে চিন্তা করা উচিত নয়?

উত্তর:


12

আপনি যদি খণ্ড দিয়ে পরিষ্কার "#" ব্যবহার করতে না পারেন, আমি আপনাকে ব্যবহার করার পরামর্শ দিচ্ছি <a href="javascript:">link</a>
"জাভাস্ক্রিপ্ট:" বা "জাভাস্ক্রিপ্ট: অকার্যকর (0)" যুক্ত করার hrefসময় <a>ট্যাগটি কিছুই করবে না। তারপরে আপনি আপনার এজাক্সের উদ্দেশ্যে লিঙ্কটিতে "অনক্লিক" বাঁধতে পারেন।
আপনি l()নীচে হিসাবে এটি ব্যবহার করে এটি প্রয়োগ করতে পারেন :

     l('link', 'javascript:',  array('external' => TRUE));

কি সম্পর্কেjavascript:void(0)
সার্জাস

1
@ সেরজাস, javascript:এবং javascript:void(0)একই রকম। পার্থক্যটি কেবল "অকার্যকর (0)" :)
সিথু

মানে কি আমি () রূপান্তর করব ()?
সার্জাস

6
আপনার কখনই এ জাতীয় শেননিগান ব্যবহার করা উচিত নয় এবং কেবল ইভেন্ট চালিত জাভাস্ক্রিপ্ট ব্যবহার করা উচিত নয়! এটি ২০১২ সাল নয় 2004. এত নিম্ন মানের উত্তর আপ কেন ভোট দেওয়া হয়? জনপ্রিয় কারণ এটি সহজ? তবে এটি অত্যন্ত ভুল। :(

@ সিএইচএক্স, আপনি যেমন একটি ড্রপাল কোর রক্ষণাবেক্ষণকারী হিসাবে, আমি আশা করি আপনি পথ বা খণ্ডের পরিবর্তে l () ফাংশনে দ্বিতীয় প্যারামিটারটি ব্যবহার না করার অপব্যবহার করছেন না। দুর্ভাগ্যক্রমে, ফাংশনটি "জাভাস্ক্রিপ্ট "টিকে একটি পথ হিসাবে গ্রহণ করে :) এটি যদি খুব ভুল হয় তবে দ্রুপাল কেন এটি মেনে নেয়। সম্ভবত, এটি পরবর্তী দ্রুপাল সংস্করণগুলিতে সীমাবদ্ধ থাকবে।
সিথু

15

পিএইচপি টাইপকাস্টিং পপ কুইজের সময়! (সম্পূর্ণ প্রকাশ: আমি আমাদের অফিসে জিততে পারি না)।

ইতিমধ্যে নির্দেশিত হিসাবে, l()এটি আমাদের সাথে সম্পর্কিত যে কোড :

if (isset($options['fragment']) && $options['fragment'] !== '') {
  $options['fragment'] = '#' . $options['fragment'];
}

সুতরাং এখানে প্রশ্নটি: কোন মানটি খালি স্ট্রিংয়ে কাস্ট করে তবে নীচেরটি পাস করে?

(isset($var) && $var !== '')

এর জবাব হচ্ছে, FALSE!

সুতরাং, আমরা এটি চেষ্টা করতে পারে:

l(t('My link'), NULL, array('fragment' => FALSE));

যা আমাদের দেয়:

<a href="/#">My link</a>

ধন্যবাদ আমরা এগিয়ে যাওয়ার মাধ্যমে অগ্রণী স্ল্যাশটি কেটে ফেলতে পারি external => TRUE:

l(t('My link'), NULL, array('external' => TRUE, 'fragment' => FALSE));

যা আমাদের দেয়:

<a href="#">My link</a>

গম্ভীর গর্জন। এইচটিএমএল স্ট্রিং ম্যানুয়ালি এড়াতে আমরা যে জিনিসগুলি করি তা হ'ল?

পুনশ্চ:

আমি নিশ্চিত নই যে আমি স্বাভাবিক পরিস্থিতিতে পিএইচপি থেকে এই জাতীয় লিঙ্কটি প্রিন্ট করার প্রস্তাব দিই। আপনার জাভাস্ক্রিপ্ট ব্যতীত, সমস্ত লিঙ্কটি এটি আপনার ব্যবহারকারীকে পৃষ্ঠার শীর্ষে পৌঁছে দেবে ( যা আমার সামান্য অবাক হওয়ার মতো আচরণ হিসাবে চিহ্নিত )। এটি সম্ভবত কোথাও নির্দেশ করা উচিত যা জাভাস্ক্রিপ্ট ছাড়াই কাজ করে।

লিঙ্ক করেন সত্যিই শুধুমাত্র প্রায় জাভাস্ক্রিপ্ট সঙ্গে ইন্দ্রিয় তোলে (জন্য নিয়ন্ত্রণ মত একটি JS শুধুমাত্র স্লাইডশো বা কিছু), আমার মনে হয় এটা জাভাস্ক্রিপ্ট সঙ্গে পৃষ্ঠাতে লিঙ্ক যোগ করার জন্য ভালো। বিকল্পভাবে, আপনি যদি সত্যই এটি আপনার উত্সে রাখতে চান তবে নিশ্চিত হয়ে নিন যে এটি display:noneডিফল্টরূপে। .jsজাভাস্ক্রিপ্ট যখন কাছাকাছি থাকে তখন ড্রপল এর html এ ক্লাস করে থাকে।


7

দুর্ভাগ্যক্রমে url()ফাংশনটি (যা l()অভ্যন্তরীণভাবে কল করে) নিম্নলিখিত লাইনের সাথে খালি খণ্ডের কোনও সম্ভাবনা কমিয়ে দেয়:

if (isset($options['fragment']) && $options['fragment'] !== '') {
  $options['fragment'] = '#' . $options['fragment'];
}

এটি খণ্ডটি কোনও খালি স্ট্রিং নয় তা নিশ্চিত করার জন্য এটি পরীক্ষা করে, যা পরিষ্কার হওয়ার জন্য আপনাকে পাস করতে হবে #। আমি মনে করি সবচেয়ে সহজ সমাধান javascript:voidহ'ল পৃষ্ঠায় কোথাও উপযুক্ত উপাদানটির আইডি বাছাই করা এবং সেই পরিবর্তে খণ্ডের জন্য (বা সিথু উল্লেখ করেছেন) এটি ব্যবহার করা।

তবে ... সর্বাধিক অ্যাক্সেসযোগ্য উপায় (এবং পরবর্তীতে, অনেক দেশে আইনী উপায়ে; রাজ্যের 508 অনুচ্ছেদ , যুক্তরাজ্যের ডিডিএ , ইত্যাদি ভাবেন ) আপনার লিঙ্কটি দ্বারা লোড / অ্যাডজাস্ট করা সামগ্রী সরবরাহ করা হবে on একটি পৃথক পৃষ্ঠা এবং পরিবর্তে লিঙ্কটির href হিসাবে এই পৃষ্ঠার জন্য URL টি ব্যবহার করুন। তারপরে আপনি জাভাস্ক্রিপ্টটি লিঙ্কটিতে ইভেন্টটি থামানোর জন্য ব্যবহার করতে পারবেন যা সক্ষম হয়েছে এমন ব্রাউজারগুলির জন্য পৃষ্ঠাটি পুনর্নির্দেশ করা থেকে।

জাভাস্ক্রিপ্ট ব্যতীত ব্যবহারকারীদের কাছে আপনার ফ্যালব্যাক সামগ্রী রয়েছে, আপনি আইনী থাকবেন এবং আপনি এবং তাদের কুকুরটিকে খুশি রাখবেন :)


ফ্যালব্যাক সম্পর্কে দুর্দান্ত সম্পাদনা! আমরা যদি লিঙ্কটির href এজ্যাক্স ইউআরএল ব্যবহার করি তবে জাভাস্ক্রিপ্ট অক্ষম থাকলে কলিং পৃষ্ঠাটি একটি উপস্থাপনযোগ্য এইচটিএমএল হতে পারে? print drupal_json_output($output)আমার অজ্যাক্স কলিং পৃষ্ঠায় কখনও ছিল ।
সিথু

4

আপনি পরিষ্কার ব্যবহার করতে পারেন না #

তবে এর space symbolপরে যুক্ত করা সম্ভব #:

  l('Link title', '# ', array('external' => TRUE));

2

আমার সবেমাত্র একই সমস্যা ছিল, তবে সমাধানগুলির কোনওটিই সন্তুষ্ট হয়নি, তাই আমি আমার নিজের সাথে এলাম:

l('link', '', array('fragment' => ' ', 'html' => TRUE, 'external' => TRUE));

এটি একটি পরিষ্কার উত্পাদন #

<a href="#">link</a>

বন্ধ করুন, এটি <a href="# ">link</a>আমার জন্য উত্পাদন করে ।
tyler.frankenstein

1

আমি পরিবর্তে রেন্ডার প্রকারের html_tag ব্যবহার করব কারণ আমার বিশ্বাস রেন্ডার লিঙ্কটি দ্রুপালের কাছ থেকে বিশেষ মনোযোগ পেয়েছে। খারাপ দিকটি এর জন্য কোনও শর্ট-কাট ফাংশন নেই, সুতরাং আমাদের একটি রেন্ডার অ্যারে ব্যবহার করতে হবে:

array (
  '#type' => 'html_tag',
  '#tag' => 'a',
  '#attributes' => array (
    'href' => '#',
  ),
);

0

মূলত আমি এখানে পোস্ট করা একই উত্তর ... fragmentএকক স্পেসে সেট করা একটিতে রূপান্তরিত হবে #, এবং $current_pathএটি অন্তর্ভুক্ত করা হয়েছে কারণ অন্যথায় লিঙ্কটি কেবল www.example.com/#পরিবর্তে সেট করা হবে www.example.com/current-page#:

$current_path = check_url(drupal_get_path_alias($_GET['q']));
$link = l('link', $current_path, array('fragment' => ' '));

পাথ এলিফটি পাওয়ার দরকার নেই কারণ l () আপনার জন্য উপামে রূপান্তরিত হবে। অ-অভিযুক্ত পথটি ব্যবহার করা ভাল।
রুবি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.