PHP

2010-12-31 13 views
6

में वर्डप्रेस शोर्ट-शैली फ़ंक्शन कैसे बनाएं I छवियों के साथ "[[133]]" जैसे शॉर्टकोड को प्रतिस्थापित करने के लिए PHP में वर्डप्रेस शोर्ट-शैली सुविधा बनाने की कोशिश कर रहा हूं। असल में, मैं चित्र URL/खिताब/आईडी 1-150 साथ उपशीर्षक के एक MySQL तालिका है, और मैं गतिशील इस तरह लघुकोड के साथ अपने पृष्ठों के पाठ में उन्हें सम्मिलित करने के लिए सक्षम होना चाहते हैं:PHP

Blabla bla bla bla bla। [[5]] इसके अलावा, ब्ला ब्ला ब्ला ब्ला ब्ला [[27]] अरे, और ब्लै ब्लै ब्लै! [[129]]

तो, मैं सिर्फ $ आईडी के रूप में आईडी हड़पने, और फिर एक MySQL क्वेरी के लिए यह mysql_query तरह फ़ीड (करना चाहते हैं "शीर्षक, उपशीर्षक छवियों से URL का चयन करें जहां आईडी = $ आईडी") और उसके बाद आईएमजी/शीर्षक/उपशीर्षक के साथ "[[id]]" को प्रतिस्थापित करें। मैं एक ही पृष्ठ पर कई बार ऐसा करने में सक्षम होना चाहता हूं।

मुझे पता है कि इसमें रेगेक्स और preg_match, preg_replace, strstr, strpos, substr के कुछ संयोजन शामिल हैं ... लेकिन मुझे नहीं पता कि कहां से शुरू करना है और कौन से कार्यों को मैं करने के लिए उपयोग करना चाहिए। क्या आप एक रणनीति की सिफारिश कर सकते हैं? मुझे कोड की आवश्यकता नहीं है-सिर्फ यह जानना कि किस भाग का उपयोग करना बेहद सहायक होगा।

+0

नोट - यह एक वर्डप्रेस साइट के लिए नहीं है, इसलिए मैं मौजूदा WP शोर्ट कार्यों का उपयोग नहीं कर सकता। – supertrue

+0

शायद इसमें preg_replace_callback भी शामिल है? – supertrue

+0

मैं अनुमान लगाता हूं और कहता हूं कि आप आसानी से वर्डप्रेस से संबंधित कोड को आसानी से निकाल सकते हैं। वैकल्पिक रूप से, आप केवल केली के सुझावों का सुझाव दे सकते हैं और अपना स्वयं का समाधान बनाने के लिए कई दृष्टिकोणों में से एक का उपयोग कर सकते हैं। –

उत्तर

4
एक समारोह getimage($id) कि MySQL क्वेरी करता है और प्रतिस्थापन पाठ स्वरूपों के साथ

, इस लगभग करता है सब कुछ आप की जरूरत है:

$text = "Blabla [[5]] and [[111]] bla bla bla [[27]] and bla bla bla! [[129]]"; 

$zpreg = preg_match_all('#\[\[(\d{1,3})\]\]#', $text, $matches); 

var_dump($matches[1]); 

$newtext = preg_replace('#\[\[(\d{1,3})\]\]#', getimage($matches[1][?????]), $text); 

echo $newtext; 

मैं सिर्फ यह पता लगाने की क्या अंदर डाल करने के लिए getimage() जरूरत है (जहां ?? ??? है) जो सही [[id]] के लिए सही छवि में डाल देगा।

अधिक जानकारी के लिए आधिकारिक दस्तावेज़ीकरण पर preg_match_all और preg_replace देखें।

0

regex, मुझे विश्वास है, होगा:

/\[\[[1-9]{1,3}\]\]/g 

1

विभिन्न अलग दृष्टिकोण पर निर्भर करता है, इस के लिए लिया जा सकता है (डबल कोष्ठक के अंदर एक 1-टू-3 अंकों वाले नंबर के लिए।) ($ स्ट्रिंग) कैसे आप ect प्रदर्शित करने के लिए,

वाक्य ले लो की योजना "नमस्ते [34] दुनिया"

एक साधारण समारोह जैसे replaceCode बनाएं

function replaceCode($string){ 

    $pos = strpos($string, '['); // Find the first occurrence of the bracket 

    if($pos != false){ 

      // If everything is ok take the next 2 numbers from it 

      // Check for a close bracket & remove ] 

      // call another function to replace the number with the image text 

    } 




} 

यदि ब्रैकेट्स की अब और घटनाएं मिलती हैं, तो फिर से फ़ंक्शन को फिर से कॉल करें, शेष स्ट्रिंग को फिर से फ़ंक्शन पर पास करें।

नोट: यह सुनिश्चित करने के लिए सत्यापन [और] सही ढंग से संतुलित होने के लिए पहले किया जाना चाहिए!

5

आप इस तरह लघुकोड लिखने में सक्षम होना चाहते हैं:

[[function_name_suffix parameter1 parameter2 ...]] 
यहाँ

अधिक पूर्ण रास्ता है, पैरामिट्रीकृत लघुकोड लागू करने के लिए preg_replace_callback और call_user_func_array का उपयोग कर।

function shortcodify($string){ 
    return preg_replace_callback('#\[\[(.*?)\]\]#', function ($matches) { 
     $whitespace_explode = explode(" ", $matches[1]); 
     $fnName = 'shortcode_'.array_shift($whitespace_explode); 
     return function_exists($fnName) ? call_user_func_array($fnName,$whitespace_explode) : $matches[0]; 
    }, $string); 
} 

इस समारोह परिभाषित किया गया है:

function shortcode_name($firstname="",$lastname=""){ 
    return "<span class='firstname'>".$firstname."</span>&nbsp;<span class='lastname'>".$lastname."</span>"; 
} 

फिर इस कॉल

print shortcodify("My name is [[name armel larcier]]"); 

विल उत्पादन:

My name is <span class='firstname'>armel</span>&nbsp;<span class='lastname'>larcier</span> 

यह सिर्फ कुछ मैं अभी के आधार पर कार्यान्वित किया जाता है supertrue का विचार।

कोई भी प्रतिक्रिया स्वागत से अधिक है।

+0

ओह ठीक है, मैंने सोचा कि यह PHP 5.4+ में काम करता है क्योंकि आपने कोड नहीं किया है ' पहले प्रयास में काम नहीं करते हैं। तब मुझे पता चला कि आपके पास अपने फ़ंक्शन नाम में एक टाइपो है। आप फ़ंक्शन शॉर्टोडिफ़ाई() को कॉल करते हैं लेकिन इसे शॉर्टोडिफ़ी() के रूप में परिभाषित किया जाता है - "i" अंतर बनाता है। मैंने यह आपके लिए सही किया। – Hexodus

+1

अच्छा पकड़ो। आपका बहुत बहुत धन्यवाद! –

0

मेरे शर्त PHP's strtr समारोह है ...

<?php 
function get_profile_image($image_url){ 
    return "<img src='{$image_url}' height='200px' width='200px' />"; 
} 

$trans = array(
    "[[1]]" => "Vishal", 
    "[[2]]" => "Kumar", 
    "[[3]]" => "Sahu", 
    "[[4]]" => "Web Designer", 
    "[[5]]" => "Draw and Paint", 
    "[[6]]" => ucwords("any programming language"), 
    "[[7]]" => strtoupper("PHP, JAVASCRIPT and HTML"), 
    "[[8]]" => get_profile_image("http://php.net/images/logos/php-logo.svg"), 
    "[[9]]" => "http://php.net/images/logos/php-logo.svg" 
    ); 
$str = <<<HEREDOC_1 
[[8]] 
<pre>My name is [[1]] [[2]] [[3]]. 
I am a [[4]] and I love to [[5]]. 
I don't know [[6]] but I know [[7]] little bit.</pre> 
Here is my profile image <img src='[[9]]' alt='[[1]]-[[2]]-[[3]]-[[4]]' /> 
HEREDOC_1; 
echo strtr($str, $trans); 

यह उत्पादन

[http://php.net/images/logos/php-logo.svg] मेरा नाम विशाल कुमार साहू है कर रहा है। मैं एक वेब डिजाइनर हूं और मुझे आकर्षित करना और पेंट करना पसंद है। मुझे कोई प्रोग्रामिंग भाषा नहीं है लेकिन मुझे PHP, जावास्क्रिप्ट और एचटीएमएल छोटे बिट पता है। यहां मेरी प्रोफाइल छवि [विशाल-कुमार-साहू-वेब डिजाइनर]

यह 5.6 पर ठीक काम कर रहा है।

+0

PHP दस्तावेज़ पृष्ठ नहीं बदला जाना चाहिए। मैं इसे @ मेगाट्रॉन जोड़ दूंगा: डी –