हाल ही में, अधिक से अधिक पद Habré पर दिखाई दिए हैं जो CodeIgniter ढांचे को समर्पित है जो लोकप्रियता हासिल कर रहा है। यह एक काफी सरल और सुविधाजनक ढांचा है जिसके साथ आप जल्दी से सामान्य PHP अनुप्रयोग बनाना शुरू कर सकते हैं। बिल्ली के तहत कोडिमाइटर पर सीएमएस में फुलटेक्ट खोजों को लागू करने का एक उदाहरण है।
1. CodeIgniter की तैयारी।अपने सर्वर पर कुछ फ़ोल्डर में CodeIgniter वितरण को
डाउनलोड और अनपैक करें। हम एक डेटाबेस बनाते हैं, इस डेटाबेस तक पहुँच अधिकारों के साथ एक उपयोगकर्ता, और एप्लिकेशन / config / database.php में कनेक्शन सेटिंग्स लिखते हैं।
एप्लिकेशन खोलें / कॉन्फ़िगर / config.php और base_url फ़ील्ड सेटिंग सेट करें।
2. डेटाबेस की स्थापना।हमने पहले चरण में पहले से ही डेटाबेस बनाया है, लेकिन हमारे पास टेबल नहीं हैं। एक साधारण पृष्ठ तालिका बनाएँ।
CREATE TABLE pages (
id int (10) UNSIGNED NOT NULL AUTO_INCREMENT,
url text NOT NULL ,
title text NOT NULL ,
content text NOT NULL ,
updated datetime NOT NULL ,
PRIMARY KEY (id),
FULLTEXT KEY content (content)
) ENGINE=MyISAM
* This source code was highlighted with Source Code Highlighter .
FULLTEXT का उपयोग करते समय, आपको उन सभी क्षेत्रों को निर्दिष्ट करना होगा जिनके द्वारा हम खोज करेंगे। इस तालिका में, खोज केवल सामग्री फ़ील्ड पर की जाएगी। कृपया ध्यान दें कि FULLTEXT खोज केवल MyISAM इंजन का उपयोग करके काम करती है।
3. परीक्षण डेटाहमारे खोज इंजन का परीक्षण करने के लिए, आपको तालिका में कुछ परीक्षण डेटा जोड़ने की आवश्यकता है। मैंने तय किया कि विकिपीडिया हमारे डेटाबेस के लिए एक अच्छा दाता हो सकता है। मैंने एक छोटी सी स्क्रिप्ट लिखी जो
पिछले कुछ
लेखों को लेती है और फिर,
विकिपीडिया निर्यात का उपयोग करके
, इन लेखों को डेटाबेस में लिखती है।
4. डेटाबेस सर्च करेंखोज करने के लिए, हम फ़ॉर्म की SQL क्वेरी का उपयोग करेंगे:
SELECT *
FROM pages
WHERE MATCH (content) AGAINST ( 'test' ) > 0
* This source code was highlighted with Source Code Highlighter .
FULLTEXT खोजों का उपयोग करते समय, ध्यान में रखने के लिए कुछ सीमाएँ हैं।
- अनुरोध 3 वर्णों से अधिक लंबा होना चाहिए, अन्यथा खोज एक खाली परिणाम लौटाएगी।
- स्टॉप शब्दों का एक सेट है जिसे सर्च करते समय MySQL इग्नोर करता है ('the', 'हालांकि', 'hello')। यदि आप इन शब्दों द्वारा खोजने का प्रयास करते हैं, तो खोज परिणाम रिक्त होगा।
- एक उन्नत खोज भी उपलब्ध है। पूर्ण विवरण MySQL प्रलेखन में पाया जा सकता है।
5. कोडआईग्निटर और एमवीसी पैटर्न।आइए हम अपने ढांचे में वापस आएं। CodeIgniter एक लोकप्रिय मॉडल-व्यू-कंट्रोलर (MVC मॉडल-व्यू-कंट्रोलर) डिज़ाइन पैटर्न प्रदान करता है।
मुझे आपको बुनियादी नियम याद दिलाना है:
- सभी परिवर्तन और डेटाबेस के साथ काम मॉडल से किया जाता है
- नियंत्रक या मॉडल से उपयोगकर्ता को कुछ भी प्रदर्शित नहीं किया जा सकता है।
- केवल एक अभिव्यक्ति संक्षिप्त PHP प्रविष्टि के टैग के अंदर हो सकती है)
यदि आप इनमें से किसी भी नियम का उल्लंघन करते हैं, तो आपको वापस जाना चाहिए और अपनी परियोजना की संरचना के बारे में फिर से सोचना चाहिए।
आइए मॉडल फ़ाइल के साथ खोज विकास शुरू करें। मैं केवल एक ही विधि का उपयोग करता हूं जो खोज करता है। आप देख सकते हैं कि यहां "डायरेक्ट SQL क्वेरी" का उपयोग किया जाता है, हालांकि कोडआईग्नाइटर में क्वेरी पीढ़ी को सरल बनाने के लिए एक ActiveRecord है।
नीचे एप्लिकेशन / मॉडल / पृष्ठ_model.php में स्थित मॉडल का कोड है
class Page_model extends Model
{
function Page_model()
{
parent::Model();
//
$ this ->load->database();
}
function search($terms)
{
//
$sql = "SELECT url, title
FROM pages
WHERE MATCH (content) AGAINST (?) > 0" ;
$query = $ this ->db->query($sql, array($terms, $terms));
return $query->result();
}
}
* This source code was highlighted with Source Code Highlighter .
अगला कदम फॉर्म की फाइल बनाना है:
<? php $ this- > load- > helper('form'); ? >
<? php echo form_open ($ this- > uri- > uri_string); ? >
<? php echo form_label ( 'Search:' , 'search-box' ); ? >
<? php echo form_input ( array ( 'name' = > 'q', 'id' = > 'search-box', 'value' = > $search_terms)); ? >
<? php echo form_submit ( 'search' , 'Search' ); ? >
<? php echo form_close (); ? >
<? php if ( ! is_null ($ results )) : ? >
<? php if ( count ($ results )) : ? >
< ul >
<? php foreach ($ results as $ result ) : ? >
< li >< a href =" 60 ;? php echo $ result- > url; ? > " ><? php echo $ result- > title; ? ></ a ></ li >
<? php endforeach ? >
</ ul >
<? php else: ? >
< p >< em > There are no results for your query. </ em ></ p >
<? php endif ? >
<? php endif ? >
* This source code was highlighted with Source Code Highlighter .
अब एक नियंत्रक फ़ाइल बनाने की बारी है जो मॉडल और दृश्य को जोड़ेगी:
class Pages extends Controller {
function search($search_terms = '' )
{
// URL
// ,
// .
if ($ this ->input->post( 'q' ))
{
redirect( '/pages/search/' . $ this ->input->post( 'q' ));
}
if ($search_terms)
{
//
$ this ->load->model( 'page_model' );
$results = $ this ->page_model->search($search_terms);
}
//
$ this ->load->view( 'search_results' , array(
'search_terms' => $search_terms,
'results' => @$results
));
}
}
* This source code was highlighted with Source Code Highlighter .
इस पद्धति की शुरुआत में, हमने पुनर्निर्देशित कार्यों का उपयोग किया। यह फ़ंक्शन URL सहायक में निहित है। इस फ़ंक्शन का उपयोग करने के लिए, हमने $ "- लोड-> हेल्पर ('url') का उपयोग करके सहायक का" मैनुअल "लोड किया; क्योंकि चूंकि हम अक्सर इस सहायक का उपयोग करेंगे, इसलिए इसे तुरंत स्टार्टअप पर पंजीकृत करना आसान है ताकि इसे हर समय मैन्युअल रूप से लोड न किया जा सके। ऐसा करने के लिए, फ़ाइल एप्लिकेशन / config / autoload.php संपादित करें। अनुभाग में जोड़ें $ autoload ['सहायक']:
$autoload[ 'helper' ] = array( 'url' );
* This source code was highlighted with Source Code Highlighter .
अब हमारे पास एक कार्यशील प्रोटोटाइप है। यह मत भूलो कि आपके डेटाबेस में डेटा (कम से कम 3 लाइनें) होना चाहिए। अब अपने ब्राउज़र में कुछ लिखें जैसे 'http: //localhost/index.php/pages/search', डेटाबेस में कुछ टेक्स्ट सर्च बार में डालें और सर्च पर क्लिक करें। परिणाम कुछ इस तरह दिखेगा:
6. हमारी खोज में नई सुविधाएँ जोड़ना।आरंभ करने के लिए, खोज परिणामों के लिए पृष्ठ नेविगेशन जोड़ें। कोडिएग्निटर पेजिनेशन का उपयोग पेजेशन प्रदर्शित करने के लिए करता है।
हम अपने मॉडल को पेजिनेशन प्रदर्शित करने के लिए संशोधित करते हैं। ऐसा करने के लिए, हमें डेटाबेस से चुने गए रिकॉर्ड की संख्या, उस रिकॉर्ड संख्या को सेट करना होगा, जहां से चयन करना है, और इस अनुरोध के लिए कुल रिकॉर्ड भी प्राप्त करना है।
यहाँ हमें क्या मिला है:
class Page_model extends Model {
function search($terms, $start = 0, $results_per_page = 0)
{
//
//
if ($results_per_page > 0)
{
$limit = "LIMIT $start, $results_per_page" ;
}
else
{
$limit = '' ;
}
// SQL
$sql = "SELECT url, title, content
FROM pages
WHERE MATCH (content) AGAINST (?) > 0
$limit" ;
$query = $ this ->db->query($sql, array($terms, $terms));
return $query->result();
}
function count_search_results($terms)
{
// Run SQL to count the total number of search results
$sql = "SELECT COUNT(*) AS count
FROM pages
WHERE MATCH (content) AGAINST (?)" ;
$query = $ this ->db->query($sql, array($terms));
return $query->row()->count;
}
}
* This source code was highlighted with Source Code Highlighter .
अगला चरण पेजिनेशन के साथ काम करने के लिए हमारे कंट्रोलर को संशोधित करता है
class Pages extends Controller {
function search($search_terms = '' , $start = 0)
{
// URL
// ,
// .
if ($ this ->input->post( 'q' ))
{
redirect( '/pages/search/' . $ this ->input->post( 'q' ));
}
if ($search_terms)
{
//
//
$results_per_page = $ this ->config->item( 'results_per_page' );
// , ,
//
$ this ->load->model( 'page_model' );
$results = $ this ->page_model->search($search_terms, $start, $results_per_page);
$total_results = $ this ->page_model->count_search_results($search_terms);
//
$ this ->_setup_pagination( '/pages/search/' . $search_terms . '/' , $total_results, $results_per_page);
//
$first_result = $start + 1;
$last_result = min($start + $results_per_page, $total_results);
}
//
$ this ->load->view( 'search_results' , array(
'search_terms' => $search_terms,
'first_result' => @$first_result,
'last_result' => @$last_result,
'total_results' => @$total_results,
'results' => @$results
));
}
function _setup_pagination($url, $total_results, $results_per_page)
{
//
$ this ->load->library( 'pagination' );
$uri_segment = count(explode( '/' , $url));
//
//
$ this ->pagination->initialize(array(
'base_url' => site_url($url),
'uri_segment' => $uri_segment,
'total_rows' => $total_results,
'per_page' => $results_per_page
));
}
}
* This source code was highlighted with Source Code Highlighter .
आइए देखें कि हमें क्या मिला। हमने पृष्ठ नेविगेशन जोड़ा, जिसका अर्थ है कि URL में नए खंड जोड़े गए हैं। यह खंड एक साथ खोज परिणामों का एक पृष्ठ है और डेटाबेस से चयन के लिए प्रारंभिक स्थिति निर्धारित करने के लिए एक संख्या है।
खोज पृष्ठ पर परिणामों की संख्या निर्धारित करने के लिए, मैंने
कॉन्फ़िगर लाइब्रेरी का उपयोग किया। एप्लिकेशन / कॉन्फ़िगरेशन फ़ोल्डर में एक नई फ़ाइल जोड़ना सबसे अच्छा है। फ़ाइल अनुप्रयोग / config / application.php युक्त लाइन बनाएँ:
$config[ 'results_per_page' ] = 10;
* This source code was highlighted with Source Code Highlighter .
एप्लिकेशन / config / autoload.php फ़ाइल को फिर से बदलकर इसे ऑटोलैड में जोड़ें और $ autoload ['config'] अनुभाग में 'एप्लिकेशन' जोड़ें।
हम खोज परिणामों में प्रदर्शित जानकारी (स्निपेट और स्निपेट में क्वेरी से शब्दों को उजागर करना) को संसाधित करने के लिए तरीकों का भी उपयोग करते हैं। ये विधियाँ हमारे सहायक में फ़ाइल एप्लिकेशन / हेल्पर्स / search_helper.php में निहित हैं। पहला फ़ंक्शन search_highlight ($ text, $ search_terms) खोज परिणामों में क्वेरी से शब्दों का चयन करता है, दूसरा search_extract ($ सामग्री, $ search_terms, $ number_of_snippets = 3, $ snippet_length = 60) सामग्री से खोज में निर्दिष्ट क्वेरी वाले भाग को निकालता है।
यह प्रपत्र की हमारी संशोधित फ़ाइल की तरह दिखेगा:
<? php $ this- > load- > helper(array('form', 'search')); ? >
<? php echo form_open ($ this- > uri- > uri_string); ? >
<? php echo form_label ( 'Search:' , 'search-box' ); ? >
<? php echo form_input ( array ( 'name' = > 'q', 'id' = > 'search-box', 'value' = > $search_terms)); ? >
<? php echo form_submit ( 'search' , 'Search' ); ? >
<? php echo form_close (); ? >
<? php if ( ! is_null ($ results )) : ? >
<? php if ( count ($ results )) : ? >
< p > Showing search results for ' <? php echo $ search_terms ; ? > ' ( <? php echo $ first_result ; ? > – <? php echo $ last_result ; ? > of <? php echo $ total_results ; ? > ): </ p >
< ul >
<? php foreach ($ results as $ result ) : ? >
< li >< a href =" 60 ;? php echo $ result- > url; ? > " ><? php echo search_highlight ($ result- > title, $search_terms); ? ></ a >< br /><? php echo search_extract ($ result- > content, $search_terms); ? ></ li >
<? php endforeach ? >
</ ul >
<? php echo $ this- > pagination- > create_links(); ? >
<? php else: ? >
< p >< em > There are no results for your query. </ em ></ p >
<? php endif ? >
<? php endif ? >
* This source code was highlighted with Source Code Highlighter .
और इसलिए नए खोज परिणाम:
7. और भी स्वादिष्ट चिप्स।CodeIgniter
परीक्षण डेटा और विभिन्न
अतिरिक्त जानकारी प्रदर्शित करने की क्षमता प्रदान करता है।
उदाहरण के लिए, आप मॉडल के लिए परीक्षण चला सकते हैं:
// Mark the start of search
$ this ->benchmark->mark( 'search_start' );
// Load the model, perform the search and establish the total
// number of results
$ this ->load->model( 'page_model' );
$results = $ this ->page_model->search($search_terms, $start, $results_per_page);
$total_results = $ this ->page_model->count_search_results($search_terms);
// Mark the end of search
$ this ->benchmark->mark( 'search_end' );
* This source code was highlighted with Source Code Highlighter .
परिणामस्वरूप, परीक्षा परिणाम के साथ फॉर्म इस तरह दिखाई देगा:
