logo

एक्स्ट्रा ब्लॉक टाइप्स (EBT) - नया लेआउट बिल्डर अनुभव❗

एक्स्ट्रा ब्लॉक टाइप्स (EBT) - स्टाइलिश, कस्टमाइज़ेबल ब्लॉक टाइप्स: स्लाइडशो, टैब्स, कार्ड्स, एकॉर्डियन्स और कई अन्य। बैकग्राउंड, DOM बॉक्स, जावास्क्रिप्ट प्लगइन्स के लिए बिल्ट-इन सेटिंग्स। आज ही लेआउट बिल्डिंग का भविष्य अनुभव करें।

डेमो EBT मॉड्यूल्स EBT मॉड्यूल्स डाउनलोड करें

❗एक्स्ट्रा पैराग्राफ टाइप्स (EPT) - नया पैराग्राफ्स अनुभव

एक्स्ट्रा पैराग्राफ टाइप्स (EPT) - एनालॉजिकल पैराग्राफ आधारित मॉड्यूल्स का सेट।

डेमो EPT मॉड्यूल्स EPT मॉड्यूल्स डाउनलोड करें

स्क्रॉल

1.5. डेटाबेस और टेम्पलेट्स के साथ काम करने के लिए क्लासेस को जोड़ना

07/10/2025, by Ivan

हमने अपने फ्रेमवर्क की संरचना बना ली है, अब समय है डेटा (जैसे समाचार और उत्पादों) के भंडारण के बारे में सोचने का। डेटाबेस (DB) के साथ काम करने के लिए हमारा ऑब्जेक्ट निम्नलिखित कार्य करने में सक्षम होना चाहिए:

  • डेटाबेस से कनेक्शन को प्रबंधित करना
  • DB से एक हल्का एब्स्ट्रैक्शन प्रदान करना
  • क्वेरी को कैश करना
  • DB के साथ सामान्य ऑपरेशनों को आसान बनाना

इसके लिए हम एक ऑब्जेक्ट बनाएंगे Registry/objects/db.class.php:

<?php
/**
 * डेटाबेस प्रबंधन क्लास
 * DB से हल्का एब्स्ट्रैक्शन प्रदान करता है
 */
class database {
  ...
}
?>

डेटाबेस से कनेक्ट होने से पहले आइए देखें कि यह क्लास क्या करता है। हम इसके माध्यम से सरल CRUD ऑपरेशन्स (Create, Read, Update, Delete) कर सकते हैं:

// डेटा डालना
$registry->getObject('db')->insertRecords( 'products', array('name'=>'मग' ) );
// अपडेट करना
$registry->getObject('db')->updateRecords( 'products', array('name'=>'लाल मग' ), 'ID=2' );
// रिकॉर्ड हटाना
$registry->getObject('db')->deleteRecords( 'products', "name='लाल मग'", 5 );

हमारा क्लास क्वेरी कैशिंग को भी सपोर्ट करता है।

अब हम टेम्पलेट मैनेजमेंट के लिए एक और ऑब्जेक्ट बनाएंगे: Registry/objects/template.class.php

<?php
// यह कॉन्स्टेंट index.php में परिभाषित है, ताकि इस क्लास को सीधे नहीं चलाया जा सके
if ( ! defined( 'FW' ) ) {
  echo 'यह फ़ाइल केवल index.php से ही चल सकती है';
  exit();
}

/**
 * टेम्पलेट्स के साथ काम करने वाला क्लास
 */
class template {
  ...
}
?>

हमने टेम्पलेट सिस्टम में Page ऑब्जेक्ट का उपयोग भी किया है, इसलिए हमें इसे परिभाषित करना होगा: Registry/objects/page.class.php

<?php
/**
 * पेज क्लास
 * इसमें पेज से संबंधित फ़ंक्शनलिटी जोड़ी जाएगी — जैसे पासवर्ड सुरक्षा, JS/CSS जोड़ना आदि।
 */
class page {
  ...
}
?>

अब जब हमने डेटाबेस और टेम्पलेट्स के लिए क्लासेस बना ली हैं, आइए उन्हें जोड़ते हैं।

हम Registry/registry.class.php में एक नया मेथड जोड़ते हैं — storeCoreObjects():

public function storeCoreObjects()
{
  $this->storeObject('database', 'db' );
  $this->storeObject('template', 'template' );
}

यह मेथड निर्धारित करेगा कि कौन-से क्लासेस को फ्रेमवर्क में लोड किया जाएगा।

अब हम थोड़ा डेटा भी जोड़ेंगे — उदाहरण के लिए, एक टेबल users बनाएंगे जिसमें तीन फील्ड्स होंगे: id, name, email. (इसका SQL उदाहरण GitHub पर उपलब्ध है।)

अब हम मुख्य पेज का टेम्पलेट बनाएंगे Views/Templates/main.tpl.php:

<html>
<head>
    <title> Powered by PCA Framework</title>
</head>
<body>
<h1>हमारे सदस्य</h1>
<p>नीचे हमारे सभी सदस्यों की सूची दी गई है:</p>
<ul>
<!-- START members -->
<li>{name} {email}</li>
<!-- END members -->
</ul>
</body>
</html>

जैसा कि आप देख सकते हैं, हमने टेम्पलेट में {name} और {email} टोकन जोड़े हैं। इन्हें बाद में डेटाबेस से प्राप्त डेटा द्वारा बदला जाएगा।

अब हम index.php में टेम्पलेट और डेटाबेस दोनों को कनेक्ट करेंगे:

<?php
session_start();
error_reporting(E_ALL);

define( "APP_PATH", dirname( __FILE__ ) ."/" );
define( "FW", true );

// क्लासेस की ऑटो लोडिंग
function __autoload( $class_name )
{
    require_once('Controllers/' . $class_name . '/' . $class_name . '.php' );
}

// रजिस्ट्री कनेक्ट करें
require_once('Registry/registry.class.php');
$registry = Registry::singleton();

// मुख्य ऑब्जेक्ट्स लोड करें
$registry->storeCoreObjects();

// डेटाबेस से कनेक्ट करें
$registry->getObject('db')->newConnection('localhost', 'root', '', 'framework');

// मुख्य पेज का टेम्पलेट जोड़ें
$registry->getObject('template')->buildFromTemplates('main.tpl.php');

// यूज़र्स टेबल से डेटा प्राप्त करें
$cache = $registry->getObject('db')->cacheQuery('SELECT * FROM users');

// टोकन सेट करें ताकि टेम्पलेट में उपयोग किया जा सके
$registry->getObject('template')->getPage()->addTag('users', array('SQL', $cache) );

// शीर्षक सेट करें
$registry->getObject('template')->getPage()->setTitle('Our users');

// आउटपुट पार्स करें और प्रदर्शित करें
$registry->getObject('template')->parseOutput();
print $registry->getObject('template')->getPage()->getContent();

// फ्रेमवर्क का नाम दिखाएं (जांच के लिए)
print $registry->getFrameworkName();
exit();
?>

यदि सब कुछ सही ढंग से किया गया है और आपकी डेटाबेस में उपयोगकर्ता मौजूद हैं, तो आपको कुछ इस तरह दिखाई देगा:

Our users

यदि कोई त्रुटि आती है, तो आप GitHub पर सही काम करने वाला कोड देख सकते हैं।

यहां वे सुधार दिए गए हैं जो लेखन के दौरान किए गए:

  • क्लास database का नाम बदलकर db किया गया।
  • Registry क्लास में कुछ स्टैटिक मेथड्स जोड़े गए।
  • टेम्पलेट क्लास में parseTitle() में त्रुटि सुधारी गई।