ওয়েব অ্যাপ্লিকেশনে ব্যবহারকারীকে বার্তা প্রদর্শন করা হচ্ছে। PHP AJAX CRUD: CRUD অপারেশনের জন্য MySQL ডাটাবেস PHP স্ক্রিপ্টে রেকর্ড তৈরি, মুছে ফেলা, সম্পাদনা করা

ওভারভিউ

বিল্ট ইন নোটিফিকেশন সিস্টেম, সর্বপ্রথম জুমলায়, আপনার অ্যাপটিকে ব্যবহারকারীকে (বা ব্যবহারকারীদের গ্রুপ) বিভিন্ন ইভেন্ট সম্পর্কে অবগত রাখতে দেয়। বিজ্ঞপ্তিগুলিকে গুরুত্বপূর্ণ সতর্কতা হিসাবে মনে করুন যা ব্যবহারকারী এটি পড়তে এবং ট্র্যাক রাখতে আগ্রহী হবে৷
বিজ্ঞপ্তি সর্বত্র উত্পন্ন হতে পারে. আপনার কম্পোনেন্ট বা প্লাগইন এবং পরে JomSocial বিজ্ঞপ্তি সিস্টেমের ভিতরে প্রদর্শিত হয়।
এই টিউটোরিয়ালটি আপনাকে দেখাবে কিভাবে, কিন্তু যেহেতু আমরা ব্যবহার করতে পারি এমন কোনো তৃতীয় পক্ষের উপাদান সম্পর্কে আমাদের ধারণা নেই :) উদাহরণগুলি একটি কমিউনিটি প্লাগইনে করা হবে যা onAfterProfileUpdate ইভেন্টে ট্রিগার করা হবে
আপনি যদি এই ইভেন্টে ট্রিগার করা হবে এমন একটি প্লাগইন কীভাবে তৈরি করবেন তা না জানলে, আমরা আপনাকে এই নির্দেশিকাটি চেক করার পরামর্শ দিই

যাইহোক আপনার উপাদান এটি বাস্তবায়ন

এই টিউটোরিয়ালের ওভারভিউতে যেমন বলা হয়েছে, আমরা কমিউনিটি প্লাগইন ব্যবহার করে বিজ্ঞপ্তি তৈরি করব।
আপনি সম্ভবত আপনার উপাদান, বা আপনার প্লাগইন ভিতরে বিজ্ঞপ্তি তৈরি করতে চান. নিচের টিউটোরিয়ালটি এই যে কোন ক্ষেত্রে কাজ করবে। আপনার কোডের কোন বিন্দুতে বিজ্ঞপ্তি তৈরি করা হবে তা নির্ধারণ করতে হবে এবং শুধু JomSocial Core Libraries ফাইলটি লোড করতে হবে।

প্রয়োজন_একবার JPATH_ROOT। "/components/com_community/libraries/core.php" ;

নীচে ব্যাখ্যা করা টিউটোরিয়াল অনুসরণ করা আপনার এক্সটেনশনের জন্যও ঠিক কাজ করবে

উন্নয়ন পরিবেশ প্রস্তুত করা হচ্ছে

1. আমরা ধরে নেব যে আপনি ইতিমধ্যেই কমিউনিটি টাইপ উদাহরণ প্লাগইন তৈরি করেছেন যা ব্যবহারকারী তার প্রোফাইল পরিবর্তন করলে ট্রিগার হবে
যদি না হয়, আপনি থেকে খালি উদাহরণ প্লাগইন ডাউনলোড করতে পারেন, জুমলায় ইনস্টল করতে পারেন এবং প্লাগইনটি সক্ষম করতে পারেন। এর নামকরণ করা হয়েছে সম্প্রদায় - বিজ্ঞপ্তি উদাহরণ
2. আপনার ডাটাবেসে নেভিগেট করুন এবং এই দুটি টেবিল খালি করুন, যাতে তাদের কোনো রেকর্ড থাকে না

ক) উপসর্গ_সম্প্রদায়_বিজ্ঞপ্তি
খ) উপসর্গ_সম্প্রদায়_মেইলকিউ

3. আপনার পরীক্ষার সাইটগুলিতে কমপক্ষে দুই (2) ব্যবহারকারী রাখুন এবং তাদের আইডি জানেন

জুমলার পূর্ববর্তী সংস্করণগুলিতে, ব্যবহারকারী আইডি'গুলি সর্বদা নির্দিষ্ট নম্বর থেকে শুরু হয়েছে (62, 42) জুমলা 3-এ, এই সংখ্যাটি র্যান্ডম হবে, তাই, আমাদের পরীক্ষার পরিবেশের চিত্র কারণ এটি আপনার শেষে অবশ্যই আলাদা হবে।

প্রথম বিজ্ঞপ্তি

প্লাগইন পিএইচপি ফাইলটি খুলুন যা ROOT/plugins/community/example এ অবস্থিত হবে
onAfterProfileUpdate() ফাংশনের মধ্যে প্রতিস্থাপন করুন

CNotificationLibrary::add ( $cmd , $actor , $target , $subject , $body , $template , $params );

উদাহরণে দেখানো হয়েছে, নোটিফিকেশন অ্যাড এপিআই-এর 7 প্যারামিটার রয়েছে

  • $cmd - হল বিজ্ঞপ্তির ধরন। আপনি এই ফাইলে সব ধরনের বিজ্ঞপ্তি দেখতে পারেন। ROOT/components/com_community/libraries/notificationtypes.php থেকে শুরু করে, বা লাইন 53 এর কাছাকাছি। আমরা সিস্টেম_মেসেজিং নোটিফিকেশন টাইপ ব্যবহার করার পরামর্শ দিই।
  • $অভিনেতা - সেই ব্যক্তি যিনি ক্রিয়া সম্পাদন করেন
  • $target - হল সেই ব্যক্তি, বা লোকদের গোষ্ঠী যারা বিজ্ঞপ্তি পাবে
  • $subject - বিজ্ঞপ্তির বিষয়, উভয় ক্ষেত্রেই, বিজ্ঞপ্তি পপআপ উইন্ডো এবং ইমেল শিরোনাম
  • $body - ইমেল বিজ্ঞপ্তি বার্তার মূল অংশ
  • $টেমপ্লেট - ব্যবহার করার জন্য আপনার যদি নির্দিষ্ট টেমপ্লেটের প্রয়োজন হয়, আপনি এটি এখানে সংজ্ঞায়িত করতে পারেন। অন্যথায়, এই পরামিতি খালি হতে পারে
  • $params - কাস্টম সংজ্ঞায়িত পরামিতি
  • এই সব জেনে, চলুন আমরা ব্যবহার করব ভেরিয়েবল সংজ্ঞায়িত করা যাক
    আপনার প্লাগইন কোড পরিবর্তন করুন:

    $user = CFactory::getUser(); $cmd = "system_messaging" ; // প্রথম প্যারাম, কার্যকলাপের ধরন $actor = $user -> id ; //সেকেন্ড প্যারাম - $actor $target = "965" এর আইডি পান; // তৃতীয় পরাম। কারা বিজ্ঞপ্তি পাবেন? আমাদের ডেভ এনভায়রনমেন্টে, আইডি 965 সহ এর অ্যাডমিন ব্যবহারকারী। আপনার পরিবেশে, আপনি সম্ভবত আপনার অবজেক্ট বা ব্যবহারকারীদের অ্যারে থেকে আইডি পেতে চাইবেন। $subject = "বিজ্ঞপ্তি বিষয়" ; // উভয়ের বিষয়, ইমেল এবং পপআপ বিজ্ঞপ্তি $body = ; // ইমেইলে বডি মেসেজ। $টেমপ্লেট = "" ; // আপনি যদি নির্দিষ্ট jomsocial টেমপ্লেট ফাইল ব্যবহার করতে চান তবে আপনি এটি এখানে সংজ্ঞায়িত করতে পারেন। $params = নতুন CPparameter(""); // আমরা একটি অতিরিক্ত প্যারাম অবজেক্ট তৈরি করতে চাই, এবং এটিতে ডেটা বরাদ্দ করতে চাই, আনুষ্ঠানিকভাবে একটি ক্লাস CNotificationLibrary সংজ্ঞায়িত না করে:: যোগ করুন ( $cmd , $actor , $target , $subject , $body , $template , $params ) ;

    এখন যেকোনো ব্যবহারকারীর সাথে লগইন করুন এবং প্রোফাইল তথ্য পরিবর্তন করুন। চলুন ডাটাবেসে গিয়ে দেখি কি হয়েছে।
    prefix_community_notifications টেবিলে নেভিগেট করুন এবং নতুন রেকর্ড পর্যবেক্ষণ করুন

    prefix_community_mailq টেবিলে নেভিগেট করুন এবং নতুন রেকর্ড দেখুন

    অভিনন্দন! - আপনি সফলভাবে আপনার প্রথম নিজস্ব বিজ্ঞপ্তি তৈরি করেছেন যা ইমেল এবং অভ্যন্তরীণ JomSocial বিজ্ঞপ্তি সিস্টেমের মাধ্যমে পাঠানো হয়েছে


    সম্ভাব্য কোড ফোলা

    উপরের উদাহরণটি ঠিক আছে, এবং এটি কাজ করে, তবে সাধারণত এটির মতো এটি ব্যবহার করার পরামর্শ দেওয়া হয় না। পরিবর্তে, এটি এভাবে লেখা যেতে পারে

    $actor = CFactory::getUser(); $params = নতুন CPparameter(""); CNotificationLibrary:: add ( "system_messaging" , $actor -> "এটি নোটিফিকেশন বডি মেসেজ" , "" , $params );

    মূলত উপরে দেখানো কোডের মতো একেবারে একই জিনিস করার সময় এটি অনুসরণ করা অনেক পরিষ্কার এবং সহজ।

    কাস্টম বিজ্ঞপ্তি পরামিতি

    আপনি যোগ করতে চান এমন কোনো প্যারামের সাথে একটি বিজ্ঞপ্তি API প্রসারিত করা যেতে পারে।
    এই প্যারামগুলি হয় ইমেল টেমপ্লেট, বিজ্ঞপ্তি, এবং অবশ্যই, ভাষা ফাইলে পাস করা যেতে পারে।

    $actor = CFactory::getUser(); $link = "http://www.google.com" ; $params = নতুন CPparameter(""); $params -> সেট ("অভিনেতা" , $actor -> getDisplayName () ); // (অভিনেতা) ট্যাগ হিসাবে ব্যবহার করা যেতে পারে $params -> সেট ("actor_url" , "index.php?option=com_community&view=profile&userid=" . $actor -> id ); // (অভিনেতা) ট্যাগের জন্য লিঙ্ক $params -> সেট ("url" , $link ); // সমগ্র কার্যকলাপের url. নোটিফিকেশন উইন্ডোতে অবতারের উপর হোভার করার সময় ব্যবহার করা হয়। বহির্গামী ইমেলগুলিতেও (url) ট্যাগ হিসাবে ব্যবহার করা যেতে পারে। নিশ্চিত করুন যে আপনি $link ভেরিয়েবল সংজ্ঞায়িত করেছেন:) CNotificationLibrary:: add ( "system_messaging" , $actor -> id , "965" , "বিজ্ঞপ্তি বিষয়" , "এটি বিজ্ঞপ্তির মূল বার্তা" , "" , $params ) ;

    • $params = নতুন CPparameter( ); - আমরা একটি নতুন প্যারাম অবজেক্ট তৈরি করতে চাই, এবং এটিতে ডেটা বরাদ্দ করতে চাই, আনুষ্ঠানিকভাবে একটি ক্লাস সংজ্ঞায়িত না করে।
    • $params->সেট("অভিনেতা", $actor->getDisplayName()); - আপনার বিজ্ঞপ্তিতে সবসময় একজন অভিনেতা থাকা উচিত। এই প্যারামটি (অভিনেতা) ট্যাগ হিসাবে টেমপ্লেটে পাস করা যেতে পারে। বিজ্ঞপ্তি উইন্ডোতে, এটি একটি ক্রিয়া বহনকারী ব্যবহারকারীকে সংজ্ঞায়িত করে।
    • $params->set("actor_url", "index.php?option=com_community&view=profile&userid=" . $actor->id); - অভিনেতা URL সাধারণত একজন অভিনেতার url হয়। বিজ্ঞপ্তি পপআপে, এটি (অভিনেতা) উপাদানের লিঙ্ক যোগ করে
    • $params->সেট("url", $link); - এটি সবচেয়ে গুরুত্বপূর্ণ প্যারামিটার যা আপনাকে সর্বদা সঠিকভাবে সেট করতে হবে। বিজ্ঞপ্তি উইন্ডোতে, এই প্যারামটি অবতার চিত্রের উপরে ব্যবহার করা হয়। ইমেল বিজ্ঞপ্তিতে, এটি সেই অবস্থানের প্রতিধ্বনি করে যেখানে কার্যকলাপ ঘটেছে।

    এই উদাহরণের জন্য, আমরা ভেরিয়েবল $লিংক ল্যান্ডস-এ সেট করব www.google.comতাই আপনি দেখতে পারেন কিভাবে এটি কাজ করে

    ভাষা স্ট্রিং যোগ করা এবং প্যারাম ব্যবহার করুন

    আমরা এইমাত্র সেট করা প্যারামগুলি আমাদের ভাষার ফাইলগুলিতেও ব্যবহার করার জন্য উপলব্ধ।
    পরিবর্তন করে ভাষা কীগুলি সংজ্ঞায়িত করা যাক " CNotificationLibrary::add() API

    CNotificationLibrary::add("system_messaging" , $actor -> id , "965" , JText::sprintf("PLG_COMMUNITY_EXAMPLE_SUBJECT" ) , JText::sprintf("PLG_COMMUNITY_ODEXAMSPARA"),$";

    ভাষা ফাইল এই মত হওয়া উচিত

    PLG_COMMUNITY_EXAMPLE_SUBJECT = "(অভিনেতা) প্রোফাইল আপডেট করা হয়েছে" PLG_COMMUNITY_EXAMPLE_BODY = "হাই অ্যাডমিন \n এই মেইলটি আপনাকে জানানোর জন্য যে (অভিনেতা) প্রোফাইল আপডেট করা হয়েছে \n\n আপনি যদি Google-এ যেতে চান, এখানে ক্লিক করুন \n a href=" _QQ_" (url)"_QQ_">(url)"

    এই উদাহরণে, আমরা ট্যাগ (অভিনেতা) এবং (ইউআরএল) উভয়টি, বিজ্ঞপ্তি এবং ইমেল টেমপ্লেটে ডেটা পাস করতে ব্যবহার করেছি। দেখা যাক কেমন লাগে।
    অবতারের উপর হোভার করার সময় নোটিফিকেশন উইন্ডোতে, লক্ষ্য করুন (url) প্যারামটি কিক ইন করা হয়েছে এবং অবতারের উপরে গুগলের লিঙ্কটি যোগ করে। এটি ইচ্ছাকৃত, কারণ আমরা এটি সেভাবে তৈরি করেছি :)


    ]

    একই উইন্ডোতে, অভিনেতা লিঙ্কের উপর হোভার করার সময়। এটি সেই অংশ যেখানে (অভিনেতা) ব্যবহারকারীকে প্রতিধ্বনিত করেছে যেটি একটি ক্রিয়া বহন করে, যখন (অভিনেতা_ইউআরএল)" খেয়াল রাখা হয়েছে যে বস্তুটি সঠিকভাবে লিঙ্ক করা হয়েছে


    দেখা যাক ইমেইল সারিতে কি হয়


    এবং অবশেষে, প্রকৃত ইমেল যা শেষ ব্যবহারকারীকে পাঠানো হয়


    সফলতা
    এখন পর্যন্ত, আমরা তিনটি (3) প্যারামিটার তৈরি করেছি যা সফলভাবে বিজ্ঞপ্তি উইন্ডো এবং ইমেলগুলিতে ব্যবহৃত হয়।

  • (অভিনেতা) - ব্যবহারকারীর ব্যবহারকারীর নাম প্রদান করে যা ক্রিয়াটি বহন করে
  • (actor_url) - দেয় (অভিনেতাকে) বৈশিষ্ট্য
  • (url) - বাধ্যতামূলক নয়, তবে আপনার বিজ্ঞপ্তিতে সর্বদা এটি থাকা উচিত। এটি প্রধান url যেখানে আমরা যে ক্রিয়াটি ঘটেছে সে সম্পর্কে অবহিত করা হয়৷
  • একইভাবে, আপনি সংজ্ঞায়িত করতে পারেন "

    • (লক্ষ্য) - যদি আপনার প্রয়োজন হয়
    • (target_url) আপনার বিজ্ঞপ্তিতে এটির প্রয়োজন হলে।
    • (শিরোনাম) - সাধারণত একটি বস্তুর উল্লেখ করতে ব্যবহৃত হয় যা বিজ্ঞপ্তি তৈরি করে। উদাহরণ: "ব্যবহারকারী X অ্যালবাম Y এ নতুন ফটো পোস্ট করেছে।" অ্যালবাম Y এখানে শিরোনাম
    • (title_url) - পূর্ববর্তীগুলির মতো, একটি বস্তুর url যা বিজ্ঞপ্তি তৈরি করেছে৷
    • (বার্তা) - এই প্যারামটি JomSocial ইমেলের বডিতে বার্তা সেট করতে (এবং ইকো) ব্যবহার করা যেতে পারে।
    3.3K

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

    প্রায়শই, বার্তাগুলির সৃষ্টি এবং আউটপুট বিভিন্ন HTTP অনুরোধে আলাদা করা হয়। একটি নিয়ম হিসাবে, ফর্মগুলি প্রক্রিয়াকরণের পরে একটি পুনঃনির্দেশ ব্যবহার করা সুবিধাজনক (ব্যাক এবং রিফ্রেশ বোতামগুলির সাথে সমস্যা এড়াতে), তবে একই সময়ে, একটি বার্তা তৈরি করার স্বাভাবিক মুহূর্তটি ফর্মগুলি প্রক্রিয়াকরণ এবং তার সাথে ক্রিয়া সম্পাদন করার মুহূর্ত। এটা কেন? কল্পনা করুন যে বার্তার পাঠ্যটি এইরকম হওয়া উচিত: "আইটেম 'মাউস প্যাড'-এর জন্য অর্ডারকৃত ইউনিটের সংখ্যা সফলভাবে 7 থেকে 12 তে পরিবর্তিত হয়েছে।" একটি পুনঃনির্দেশের পরে, কার্যকারিতার পরিপ্রেক্ষিতে সম্ভবত একটি সম্পূর্ণ ভিন্ন পৃষ্ঠায়, এটি আগে কী করা হয়েছিল তা নির্ধারণ করা একটি অতিরিক্ত মাথাব্যথা হবে।

    প্রায়শই, POST অনুরোধে বার্তাগুলি প্রদর্শিত হয় যা ফর্মটি প্রক্রিয়া করে - এটি ভাল নয়, "এই পৃষ্ঠাটি পুরানো" শব্দগুলি জীবনকে ধ্বংস করে (যখন ব্যবহারকারী ব্যাক বোতামটি চেষ্টা করার সিদ্ধান্ত নেয়)।

    কেউ বন্ধুত্বপূর্ণ বার্তা ছেড়ে একটি পুনর্নির্দেশ ব্যবহার করে.

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

    সুতরাং, আমাদের একটি সমস্যা আছে - বার্তাটি অবশ্যই বিভিন্ন অনুরোধে "লাইভ" হবে৷ বার্তাটির পাঠ্যকে যে পৃষ্ঠায় প্রদর্শন করা উচিত সেখানে স্থানান্তর করার জন্য আমাদের একটি প্রক্রিয়া দরকার। আপনি সম্ভবত ইতিমধ্যে সেশন সম্পর্কে মনে আছে.

    হ্যাঁ, সাধারণভাবে আপনি সঠিক। অন্যান্য পদ্ধতি, যেমন একটি গ্লোবাল ভেরিয়েবলের মাধ্যমে, রিডাইরেক্ট ব্যবহার করা হলে ডেটা সেভ করার অনুমতি দেয় না (ম্যাক্সিম নাউমেনকোর নোট)। এছাড়াও, আমি সাধারণত নিশ্চিত করি যে অ্যাপ্লিকেশানের প্রতিটি স্ক্রীনে পূর্ববর্তী স্ক্রীনে তৈরি হওয়া বার্তাগুলি প্রদর্শন করার অন্যান্য তথ্য সহ ক্ষমতা রয়েছে৷ এটি সুবিধাজনক কারণ বার্তা প্রদর্শনের জন্য আলাদা স্ক্রীন প্রস্তুত করার প্রয়োজন নেই এবং ব্যবহারকারীকে আবার মাউস ক্লিক করতে হবে না। কিন্তু, সত্যিই, ডিজাইনারকে এখানে ভাবতে হবে - বার্তাগুলি প্রদর্শিত হবে এমন এলাকাটি হাইলাইট করতে।

    ধারণাটি খুব সহজ এবং কয়েকটি ক্লাসের সাথে বাস্তবায়ন করা যেতে পারে।

    প্রথম যে জিনিসটি মনে আসে তা হল একটি মেসেজ ক্লাস তৈরি করা, যা আসলে আমাদের সাধারণ ক্লাস ডায়াগ্রামে একটি বার্তা উপস্থাপন করবে। বার্তাটি সেশনে নিজেকে সংরক্ষণ করতে সক্ষম হতে হবে, সেইসাথে পর্দায় নিজেকে প্রদর্শন করতে হবে।

    ক্লাস মেসেজ ( /** * মেসেজ কন্টেন্ট। */ var $content; /** * মেসেজ টেক্সট শুরু করার জন্য কনস্ট্রাক্টর। * * @param কন্টেন্ট মেসেজ কনটেন্ট */ ফাংশন মেসেজ($ কনটেন্ট) ( $this->content = $ বিষয়বস্তু; ) /** * অধিবেশনে একটি বার্তা লিখুন। */ ফাংশন পাঠান() ( $_SESSION["session_messages"] = $this->সামগ্রী; ) /** * পৃষ্ঠায় একটি বার্তা আউটপুট করুন। */ ফাংশন toPage() ( echo " - ". $this->সামগ্রী।"
    "; } }

    সেশন অ্যাক্সেস করতে $_SESSION ভেরিয়েবল ব্যবহার করা হয়।

    নোট করুন যে $_SESSION হল একটি অ্যারে, আমরা এই অ্যারের শুধুমাত্র একটি উপাদান 'session_message' সূচকের সাথে ব্যবহার করছি।

    এই ক্ষেত্রে, আমরা একটি "অ্যারের অ্যারে" নিয়ে কাজ করছি - আমরা 'session_message' উপাদানে যা সঞ্চয় করি তা হল একটি অ্যারে, এটি হল প্রেরিত বার্তাগুলির তালিকা (অবশ্যই, তাদের মধ্যে বেশ কয়েকটি থাকতে পারে)।

    আপনি যদি থ্রেডটি খুঁজে না পান তবে সেশন এবং অ্যারেগুলিতে উত্সর্গীকৃত ম্যানুয়ালটির বিভাগগুলি ব্রাশ করার সময় এসেছে৷

    আপনার একটি প্রশ্ন থাকতে পারে। এখানে ক্লাস কেন প্রয়োজন? এটি দুটি ফাংশন সঙ্গে দ্বারা পেতে সম্ভব হবে. কিন্তু এর আরও তাকান. আমাদের বিভিন্ন ধরনের (তথ্য, ত্রুটি, সতর্কতা) সহ বার্তা তৈরি করতে এবং বার্তা প্রাপক নির্ধারণ করতে হতে পারে।

    অনুগ্রহ করে মনে রাখবেন যে এই মুহুর্তে এটি সেশনে রাখা বস্তুটি নয়, শুধুমাত্র বার্তা পাঠ্য। OOP আমাদের পরে send() পদ্ধতির আচরণ পরিবর্তন করতে দেয় যা এই পদ্ধতিটি অ্যাক্সেস করে এমন ক্লায়েন্ট কোড পরিবর্তন না করে (উদাহরণস্বরূপ, ভবিষ্যতে আমরা পুরো বার্তা অবজেক্টটি সেশনে লিখতে পারি যদি এটিতে অনেকগুলি ক্ষেত্র থাকে)।

    আসুন কল্পনা করি যে আমরা ফাংশন ব্যবহার করে এটি করব। আমাদের সম্ভবত একটি message_send($txt) ফাংশন এবং একটি message_to_page($txt) ফাংশন থাকবে। এখন আমাদের বিভিন্ন ধরণের বার্তাগুলির জন্য বিভিন্ন আচরণ করার ক্ষমতা যুক্ত করতে হবে। ফাংশন কল পরিবর্তন: message_send($txt, $kind), message_to_page($txt, $kind)। আপনাকে এই ধরনের ফাংশনগুলির সন্ধানে, সংশোধন করার জন্য সম্পূর্ণ অ্যাপ্লিকেশন কোডের মাধ্যমে চিরুনি দিতে হবে।

    একটি সহযোগী অ্যারে হিসাবে বার্তাটি উপস্থাপন করে পরিস্থিতিটি আগাম অনুমান করে এটি এড়ানো যেতে পারে: $msg['txt'], $msg['kind'], তারপর ফাংশন কলগুলিতে শুধুমাত্র একটি প্যারামিটার থাকবে। আপনি কি অনুভব করতে পারেন যে এটি কীভাবে একটি শ্রেণিতে পরিণত হওয়ার চেষ্টা করছে?

    সুতরাং, OOP আপনাকে সব কিছু আগে থেকে না ভেবে বিলাসিতা করার সুযোগ দেয়।

    পরবর্তী ক্লাস - ইনবক্স - শুধুমাত্র এই জন্য ডিজাইন করা হয়েছে.

    ক্লাস ইনবক্স ( /** * প্রাপ্ত বার্তাগুলির অ্যারে। */ var $messages = array(); /** * কনস্ট্রাক্টরে, আমরা সমস্ত প্রাপ্ত বার্তা পাই * এবং সেগুলি সেশন থেকে মুছে ফেলি। */ function Inbox() ( যদি (is_array($ _SESSION["session_messages"])) ( $messages = $_SESSION["session_messages"]; $co = sizeof($messages); এর জন্য ($i = 0; $i< $co; $i++) { $this->বার্তা = নতুন বার্তা($বার্তা[$i]); ) ) /* বার্তা অ্যারে সাফ করুন */ $_SESSION["session_messages"] = array(); ) /** * পেজে ইনবক্সের বিষয়বস্তু প্রদর্শন করুন। */ ফাংশন toPage() ( $co = sizeof($this->বার্তা); যদি ($co > 0) ( প্রতিধ্বনি "সিস্টেম থেকে বার্তা:
    "; ) এর জন্য ($i = 0; $i< $co; $i++) { $this->বার্তা[$i]->ToPage(); ) ))

    আমাদের মেসেজিং সিস্টেম ব্যবহার করে দেখুন.

    চলুন একটি খুব সাধারণ উদাহরণ তৈরি করা যাক যা বর্তমান মিনিটে সেকেন্ডের সংখ্যা রিপোর্ট করে একটি ফর্ম জমা দেওয়ার প্রতিক্রিয়া জানাবে।

    আমরা ক্লাসের ভিতরে অ্যারে এবং সেশন সহ সমস্ত কাজ লুকিয়ে রেখেছিলাম এবং চূড়ান্ত কোডটি সহজ এবং সুন্দর দেখায়।

    আপনার ওয়েব সার্ভারে একটি ডিরেক্টরি তৈরি করুন, তারপরে এই তিনটি ফাইল তৈরি করুন এবং স্ক্রিপ্টটি চেষ্টা করুন। অনুগ্রহ করে মনে রাখবেন যে ব্যাক এবং রিফ্রেশ বোতামগুলির সাথে কোন সমস্যা নেই।

    এখন কল্পনা করুন যে আপনি একটি জটিল পোর্টাল তৈরি করছেন, যেখানে, একটি নিয়ম হিসাবে, পৃষ্ঠাগুলিতে বেশ কয়েকটি ব্লক রয়েছে এবং প্রতিটিতে একটি পৃথক অ্যাপ্লিকেশন থাকতে পারে।

    এখানে আমরা দুটি অসুবিধার সম্মুখীন হই:

    * আমি পৃষ্ঠার একটি নির্দিষ্ট অংশে বার্তাগুলির তালিকা দেখতে চাই এবং আপনি ইতিমধ্যে এটির জন্য একটি ভাল জায়গা খুঁজে পেয়েছেন৷
    সমস্যা হল যে আপনাকে $inbox->toPage() কমান্ডটি ঠিক সেই মুহূর্তে চালাতে হবে যা পৃষ্ঠার বার্তাগুলির তালিকার অবস্থানের সাথে মিলে যায়। আমরা যদি এই তালিকার অবস্থান পরিবর্তন করতে চাই তবে আমাদের কোডে যেতে হবে, তবে এর জন্য ক্রমাগত পোর্টাল ফ্রেম পরিবর্তন করা ভাল নয়। সর্বোত্তম সমাধান একটি পৃথক মডিউল আকারে বার্তা আউটপুট করা হবে, যা আমরা শুধুমাত্র জানি যে এটি কাঠামোর সাথে সংযুক্ত করা প্রয়োজন।
    অর্থাৎ, মডিউল চালু করার কঠোর ক্রম থেকে নিজেকে মুক্ত করুন। প্রকৃতপক্ষে, যেহেতু ইনবক্স আউটপুটের ফলাফল সিস্টেমের অপারেশনের উপর নির্ভর করে না (এই ধাপে আমাদের কাছে ইতিমধ্যেই সেশনের সমস্ত ডেটা রয়েছে), তাহলে অতিরিক্ত জটিলতা কেন?
    * বার্তা তালিকার উপস্থিতি (ডিজাইন) বজায় রাখতে, আপনাকে এইচটিএমএল কোডের যত্ন নিতে হবে, যা মেসেজ এবং ইনবক্স ক্লাসের toPage() পদ্ধতিতে হার্ডকোড করা হয়। সাধারণত, ডিজাইন পরিবর্তন করার জন্য আপনাকে পিএইচপি কোড পরিবর্তন করতে হবে।

    প্রথম সমস্যাটি সমাধান করার চেষ্টা করতে, আপনি একটি বাফার তৈরি করতে পারেন যা ইনবক্স আউটপুটের ফলাফল সংরক্ষণ করে।

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

    একটি সমাধানের এই প্রচেষ্টা ইতিমধ্যেই মধ্যবর্তী ডেটা সংরক্ষণের একটি উপায় হিসাবে XML ব্যবহার করার ধারণা দেয়। এবং XSLT শৈলী ব্যবহার দ্বিতীয় সমস্যা সমাধান করতে সাহায্য করবে।

    আমি XML কি এবং XSLT কি তা নিয়ে আলোচনা করব না। আপনি যদি এই জিনিসগুলির সাথে পরিচিত না হন তবে zvon.org খোঁজা শুরু করার জন্য একটি ভাল জায়গা।

    ধারণাটি হল HTML কোড নয়, toPage() পদ্ধতিতে একটি XML কাঠামো তৈরি করা। পৃষ্ঠা নথিটি XML কোড সহ একটি স্ট্রিং হিসাবে তৈরি করা হবে (এটি একটি "বাফার" হিসাবে কাজ করবে), এবং স্ক্রিপ্টের শেষ পর্যায়ে আমরা একটি XSL রূপান্তর ব্যবহার করব।

    প্রথমে, আসুন কল্পনা করি কোডের মূল অংশের ফলাফল কী হওয়া উচিত।

    মিনিট 57 সেকেন্ড: 45

    এটি কী তা অনুমান করা বেশ সহজ - দুটি বার্তা এবং একটি ফর্ম। অনুগ্রহ করে মনে রাখবেন যে পিএইচপি স্ক্রিপ্ট শুধুমাত্র এই ধরনের একটি স্ট্রিং প্রস্তুত করতে হবে - এটা খুব সহজ. তদুপরি, প্রধান ট্যাগগুলির ক্রম গুরুত্বপূর্ণ নয় - আপনি সেগুলি শুরুতে রাখতে পারেন, উদাহরণস্বরূপ, প্রোগ্রামারের জন্য সুবিধাজনক হবে। কিভাবে এটি বাস্তবায়ন করা যায়। আপনি কিছু পরিবর্তন না করে আউটপুট বাফারিং ব্যবহার করতে পারেন, HTML কোডের পরিবর্তে XML আউটপুট করতে পারেন এবং শেষে আউটপুটটিকে একটি স্ট্রিং-এ ক্যাপচার করতে পারেন। কিন্তু তারপরে আমরা নমনীয়তা হারাবো - উদাহরণস্বরূপ, কখনও কখনও আপনি ডিবাগিং তথ্য সরাসরি পৃষ্ঠায় আউটপুট করতে চান (ইকো ব্যবহার করে)। একই সময়ে, PHP বিকাশকারীরা একটি DOM মডিউলে কাজ করছে যা ট্রি নথি তৈরি এবং পাস করার আরও উন্নত উপায় সরবরাহ করে। আমরা যদি DOM বাস্তবায়ন করতে চাই, তাহলে আমাদের সম্পূর্ণ অ্যাপ্লিকেশনটিকে পুনরায় ডিজাইন করতে হবে, স্ট্রিংগুলির আউটপুটকে DOM উপাদান তৈরিতে পরিবর্তন করতে হবে। অতএব, আমি ক্রমানুসারে একটি সাধারণ XML নথি একত্রিত করে বস্তুর মধ্যে বস্তুর XML উপস্থাপনা সংরক্ষণ করতে পছন্দ করি। এটা তেমন কঠিন কিছু নয়, শুধু একটু পরিবর্তন দরকার। আপনি দেখতে পাবেন যে এই কৌশলটি XML ডেটা সঞ্চয় করার একটি নির্দিষ্ট উপায়ের সাথে কঠোরভাবে আবদ্ধ নয়, এবং এটি আপনাকে সামান্য প্রচেষ্টার সাথে DOM ব্যবহার করার জন্য রূপান্তর করার অনুমতি দেবে। প্রথমত, লক্ষ্য করুন যে আমাদের প্রতিটি বস্তুর একটি toPage() পদ্ধতি রয়েছে। এই মিলটি আমাদের একটি নতুন সাধারণ অভিভাবক শ্রেণী প্রবর্তন সম্পর্কে চিন্তা করা উচিত। প্রতিটি ক্লাস যেটি একটি পৃষ্ঠার জন্য একটি XML নথির টুকরো তৈরি করতে পারে এমন একটি ক্লাস থেকে উত্তরাধিকারী হতে দিন যা অবজেক্টের XML প্রতিনিধিত্বের যত্ন নেবে। এর আউটপুটেবল কল করা যাক.

    ক্লাস আউটপুটেবল ( /** * XML কন্টেইনার (স্ট্রিং)। */ var $output = ""; /** * কন্টেইনারের বিষয়বস্তু দিন এবং কন্টেইনার সাফ করুন। () ( $out = $this->আউটপুট; $this->output = ""; $out ফেরত; ) /** * কন্টেইনারের বিষয়বস্তুতে একটি অংশ যোগ করুন। * * @param স্ট্রিং যোগ করতে স্ট্রিং করুন * / function appendOutput($string) ( $this ->output .= $string . "n"; ) /** * "Abstract" পদ্ধতি। */ function toPage() ( ) )

    toPage() পদ্ধতিটি খালি করা হয়েছে - এই ক্ষেত্রে বহিরাগত "matryoshka" ক্লাসগুলি ভিতরের শ্রেণীর সাথে কীভাবে যোগাযোগ করবে তার একটি সূচক হিসাবে এটি প্রয়োজন৷ যাইহোক, আমরা এখানে একটি ডিফল্ট বাস্তবায়ন অফার করতে পারি যদি আমরা লক্ষ্য করি যে অনেকগুলি বস্তু রয়েছে যা একইভাবে পৃষ্ঠায় নিজেদের প্রদর্শন করে।

    বার্তা এবং ইনবক্স ক্লাসগুলি সামান্য পরিবর্তিত হবে - তাদের উভয়ই এখন আউটপুটেবল থেকে উত্তরাধিকারী হওয়া উচিত এবং toPage() পদ্ধতিগুলিও পরিবর্তিত হবে
    Message.php

    ক্লাস মেসেজ আউটপুটেবল প্রসারিত করে ( /** * মেসেজ কন্টেন্ট। */ var $content; /** * মেসেজ টেক্সট শুরু করার জন্য কনস্ট্রাক্টর। * * @param কন্টেন্ট মেসেজ কনটেন্ট */ ফাংশন মেসেজ($ কনটেন্ট) ( $this->content = $content; ) /** * সেশনে একটি বার্তা লিখুন। */ function send() ( $_SESSION["session_messages"] = $this->content; ) /** * পেজে একটি বার্তা আউটপুট করুন। * / ফাংশন toPage() ( $this->appendOutput("।"$this->content।""); ))

    ক্লাস ইনবক্স আউটপুটেবল প্রসারিত করে ( /** * প্রাপ্ত বার্তাগুলির অ্যারে। */ var $messages = array(); /** * কনস্ট্রাক্টরে, আমরা সমস্ত প্রাপ্ত বার্তা পাই * এবং সেগুলিকে সেশন থেকে সরিয়ে দিই। */ function Inbox( ) ( যদি (is_array ($_SESSION["session_messages"])) ( $messages = $_SESSION["session_messages"]; $co = sizeof($messages); এর জন্য ($i = 0; $i< $co; $i++) { $this->বার্তা = নতুন বার্তা($বার্তা[$i]); ) ) /* বার্তা অ্যারে সাফ করুন */ $_SESSION["session_messages"] = array(); ) /** * পেজে ইনবক্সের বিষয়বস্তু প্রদর্শন করুন। */ ফাংশন toPage() ( $co = sizeof($this->messages); $this->appendOutput(""); এর জন্য ($i = 0; $i< $co; $i++) { $this->বার্তা[$i]->toPage(); $this->appendOutput($this->messages[$i]->getOutput()); ) $this->appendOutput(""); ))

    আউটপুট পদ্ধতি পরিবর্তিত হয়েছে - এখন, সরাসরি পৃষ্ঠায় আউটপুট করার পরিবর্তে, বাহ্যিক উপস্থাপনাটি আউটপুটেবলে সংরক্ষিত সময়ের জন্য, যা প্রতিটি বস্তুতে "বসে"। appendOutput() পদ্ধতিটি echo() গঠনের প্রতিস্থাপন হিসাবে কাজ করে। একটি বস্তুর আউটপুট পেতে, getOutput() পদ্ধতি ব্যবহার করা হয়।

    এখন দেখা যাক কোডের ক্লায়েন্ট অংশ কি, যা আগের মতই সমস্যার সমাধান করবে।
    index.php

    মূল উদ্ভাবন হল $global_content অবজেক্টে, যার নাম নিজেই কথা বলে৷ এই ক্ষেত্রে, এটি আউটপুটেবল ক্লাসের অন্তর্গত; বাস্তব জীবনের কাজগুলিতে, আপনি সম্ভবত পৃষ্ঠার বিষয়বস্তুর জন্য একটি পৃথক ক্লাস তৈরি করবেন।

    আপনি যদি ঘনিষ্ঠভাবে দেখেন, স্ক্রিপ্টের বিষয়বস্তু কার্যত পরিবর্তিত হয়নি - একই ইনবক্স, একই toPage()। পৃষ্ঠার বিষয়বস্তুতে বার্তা তালিকার বিষয়বস্তু প্রদর্শন করে এমন একটি নির্দেশনা যোগ করা হয়েছে। বৈচিত্র্যের জন্য, দুটি বার্তা এখন উৎপন্ন হয়।

    ফলাফল দেখার জন্য, যা বাকি থাকে তা হল XSL টেমপ্লেট প্রস্তুত করা।
    style.xsl

    XSLT উদাহরণ

    বার্তা

    আমরা কি অর্জন করেছি?

    প্রথমত, আপনি জটিল প্রকল্পগুলি আরও আত্মবিশ্বাসের সাথে নিতে পারেন - মডিউলগুলির প্রকৃত স্বাধীনতা নিশ্চিত করা হয়। পৃষ্ঠায় ফলাফলগুলি যে ক্রমানুসারে স্থাপন করা হয় তা এখন একটি বহিরাগত XSL টেমপ্লেট ব্যবহার করে নিয়ন্ত্রিত হয় এবং মডিউলগুলি যে ক্রমানুসারে চালিত হয় তার উপর নির্ভর করে না।

    যে কোনও মডিউল যা তার কাজের ফলে XML ডেটা তৈরি করে একটি প্রকল্পে ব্যবহার করা যেতে পারে। যাইহোক, এটি টেমপ্লেট ইঞ্জিনগুলির মধ্যে একটি সুবিধা, যেখানে ডেটা তৈরিতে একটি নির্দিষ্ট ইঞ্জিনের কলিং পদ্ধতির (অর্পণ করা ইত্যাদি) একটি ক্রম থাকে, যার জন্য কোনও সাধারণ মান নেই।

    আরেকটি সুবিধা হল ডিবাগিং সহজ। আপনি যদি স্ক্রিপ্ট চালান, আপনি লক্ষ্য করবেন যে প্রতিটি পৃষ্ঠায় ডিবাগ আউটপুট রয়েছে - একটি XML প্রোটোটাইপ যা ডিবাগিং অ্যাপ্লিকেশনগুলিকে ব্যাপকভাবে সরল করে।

    বার্তা অবজেক্টগুলি কীভাবে তৈরি করা যায় সে সম্পর্কে আপনাকে আরও কিছু ভাবতে হবে। ক্লায়েন্ট কোডে সরাসরি নতুন ব্যবহার করা সবসময় সুবিধাজনক নয়। তবে সম্ভবত এটি একটি পৃথক নিবন্ধের জন্য একটি বিষয়।

    অবশেষে, সম্ভাবনা সম্পর্কে একটি গলপ:

    * গুরুত্বপূর্ণ বার্তাগুলির তালিকার জন্য পপ-আপ উইন্ডোজ
    * বার্তাগুলিতে "প্রেরক পৃষ্ঠাগুলি" এবং "গন্তব্য পৃষ্ঠাগুলি"
    * ডাটাবেসে লগিং বার্তা
    * বোতাম "আমার কর্মের ইতিহাস দেখান"
    * সেশনের মধ্যে ব্যবহারকারীর কর্মের পরিসংখ্যানগত বিশ্লেষণ
    * ওয়েব অ্যাপ্লিকেশনে "বুদ্ধিমান সহকারী"

    KP এবং BUS-এ, সংস্করণ 11.5 থেকে শুরু করে, একটি সামাজিক নেটওয়ার্ক অন্তর্ভুক্ত সংস্করণগুলিতে, একটি নতুন মডিউল "ওয়েব মেসেঞ্জার" উপস্থিত হয়েছে৷
    সবার কাছে প্রকাশ করার আগে, মডিউলটি আমাদের "সোশ্যাল ইন্ট্রানেট"-এ আগুনের বাপ্তিস্ম নিয়েছিল, 8টির মতো আপডেট সংগ্রহ করেছে


    উন্নয়নের ছয় মাসে আমরা অনেক কিছু করেছি

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

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

    আমরা বিভিন্ন ধরণের বার্তা সহ একটি বিজ্ঞপ্তি কেন্দ্র তৈরি করেছি, তাদের প্রাপ্তির ইতিহাস দেখার ক্ষমতা প্রদান করেছি এবং বিকাশকারীদের জন্য বিজ্ঞপ্তিগুলি যোগ এবং প্রত্যাহার করার জন্য একটি সাধারণ API।

    এবং এই সব আপনার সাইটের প্রতিটি পৃষ্ঠায় উপলব্ধ!

    দুর্ভাগ্যবশত, পরিকল্পিত সবকিছু বাস্তবায়িত হয়নি

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

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

    তৃতীয়, আমরা ইন্টারফেসটি সামান্য পরিবর্তন করার, পৃথক যোগাযোগের তালিকা এবং ডায়ালগ উইন্ডোটি পরিত্যাগ করার এবং সেগুলিকে একটি একক সম্পূর্ণরূপে একত্রিত করার পরিকল্পনা করছি, যা ভবিষ্যতে আমাদের মেসেঞ্জারটিকে একটি মোবাইল অ্যাপ্লিকেশনে স্থানান্তর করার অনুমতি দেবে৷

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

    বিজ্ঞপ্তিগুলির সাথে কাজ করা (আইএম এর জন্য প্রাসঙ্গিক সংস্করণ 11.5.2 থেকে শুরু হয়)

    আমরা তিন ধরনের বিজ্ঞপ্তি বাস্তবায়ন করেছি:
    - ব্যক্তিগতকৃত বিজ্ঞপ্তি;
    - সিস্টেম থেকে বিজ্ঞপ্তি;
    - বিজ্ঞপ্তি নিশ্চিতকরণ প্রয়োজন;

    API ব্যবহার করার আগে, আপনাকে মডিউলটি সিস্টেমে ইনস্টল করা আছে কিনা তা পরীক্ষা করতে হবে:

    যদি (IsModuleInstalled("im") && CMmodule::IncludeModule("im")) ( ) ?>

    ব্যক্তিগতকৃত বিজ্ঞপ্তি


    যদি বার্তাগুলি NOTIFY_TAG এ সেট করা থাকে, তাহলে ব্যবহারকারী সেগুলিকে গোষ্ঠীবদ্ধ করবে৷

    সিস্টেম থেকে বিজ্ঞপ্তি


    $arMessageFields = array(// প্রাপক "TO_USER_ID" => $USER->GetId(), // প্রেরক (>0 হতে পারে) "FROM_USER_ID" => 0, // বিজ্ঞপ্তি প্রকার "NOTIFY_TYPE" => IM_NOTIFY_SYSTEM, // মডিউল যেটি একটি বিজ্ঞপ্তি পাঠানোর অনুরোধ করেছে "NOTIFY_MODULE" => "im", // গ্রুপিংয়ের জন্য প্রতীকী ট্যাগ (শুধুমাত্র একটি বার্তা প্রদর্শিত হবে), যদি এটির প্রয়োজন না হয়, তাহলে প্যারামিটারটি "NOTIFY_TAG" => "IM_CONFIG_NOTICE" সেট করবেন না, // সাইটে বিজ্ঞপ্তি পাঠ্য (html এবং BB কোড উপলব্ধ) "NOTIFY_MESSAGE" => "[b]মনোযোগ: আপনাকে অবশ্যই "তাত্ক্ষণিক বার্তা এবং বিজ্ঞপ্তি" মডিউলের সেটিংসে সামাজিক নেটওয়ার্কের সঠিক পথটি পরীক্ষা করতে হবে এবং নির্দিষ্ট করতে হবে" , // বিজ্ঞপ্তি পাঠ্য ইমেলের মাধ্যমে পাঠানো হবে (বা XMPP ), যদি কোন পার্থক্য না থাকে তবে প্যারামিটার সেট করবেন না //"NOTIFY_MESSAGE_OUT" => ""); CIMNotify::Add($arMessageFields); ?>

    বিজ্ঞপ্তি নিশ্চিতকরণ প্রয়োজন (নিশ্চিত)


    $arMessageFields = array(// প্রাপক "TO_USER_ID" => $USER->GetId(), // প্রেরক "FROM_USER_ID" => 2, // বিজ্ঞপ্তি প্রকার "NOTIFY_TYPE" => IM_NOTIFY_CONFIRM, // মডিউল যা বিজ্ঞপ্তি পাঠানোর অনুরোধ করেছে "NOTIFY_MODULE" => "ক্যালেন্ডার", // গ্রুপিংয়ের জন্য প্রতীকী ট্যাগ (শুধুমাত্র একটি বার্তা প্রদর্শিত হবে), যদি এটির প্রয়োজন না হয়, তাহলে প্যারামিটার সেট করবেন না "NOTIFY_TAG" => "CALENDAR|INVITE|123|".$ USER->GetId() , // সাইটে বিজ্ঞপ্তি পাঠ্য (html এবং BB কোড উপলব্ধ) "NOTIFY_MESSAGE" => "আমি আপনাকে "তাত্ক্ষণিক বার্তা এবং বিজ্ঞপ্তি" মিটিংয়ে অংশ নিতে আমন্ত্রণ জানাচ্ছি যা 15 মার্চ অনুষ্ঠিত হবে, 2012 at 14:00", // ইমেলের মাধ্যমে পাঠানোর জন্য বিজ্ঞপ্তি পাঠ্য (বা XMPP), যদি কোনও পার্থক্য না থাকে তবে প্যারামিটার সেট করবেন না “NOTIFY_MESSAGE_OUT” => “ব্যবহারকারী ইভজেনি শেলেনকভ আপনাকে মিটিংয়ে অংশ নিতে আমন্ত্রণ জানিয়েছেন “তাত্ক্ষণিক বার্তা এবং বিজ্ঞপ্তি" #BR# যা 03/15/2012 তারিখে 14:00 এ অনুষ্ঠিত হবে।#BR # #BR# স্বীকার করুন: http://test.ru/calend.php?CONFIRM=Y&CID=123 #BR# প্রত্যাখ্যান করুন: http://test.ru/calend.php?CONFIRM=N&CID=123", // বিজ্ঞপ্তি বোতাম "NOTIFY_BUTTONS" => অ্যারে(// 1. বোতামের নাম, 2. মান, 3. বোতাম টেমপ্লেটের বর্ণনাকারী অ্যারে , 4. (ঐচ্ছিক প্যারামিটার) অ্যারে("TITLE" => "স্বীকার করুন", "VALUE" => "Y", "TYPE" => "স্বীকার করুন" /*, "URL" => " চাপার পরে ঠিকানায় স্থানান্তর করুন http://test.ru/?confirm=Y" */), Array("TITLE" => " প্রত্যাখ্যান", "VALUE" => "N", "TYPE" => "বাতিল" /*, "URL " => "http://test.ru/?confirm=N" */),), // চিঠি পাঠানোর টেমপ্লেটের সাংকেতিক কোড, যদি নির্দিষ্ট করা না থাকে, তাহলে এটি বিজ্ঞপ্তি টেমপ্লেট "NOTIFY_EMAIL_TEMPLATE" => "সহ পাঠানো হয় CALENDAR_INVITATION"); CIMNotify::Add($arMessageFields); ?>

    এই ধরনের বিজ্ঞপ্তির সাথে কাজ করার জন্য, কেবল একটি বার্তা পাঠানোই যথেষ্ট নয়; আপনাকে এটি পরিবেশন করতে হবে।

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

    দ্বিতীয় বিকল্পটি ইভেন্টে।
    1. আপনাকে নির্ভরতা নিবন্ধন করতে হবে

    আপনার ফাংশন ভিতরে ভুলবেন না অনুরোধ নিশ্চিতকরণএবং রিজেক্ট রিকোয়েস্টবিজ্ঞপ্তি মুছে ফেলার কারণ CIMNotify::DeleteByTag()

    এখনকার জন্য এটাই, আমি মন্তব্যে আপনার পরামর্শের জন্য অপেক্ষা করছি, সফল বাস্তবায়ন!
    আপনি যদি পরামিতি সহ একটি অ্যারেতে 11.5.2 প্রকাশের আগে API চেষ্টা করতে চান তবে আপনাকে অবশ্যই "MESSAGE_TYPE" => IM_MESSAGE_SYSTEM নির্দিষ্ট করতে হবে, এছাড়াও বোতামগুলিতে একটি লিঙ্ক সহ বিকল্পটি নিশ্চিত বিজ্ঞপ্তিগুলির জন্য কাজ করবে না৷ তবে অপেক্ষা করা ভালো; 11.5.2 আপডেট 23 মে শেষ হবে।

    প্রলাপ ট্রেমেন্সের চেয়ে খারাপ স্ট্রিক ভাল ...

    PHP AJAX CRUD: MySQL ডাটাবেসে রেকর্ড তৈরি করা, মুছে ফেলা, সম্পাদনা করা

    এই নিবন্ধে, আমরা শিখব কিভাবে পিএইচপি ব্যবহার করে একটি MySQL ডাটাবেসে রেকর্ড যোগ, সম্পাদনা এবং মুছে ফেলা যায়। আমরা একটি JQuery হ্যান্ডলার ব্যবহার করেছি যা একটি সার্ভার-সাইড স্ক্রিপ্টে একটি AJAX অনুরোধ পাঠায়। হ্যান্ডলার রেকর্ডের তালিকা আপডেট করে।

    তৈরি, মুছে ফেলা, সম্পাদনার জন্য অনুরোধ পাঠানোর জন্য AJAX ফর্ম

    একটি রেকর্ড যোগ করার সময়, ফর্মটি একটি AJAX অনুরোধের মাধ্যমে PHP স্ক্রিপ্টে ডেটা পাঠায়। সংযোজন সফল হলে, এন্ট্রিগুলির তালিকা পুনরায় লোড করা হয়।

    CRUD ডাটাবেস প্রশ্নের জন্য JQuery AJAX ফাংশন

    JQuery AJAX ফাংশনে আমরা স্যুইচ কেস এড এডিট এবং ডিলিট করেছি। এই ক্ষেত্রে ডাটাবেস কর্মের উপর নির্ভর করে বিভিন্ন প্রশ্ন এবং প্রতিক্রিয়া ডেটা স্ট্রিং তৈরি করে।

    ফাংশন showEditBox(id) ( $("#frmAdd").hide(); var currentMessage = $("#message_" + id + ".message-content").html(); var editMarkUp = ""+currentMessage+" SaveCancel"; $("#message_" + id + " .message-content").html(editMarkUp); ) ফাংশন বাতিল সম্পাদনা(বার্তা,আইডি) ( $("#message_" + id + ".message-content") .html(বার্তা); $("#frmAdd").show(); ) ফাংশন callCrudAction(action,id) ( $("#loaderIcon").show(); var queryString; switch(action) ( case "add ": queryString = "action="+action+"&txtmessage="+ $("#txtmessage").val(); break; case "edit": queryString = "action="+action+"&message_id="+ id + " &txtmessage="+ $("#txtmessage_"+id).val(); break; case "delete": queryString = "action="+action+"&message_id="+ id; break; ) jQuery.ajax(( url: "crud_action.php", data:queryString, টাইপ: "POST", success:function(data)( switch(action) ( case "add": $("#comment-list-box").append(data); বিরতি; কেস "সম্পাদনা": $("#বার্তা_" + আইডি + ".বার্তা-সামগ্রী").html(ডেটা); $("#frmAdd").show(); বিরতি case "delete": $("#message_"+id).fadeOut(); বিরতি ) $("#txtmessage").val(""); $("#লোডার আইকন").লুকান(); ), ত্রুটি: ফাংশন ()() ); )

    CRUD অপারেশনের জন্য পিএইচপি স্ক্রিপ্ট

    নিম্নলিখিত কোড ডাটাবেসের বিরুদ্ধে প্রশ্নগুলি সম্পাদন করে। এই PHP স্ক্রিপ্ট, একটি CRUD ক্রিয়া সম্পাদন করার পরে, AJAX প্রতিক্রিয়ার ফলে রেকর্ডগুলি আপডেট করে৷

    need_one("dbcontroller.php"); $db_handle = নতুন DBCcontroller(); $action = $_POST["অ্যাকশন"]; if(!empty($action)) ( switch($action) ( case "add": $result = mysql_query("কমেন্ট ঢোকান(বার্তা) VALUES("".$_POST["txtmessage"].")") ; if($result)($insert_id = mysql_insert_id(); echo " Edit Delete" . $_POST["txtmessage"] . " "; ) বিরতি; কেস "সম্পাদনা": $result = mysql_query("আপডেট মন্তব্য সেট বার্তা = "".$_POST["txtmessage"]।"" WHERE id=".$_POST["message_id"]); if($result) echo $_POST["txtmessage"]; বিরতি; কেস "মুছুন": যদি ( !খালি($_POST["message_id"])) ( mysql_query("মন্তব্য থেকে মুছুন যেখানে id=".$_POST["message_id"]); ) বিরতি; ) )

    এই কোর্সের এই মুহুর্তে, আমাদের প্লাগইনের ভিত্তি স্থাপন করা হয়েছে, একটি কাস্টম হুক সংজ্ঞায়িত করা হয়েছে, এবং হুক কীভাবে কাজ করে তা দেখানোর জন্য একটি অবিরাম বার্তা সংযুক্ত করা হয়েছে।

    আমরা যে নাকরেছে, তারা ব্যবহারকারীর প্রবেশ করা ডেটা অনুযায়ী বার্তার ধরন এবং তাদের প্রদর্শন বাস্তবায়ন করেনি।

    কিন্তু আমরা শুরু করার আগে, আমাদের বিভিন্ন ধরনের বার্তার জন্য সমর্থন যোগ করতে হবে, একটি ক্লাস ইন্টারফেস যা প্রতিটি বার্তার ধরণকে সমর্থন করবে এবং এই ধরনের বার্তাগুলি সংরক্ষণ করার জন্য প্রয়োজনীয় ডেটা কাঠামো।

    শুরু করতে প্রস্তুত?

    আমি টিউটোরিয়ালটি চালিয়ে যাওয়ার অপেক্ষায় রয়েছি, তবে সোর্স কোডে প্রথমে ডাইভ করার আগে আমাদের কয়েকটি বিষয় বিবেচনা করতে হবে। আপনার সিস্টেমে নিম্নলিখিত সফ্টওয়্যার ইনস্টল করা আছে তা নিশ্চিত করুন:

    • পিএইচপি 5.6.25 এবং মাইএসকিউএল 5.6.28
    • Apache বা Nginx
    • ওয়ার্ডপ্রেস 4.6.1
    • আপনার পছন্দের IDE বা সম্পাদক

    এবং যদি আপনি একটি অল-ইন-ওয়ান সমাধান খুঁজছেন, MAMP চেষ্টা করতে ভুলবেন না।

    আমরা অগ্রসর হয়েছে

    আগেই বলা হয়েছে, আমরা এই কোর্সের ঠিক মাঝখানে আছি। আপনি যদি প্রথম পাঠের কোনোটি মিস করেন, তাহলে আমরা এখন পর্যন্ত যা কভার করেছি তা এখানে:

  • প্রথম টিউটোরিয়ালে, আমরা আমাদের প্লাগইন তৈরি করার জন্য ন্যূনতম মৌলিক বিষয় এবং শুরু করার জন্য আপনাকে কী করতে হবে তার উপর ফোকাস করেছি।
  • দ্বিতীয় অংশে, আমরা ওয়ার্ডপ্রেসের মৌলিক প্রশাসনিক পৃষ্ঠায় একটু যোগ করে প্লাগইনটির সাথে আরও এগিয়েছি। আমরা একটি কাস্টম হুকও বরাদ্দ করি যা আমরা ব্যবহার করি এবং এটি সার্ভারের দিকে চালাই। আমরা আমাদের সেটিংস মেসেঞ্জারের জন্য মৌলিক পরামিতিগুলিও সেট করি।
  • এবং প্রশিক্ষণের চূড়ান্ত পর্যায়ে আমরা এটি বিবেচনা করব:

  • আমরা এটিকে একসাথে আবদ্ধ করব, এটিকে কার্যকরভাবে দেখব এবং প্লাগইনটিকে সর্বজনীনভাবে ডাউনলোডের জন্য উপলব্ধ করব৷
  • বর্তমানে আমাদের অন্যান্য কাজ আছে, এবং আমরা সেগুলিতে ফোকাস করব।

    আসুন কাজে ফিরে যাই

    যেহেতু আমরা কাজ শুরু করেছি (এবং আগের পাঠে যেমন বলা হয়েছে), আমরা এই অংশে কাজগুলি আরও বাস্তবায়নের জন্য প্রতিশ্রুতিবদ্ধ:

    এই টিউটোরিয়ালে আমরা সাফল্য এবং ব্যর্থতার বার্তাগুলির জন্য সমর্থন যোগ করে, সেইসাথে নিরাপত্তা সংক্রান্ত বিষয়গুলি স্পর্শ করে আমাদের সেটিংস মেসেঞ্জার বিকাশ করা চালিয়ে যাব।

    পূর্ববর্তী নিবন্ধে, আমরা সেটিংস মেসেঞ্জারে শুরু করেছি, তবে শুধুমাত্র একটি বৈশিষ্ট্য সেট আপ করার পর্যায়ে যা ব্যবহারকারীর পৃষ্ঠাটি লোড হওয়ার সময় ক্রমাগত সাফল্যের বিজ্ঞপ্তি প্রদর্শন করবে।

    এই টিউটোরিয়ালে আমরা ত্রুটি, সতর্কতা এবং সাফল্যের বার্তাগুলির জন্য সমর্থন যোগ করব। তারপর মেসেঞ্জার কিভাবে কাজ করবে সে সম্পর্কে ধারণা পেতে আমরা সেগুলো স্ক্রিনে প্রদর্শন করব।

    উপরন্তু, আমরা আরও একটি পরিবর্তন করতে যাচ্ছি যা ব্যবহারকারীর বিবেচনার ভিত্তিতে বিজ্ঞপ্তি খারিজ করার জন্য সমর্থন যোগ করবে।

    এটি এই পাঠের জন্য প্রয়োজনীয় কাজের সম্পূর্ণ পরিকল্পনা। চল শুরু করি.

    সেটিংস মেসেঞ্জার এক্সটেনশন

    মনে রাখবেন, ওয়ার্ডপ্রেস অ্যাডমিন প্যানেলের প্রেক্ষাপটে বার্তা প্রদর্শনের জন্য কাস্টম বার্তা, কাস্টম হুক এবং নেটিভ ওয়ার্ডপ্রেস এপিআই-এর সাথে আমাদের কাজ করার পদ্ধতিকে নির্ধারণ করা সেটিংস মেসেঞ্জারের সম্পূর্ণ বিষয়।

    এটি করার জন্য, আমরা শেষ পাঠে করা কাজটি প্রসারিত করতে যাচ্ছি এবং এখান থেকে শুরু করব।

    সফল বার্তা

    যেহেতু আমরা আগের পাঠে সফল বার্তা দিয়ে শুরু করেছি, আসুন সেগুলি দিয়েই চালিয়ে যাই। এখন আমাদের কাছে একটি হার্ড-কোডেড পদ্ধতি রয়েছে যা একটি একক কৌশল প্রদর্শন করে: