আমি কীভাবে আপেক্ষিক মেনু লিঙ্কগুলি তৈরি করব?


10

আমি আমার লোকালহোস্টের একটি সাইটে কাজ করতে ব্যস্ত রয়েছি যা দ্রুপাল থেকে পৃথক কিছু সামগ্রীর সাথে লিঙ্ক করা দরকার।

আমি বর্তমান মেনু পাথ ভালো সেট আপ আছে: http://mylocalsite/the_folder_for_the_other_content। যদি আমি চেষ্টা করি <front>/the_folder_for_the_other_contentবা /the_folder_for_the_other_contentবা the_folder_for_the_other_content, আমি ত্রুটিটি পেয়েছি "পথ 'যাই হোক_ আই_উস' হয় তা অবৈধ বা আপনার এতে অ্যাক্সেস নেই" "

আমি যখন লাইভে যাই তখন অবশ্যই আমার নির্দেশ করতে সমস্ত মেনু আইটেমের প্রয়োজন হয় http://myrealsite/the_folder_for_the_other_content

আমি কীভাবে এটি সেট আপ করতে পারি যাতে আমি যখন লাইভ থাকি তখন আমাকে সমস্ত মেনু পথ সম্পাদনা করতে না হয়?


@ ইরিশবুজের নীচে দ্রুপাল for এর জন্য একটি কার্যনির্বাহী কাজ রয়েছে, তবে আমি আশাবাদী যে আমি ড্রুপাল this এ এটি করা এড়াতে পারব 7.. আমার পক্ষে কি এই ইচ্ছাবাদী চিন্তাভাবনা?
মার্টিন ডিউস

ড্রপাল কি ওয়েব সার্ভারের মূল ডিরেক্টরিতে ইনস্টল করা আছে?
কিমলালুনো

আমার লোকালহোস্ট সংস্করণে নয়, তবে শেষ পর্যন্ত এটি লাইভ হয়ে গেলে এটি সর্বজনীন_এইচটিএমএল ফোল্ডারের মূলে থাকবে। এটি কি 'ওয়েব সার্ভারের মূল' হিসাবে গণ্য হবে?
মার্টিন ডিউস

"ওয়েব সার্ভারের মূল ডিরেক্টরি" দ্বারা, আমি বোঝাতে চাইছি যে ডিরেক্টরিটি অ্যাপাচিতে "ডকুমেন্টআর্ট" নির্দেশের সাথে সেট করা আছে এবং এটি ডিফল্টরূপে পাবলিক_এইচটিএমএল ডিরেক্টরি হয়। আপনি যখন ইউআরএল ব্যবহার করেন তখন এটি ডিরেক্টরি অ্যাপাচি অ্যাক্সেস http://example.com/
কিমলালুনো

তারপরে: হ্যাঁ শেষ পর্যন্ত সাইটটি মূল ডিরেক্টরিতে থাকবে
মার্টিন ডিউস

উত্তর:


4

কিমলালুনোর উত্তর আমার পক্ষে বেশ কার্যকর হয়নি। % মেনু_টেল ব্যবহার করে ত্রুটির ঝড় উঠেছে যে মেনু_টেল_লোড ফাংশনটি অনুপস্থিত আর্গুমেন্টগুলির সাথে সমস্যা ছিল:

Warning: Missing argument 2 for menu_tail_load(), called in  ... /includes/menu.inc on line 579 and defined in menu_tail_load() (line 827 of ... /includes/menu.inc).
Warning: Missing argument 3 for menu_tail_load(), called in ... /includes/menu.inc on line 579 and defined in menu_tail_load() (line 827 of ... /includes/menu.inc).

আমার জন্য কি কাজ ছিল

function allow_menu_links_menu() {
  $items = array();
  $items['sites/d8/files/%'] = array(
    'title' => 'Folder Content',
    'page callback' => 'allow_menu_links_cb', /* never called */
    'access callback' => TRUE,
  );
  return $items;
}

তারপরে, আমি সাইটগুলি / d8 / ফাইল ফোল্ডারে (এবং সাবফোল্ডারগুলি) মেনু আইটেমগুলি যেমন পাথ সহ ব্যবহার করতে পারতাম sites/d8/files/Documents/MyFile.pdf

মেনু সিস্টেমটি এর পরে একটি লিঙ্ক তৈরি করবে href="https://drupal.stackexchange.com/sites/d8/files/Documents/MyFile.pdf"

আপনি যদি কাস্টম মেনু মডিউলটি ব্যবহার না করেন তবে মেনু সিস্টেমটি উপরের মতো শুরু হওয়া কোনও পথকে প্রত্যাখ্যান করবে।

আপনি যদি এর মতো কোনও পাথ ব্যবহার করার চেষ্টা করেন তবে http:sites/d8/files/Documents/MyFile.pdfএটির মতো একটি লিঙ্ক তৈরি হবে href="http:sites/d8/files/Documents/MyFile.pdf", যা আপনি সাইটের মূলে থাকাকালীন কাজ করবে তবে আপনি যখন কোনও সামগ্রীর পৃষ্ঠায় থাকবেন তখন ব্রাউজারটি সামগ্রী পৃষ্ঠার সাথে সম্পর্কিত url ব্যাখ্যা করবে, এবং এটি কাজ করবে না।

আপনি যদি এর মতো কোনও পাথ ব্যবহার করেন http:/sites/d8/files/Documents/MyFile.pdfতবে মেনু সিস্টেমটি এটি গ্রহণ করবে তবে মেনু সিস্টেমটি এমন একটি লিঙ্ক তৈরি করবে href="http:/sites/d8/files/Documents/MyFile.pdf"যা ব্রাউজার (কমপক্ষে সাফারি) হিসাবে ব্যাখ্যা করবে href="http://sites/d8/files/Documents/MyFile.pdf"এবং "সাইটগুলি" নামক সার্ভারটি অনুসন্ধানের চেষ্টা করতে ব্যর্থ হবে ।

(আরও তদন্তের ক্ষেত্রে, মেনু_ টেইল কোডটি ব্যর্থ হওয়ার কারণটি হ'ল আপনাকে এখানে 'লোড আর্গুমেন্ট' যুক্ত করতে হবে, যেমন এখানে উল্লেখ করা হয়েছে: http://api.drupal.org/api/drupal/includes--menu.inc/function / menu_tail_load / 7 আপনি যোগ করে। 'load arguments' => array('%map', '%index'),kiamlaluno এর কোড মধ্যে $ আইটেম সংজ্ঞা, এটা কাজ করবে কিনা menu_tail_load স্পষ্ট বোঝা আর্গুমেন্ট প্রয়োজন, ইস্যু এখানে আলোচনা করা হয়। http://drupal.org/node/298561 )

(আপনার নতুন মডিউল সক্ষম করতে ভুলবেন না, বা মেনু সিস্টেম নতুন লিঙ্কগুলি গ্রহণ করবে না)


5

আপনি যখন কোনও নতুন লিঙ্ক যুক্ত করবেন, লিঙ্কটি মেনু_ইডিট_টাইম_ডিয়্যালিটি () থেকে বৈধ হয়ে গেছে , যা পথটি বৈধ কিনা তা পরীক্ষা করতে ড্রপাল_অালিড্টিপথ () কল করে বা এটি ব্যবহারকারীর কাছ থেকে অ্যাক্সেস করা যায়। যদি
drupal_valid_path()ফেরত দেয়TRUE

  • পাথটি <front>( <front>/directoryবা অনুরূপ পাথগুলি বাদ রয়েছে)
  • পাথটি একটি বাহ্যিক পাথ (ক্রিয়াকলাপ url_is_external () ফিরে আসে TRUE)
  • পাথটি একটি মেনু কলব্যাকের সাথে সম্পর্কিত

পরম ইউআরএলগুলি ব্যবহার করা ছাড়াও একমাত্র সমাধানটি হ'ল একটি কাস্টম মডিউল থাকে যা আপনি ব্যবহার করতে চান সেই পথের সাথে যুক্ত একটি মেনু কলব্যাককে সংজ্ঞায়িত করে।
আপনি যখন ইউআরএল ব্যবহার করেন যা কোনও ফাইল বা ডিরেক্টরিতে নির্দেশ করে, তখন ওয়েব সার্ভারে দ্রুপালকে আহ্বান না করে সেই ফাইল বা ডিরেক্টরিটি প্রদর্শন করা উচিত। অ্যাপাচি-র সাথে এটি ঘটেছিল, কারণ দ্রুপালের সাথে আসা htaccess ফাইলটিতে নিম্নলিখিত নির্দেশাবলী রয়েছে:

# Pass all requests not referring directly to files in the filesystem to
# index.php. Clean URLs are handled in drupal_environment_initialize().
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]

আপনার ক্ষেত্রে, কাস্টম মডিউলটিতে নিম্নলিখিতগুলির মতো কোড থাকা উচিত:

function mymodule_menu() {
  $items = array();

  $items['the_folder_for_the_other_content/%menu_tail'] = array(
    'title' => 'Folder content', 
    'page callback' => 'mymodule_view', 
    'access callback' => TRUE,
    'load arguments' => array('%map', '%index'), 
  );

  return $items;
}

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

বিকল্প হিসাবে আপনি "ওরফে_ফোর্ড_ডাইরেক্টরি /% মেনু_টেল" এর সাথে যুক্ত একটি মেনু কলব্যাক সংজ্ঞায়িত করতে পারেন যা ব্যবহারকারীরা যে ডিরেক্টরিটি দেখতে চান তার দিকে ডাইরেক্ট করে (দ্রুপাল_গোটো () ব্যবহার করে )। সার্ভার .htaccess এর সামগ্রী ব্যবহার না করে আমি এই সমাধানটি ব্যবহার করব এবং ইউআরএলটি কোনও বিদ্যমান ফাইল বা ডিরেক্টরিতে নির্দেশ করলেও এটি ড্রুপালকে ডাকবে।


3

আমার জন্য নিম্নলিখিতটি কৌতুকটি করেছিল (ড্রুপাল 6 এ)।

আমি একই ডোমেনে অন্য একটি ইউআরএল নির্দেশ করতে চাই, ধরা যাক দ্রুপাল চলছে http://www.example.comএবং আমি এর সাথে একটি লিঙ্ক রাখতে চাইhttp://www.example.com/frontend

মেনু আইটেমটিতে, দয়া করে পথ হিসাবে প্রবেশ করুন:

http:/frontend

ড্রুপাল মেনু এতে লিঙ্ক করবে: http://www.example.com/frontend

আপনি যখন https ব্যবহার করেন, আপনাকে মেনু আইটেমের জন্য পথ ক্ষেত্রে https: / সম্মুখভাগ প্রবেশ করা উচিত।


কোনও ধারণা যদি এটি 7 /
মার্টিন ডিউস

জানি না, একবার চেষ্টা করে দেখুন
পল

আমি এই পদ্ধতিটি 7.22 সংস্করণ হিসাবে কাজ করছে না তা খুঁজে পাচ্ছি।
রিক

1
এটি ড্রুপাল 7.23 এ কাজ করে। আমি কিছুক্ষণের জন্য এটি করার চেষ্টা করে আসছি, যদি আমি আপনাকে +10 করতে পারি
ডারকর্ড

1

আমি আমার লিঙ্ক সমস্যাগুলি নিম্নলিখিতগুলির সাথে সমাধান করেছি:

http://groups.drupal.org/node/210308 এবং http://drupal.org/node/372252

দেখা যাচ্ছে যে আমার থিমটি মেনুটি ভুলভাবে মুদ্রণ করছিল যাতে সমস্ত আইটেমগুলি আমার বর্তমান অবস্থানের সাথে সম্পর্কিত (যেমন অ্যাডমিন / লগআউট, / লগআউটের পরিবর্তে)।

আশাকরি এটা সাহায্য করবে.


1

আমি মেনু স্ট্রাকচারে লিঙ্কটি প্রতিস্থাপন করতে স্ক্যুএল ব্যবহার করেছি:

UPDATE menu_links SET link_path = replace(link_path, "livesite.com", "localhost.com");

আমার এটি করার দরকার ছিল কিনা তা নিশ্চিত নয় তবে আমি মেনু ক্যাশেগুলি ফ্লাশ করে দিয়েছি।


আপনি কেন ক্যোয়ারী পরিবর্তন করতে চান? এটি প্রস্তাবিত নয়।
জার্নেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.