একটি “তারকাযুক্ত” ফিড তৈরি করা হচ্ছে | CSS-কৌশল


আমার পোস্টে ফিগার এবং ফিগক্যাপশন সমর্থনের উপর সংক্ষিপ্ত নোট আমি দেখাই কিভাবে, যখন স্ক্রিন রিডারের সাথে একটি চিত্রের মুখোমুখি হয়, আপনি শুনতে পাবেন না সবকিছু সঙ্গে সঙ্গে ঘোষণা:

কোনও স্ক্রিন রিডার কম্বো ক্যাপশনটিকে অ্যাক্সেসযোগ্য নাম বা অ্যাক্সেসযোগ্য বিবরণ হিসাবে বিবেচনা করে না, এমনকি একটির জন্যও নয়…

যে কৌতুক এবং/অথবা আলোচনায় আমি অসুস্থ এবং ক্লান্ত হয়ে পড়েছি তার মধ্যে একটি হল লোকেদের ছোট করা এইচটিএমএল. হ্যাঁ, এইচটিএমএল একটি প্রোগ্রামিং ভাষা নয়। না, এইচটিএমএল শুধুমাত্র একটি সংকলন লক্ষ্য হওয়া উচিত নয়। শেখা এইচটিএমএল একটি কঠিন বিনিয়োগ এবং করা কঠিন নয়।

আমি নই…

আমরা ব্যবহার করতে পারেন :empty ছদ্ম-শ্রেণী আপনার ওয়েবপেজে খালি উপাদানগুলিকে শৈলী করার উপায় হিসাবে।

আপনি ভাবতে পারেন কেন আপনি খালি এমন কিছু স্টাইল করতে চান। ধরা যাক আপনি একটি করণীয় তালিকা তৈরি করছেন।

আপনি আপনার করণীয় আইটেমগুলিকে একটি তালিকায় রাখতে চান, কিন্তু যখন আপনি তা করবেন না তখন কী হবে…

2023 সালে ফিরে, আই বিলম্বে ব্যান্ডওয়াগনের উপর ঝাঁপিয়ে পড়ল আসন্ন বছরের জন্য তাদের CSS ইচ্ছা তালিকা পোস্ট করা লোকেদের সংখ্যা। এই বছর আমি আবার যে সব করছি, কম বিলম্বে! (আমি গত বছর এটি করিনি কারণ আমিও পারিনি। এটি পান?)

আমি যা দেখে এই পোস্টটি শুরু করেছি…

এটা, আসলে. ফায়ারফক্সে। মাঝে মাঝে।

টেক্সট বিষয়বস্তু সংজ্ঞায়িত করার জন্য ARIA ব্যবহার করার একটি বড় ঝুঁকি হল এটি সাধারণত অনুবাদে উপেক্ষা করা হয়। স্বয়ংক্রিয় অনুবাদ পরিষেবাগুলি প্রায়ই এটি ক্যাপচার করে না। যারা স্থানীয়করণ পরিষেবার জন্য অর্থ প্রদান করে তারা স্থানীয়করণ বিক্রেতাদের কাছে পাঠ্য স্ট্রিং পাঠানোর সময় ঘন ঘন ARIA বৈশিষ্ট্যগুলিতে সামগ্রী মিস করে।

কন্টেন্ট সমাহিত…

৬ বছর আগে পোস্ট করেছিলাম সিএসএস অ্যাসিঙ্ক্রোনাস লোড করার সবচেয়ে সহজ উপায় একটি হ্যাক নথিভুক্ত করার জন্য যা আমরা অন্তত 6 বছর আগে ব্যবহার করে আসছিলাম। এই হ্যাকের জন্য ব্যবহার কেস হল সিএসএস ফাইলগুলিকে অ্যাসিঙ্ক্রোনাসভাবে লোড করা, এমন কিছু যা HTML নিজেই এখনও সমর্থন করে না, যদিও…

এই নিবন্ধটি দ্বারা স্পনসর করা হয় DebugBear

সাথে আড্ডা দিচ্ছিলাম ডিবাগকানএর ম্যাট জিউনার্ট এবং, প্রক্রিয়ায়, তিনি আকস্মিকভাবে এই জিনিসটির নাম উল্লেখ করেছেন টাইট মোড ব্রাউজার কিভাবে সম্পদ আনয়ন এবং অগ্রাধিকার দেয় তা বর্ণনা করার সময়। আমি মাথা নাড়াতে চেয়েছিলাম যেন আমি জানি সে কি বিষয়ে কথা বলছে…

আমি সম্ভাব্য দ্বারা উত্তেজিত করেছি text-box-trim, text-edge এবং text-box কিছুক্ষণের জন্য তারা আছে খসড়া অবস্থা এই মুহূর্তে, কিন্তু যখন আরো ব্রাউজার সমর্থন উপলব্ধ, এই ক্ষমতা ব্রাউজারে টাইপসেটিং উন্নত করার জন্য কিছু উত্তেজনাপূর্ণ সম্ভাবনা উন্মুক্ত করবে, সেইসাথে আমাদের আরও কিছু দেবে…

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

ক্রিস ডেমো হাড় সরবরাহ করে এবং এটি বেশিরভাগ ভারী উত্তোলন করে। “কঠিন” অংশগুলি জিনিসটিকে একটি ওয়ার্ডপ্রেস ব্লক আর্কিটেকচারে বর্গাকার-পেগিং করে এবং তারপর ক্ষণস্থায়ী হয়ে উঠছিল। এটি আমার প্রথমবার ট্রানজিয়েন্টদের সাথে কাজ করা, তাই আমি ভেবেছিলাম যে আমি প্রাসঙ্গিক কোডটি ভাগ করব এবং এটি আলাদা করব।

function fetch_and_store_data() {
  $transient_key = 'fetched_data';
  $cached_data = get_transient($transient_key);

  if ($cached_data) {
    return new WP_REST_Response($cached_data, 200);
  }

  $response = wp_remote_get('https://feedbin.com/starred/a22c4101980b055d688e90512b083e8d.xml');
  if (is_wp_error($response)) {
    return new WP_REST_Response('Error fetching data', 500);
  }

  $body = wp_remote_retrieve_body($response);
  $data = simplexml_load_string($body, 'SimpleXMLElement', LIBXML_NOCDATA);
  $json_data = json_encode($data);
  $array_data = json_decode($json_data, true);

  $items = ();
  foreach ($array_data('channel')('item') as $item) {
    $items() = (
      'title' => $item('title'),
      'link' => $item('link'),
      'pubDate' => $item('pubDate'),
      'description' => $item('description'),
    );
  }

  set_transient($transient_key, $items, 12 * HOUR_IN_SECONDS);

  return new WP_REST_Response($items, 200);
}

add_action('rest_api_init', function () {
  register_rest_route('custom/v1', '/fetch-data', (
    'methods' => 'GET',
    'callback' => 'fetch_and_store_data',
  ));
});

এই refactored এবং আরো দক্ষতার লেখা হতে পারে? সমস্ত লক্ষণ হ্যাঁ নির্দেশ করে। কিন্তু এখানে আমি কিভাবে এটা grokked:

function fetch_and_store_data() {

}

ফাংশনের নাম যেকোনো কিছু হতে পারে। নামকরণ কঠিন। প্রথম দুটি ভেরিয়েবল:

$transient_key = 'fetched_data';
$cached_data = get_transient($transient_key);

$transient_key কেবলমাত্র একটি নাম যা ক্ষণস্থায়ীকে চিহ্নিত করে যখন আমরা এটি সেট করি এবং এটি পাই। আসলে, দ $cached_data যে অংশ সম্পন্ন তাই গেটার হয়. চেক!

আমি শুধু চাই $cached_data যদি এটি বিদ্যমান থাকে, তাই এর জন্য একটি চেক আছে:

if ($cached_data) {
  return new WP_REST_Response($cached_data, 200);
}

এটি ওয়ার্ডপ্রেস REST API থেকে একটি নতুন প্রতিক্রিয়াও প্রতিষ্ঠা করে, যেখানে ডেটা ক্যাশে করা হয়। ফিডবিন থেকে সরাসরি ডেটা টেনে আনার পরিবর্তে, আমি এটি টেনে নিয়ে যাচ্ছি এবং এটি REST API-তে ক্যাশে করছি। এইভাবে, CORS এখন আর কোন সমস্যা নয় যে তারকাচিহ্নিত আইটেমগুলি এখন স্থানীয়ভাবে আমার নিজের ডোমেনে সংরক্ষণ করা হয়। যে যেখানে wp_remote_get() ফাংশনটি ফিডবিন থেকে উত্স হিসাবে প্রতিক্রিয়া তৈরি করতে আসে:

$response = wp_remote_get('https://feedbin.com/starred/a22c4101980b055d688e90512b083e8d.xml');

একইভাবে, আমি একটি ত্রুটি নিক্ষেপ করার সিদ্ধান্ত নিয়েছি যদি না থাকে $response. মানে ফ্রেশ নেই $cached_data এবং এটি এমন কিছু যা আমি এখনই জানতে চাই।

if (is_wp_error($response)) {
  return new WP_REST_Response('Error fetching data', 500);
}

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

$body = wp_remote_retrieve_body($response);
$data = simplexml_load_string($body, 'SimpleXMLElement', LIBXML_NOCDATA);
$json_data = json_encode($data);
$array_data = json_decode($json_data, true);

$items = ();
foreach ($array_data('channel')('item') as $item) {
  $items() = (
    'title' => $item('title'),
    'link' => $item('link'),
    'pubDate' => $item('pubDate'),
    'description' => $item('description'),
  );
}

“বিবরণ” একটি লোড করা শব্দ। এটি একটি পোস্টের সম্পূর্ণ অংশ বা একটি অংশ হতে পারে — আমরা এটি না পাওয়া পর্যন্ত আমরা জানি না! সুতরাং, আমি ব্লক এর মধ্যে এটা splicing এবং ছাঁটা করছি Edit 50 শব্দের বেশি না হলে এটিকে স্তব্ধ করার জন্য উপাদান। সেখানে একটু ঝুঁকি আছে কারণ আমি API থেকে ফিরে আসা HTML রেন্ডার করছি। নিরাপত্তা, হ্যাঁ। কিন্তু এমন সুযোগও আছে যে আমি আমার লেআউটকে মফ করে এর ক্লোজিং কাউন্টারপার্ট ছাড়াই একটি ওপেন ট্যাগ রেন্ডার করি। আমি জানি যে লাইব্রেরি আছে তা মোকাবেলা করার জন্য কিন্তু আমি এখন জিনিসগুলি সহজ রাখছি।

জিনিসগুলি আনা এবং পার্স করা হয়ে গেলে এখন ক্ষণস্থায়ী সেট করার সময়:

set_transient($transient_key, $items, 12 * HOUR_IN_SECONDS);

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

  • $value: এই বস্তুটি আমরা নামযুক্ত ক্ষণস্থায়ী মধ্যে সংরক্ষণ করছি। যে $items সমস্ত পার্সিং হ্যান্ডলিং অবজেক্ট।
  • $expiration: এই ক্ষণস্থায়ী কতক্ষণ স্থায়ী হওয়া উচিত? এটি ক্ষণস্থায়ী হবে না যদি এটি চিরকালের জন্য দীর্ঘস্থায়ী হয়, তাই আমরা সেকেন্ডে প্রকাশ করা সময়ের পরিমাণ সেট করি। খনিটি মেয়াদ শেষ হওয়ার আগে 12 ঘন্টা স্থির থাকে এবং পরের বার যখন কোনও দর্শক পৃষ্ঠায় আঘাত করে তখন আপডেট হয়।

ঠিক আছে, সময় return একটি নতুন প্রতিক্রিয়া হিসাবে REST API থেকে আইটেমগুলি:

return new WP_REST_Response($items, 200);

তাই তো! ঠিক আছে, অন্তত সেটিং এবং ক্ষণস্থায়ী পাওয়ার জন্য। পরবর্তী জিনিসটি আমি বুঝতে পেরেছিলাম যে ডেটা কল করার জন্য আমার একটি কাস্টম REST API শেষ পয়েন্ট ছিল। আমি সত্যিই ঝুঁক ছিল ওয়ার্ডপ্রেস ডক্স এটি চালু করতে:

add_action('rest_api_init', function () {
  register_rest_route('custom/v1', '/fetch-data', (
    'methods' => 'GET',
    'callback' => 'fetch_and_store_data',
  ));
});

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

আমরা যা পড়ছি তা পড়া উপভোগ করুন! আমি একসাথে একটি পৃষ্ঠা করা যেটি সাবস্ক্রাইব করার জন্য একটি লিঙ্ক সহ সাম্প্রতিকতম 10টি আইটেম নিয়ে আসে৷ সম্পূর্ণ ফিড.



Source link