मॉड्यूल निर्देशिका में स्थित छवि के लिए थीम छवि शैली


10

शायद यह एक Drupal 6 दृश्य बिंदु के बहुत से पर आ रहा है, लेकिन ...

जब मैं उस छवि को किसी मॉड्यूल फ़ोल्डर में रहता हूं, तो मैं किसी दिए गए छवि शैली में किसी छवि को कैसे थीम दे सकता हूं? यह मुझे चमगादड़ चला रहा है और मुझे पता है कि मैं बस कुछ आसान याद कर रहा हूं।

यहाँ कुछ उदाहरण कोड दिखाया गया है जो मैं करने की कोशिश कर रहा हूँ:

$file_uri = 'public://sites/all/modules/my_module/logo.jpg';
$data['logo'] = theme('image_style', array('style_name' => 'medium', 'path' => $file_uri));

यहां तक ​​कि अगर मैं file_build_uri () का उपयोग करता हूं, तो मैं उस फ़ाइल के पथ के साथ समाप्त होता हूं जो मौजूद नहीं है। अगर मैं फ़ाइल निर्देशिका में छवि को स्थानांतरित करूँ और $ file_uri को 'public: //logo.jpg' में बदलूँ, तो यह ठीक काम करता है।

क्या मुझे मॉड्यूल कोड के हिस्से के रूप में छवि को फ़ाइलों की निर्देशिका में कॉपी करने की आवश्यकता है? यदि हां, तो यह हास्यास्पद नहीं है?

मुझे किसकी याद आ रही है? क्या इस तरह से कुछ करने के लिए प्रलेखन है? मैंने एक घंटे से अधिक ड्रुपल प्रलेखन खनन किया है और पूरी तरह से सूखा हुआ है।


सार्वजनिक: //sites/all/modules/my_module/logo.jpg प्रभावी रूप से साइटों / डिफ़ॉल्ट / फ़ाइलों / साइटों / सभी / मॉड्यूल / my_module / logo.jpg का अनुवाद करता है - यही कारण है कि ऊपर काम नहीं करता है। मुझे लगता है कि मेरे पास सवाल है, मैं इसे सिर्फ theme_image_style के माध्यम से चलाने के लिए फ़ाइल की प्रतिलिपि बनाने से कैसे बचूं?
प्रेरीहिप्पो

जवाबों:


4

दुर्भाग्य से यह डिजाइन द्वारा है। theme_image_style()स्वीकार्य मापदंडों के डॉक्स विवरण से:

पथ: Drupal फ़ाइलों निर्देशिका के सापेक्ष छवि फ़ाइल का पथ यह फ़ंक्शन फ़ाइलों की निर्देशिका के बाहर की छवियों के साथ काम नहीं करता है और न ही दूरस्थ रूप से होस्ट की गई छवियों के साथ । यह एक प्रारूप में होना चाहिए जैसे कि 'images / image.jpg', या 'जनता: //images/image.jpg' जैसे स्ट्रीम रैपर का उपयोग करना।

जोर मेरा।

ऐसा लगता है कि छवि शैली प्रणाली केवल सार्वजनिक फ़ाइलों निर्देशिका (शायद निजी, मुझे यकीन नहीं है) के संदर्भ में काम करती है।

मैं हाल ही में एक समान स्थिति में भाग गया और इसे खुद को कोड करने के लिए समाप्त हो गया (हालांकि मैंने कोर इमेज मॉड्यूल से बहुत उधार लिया था)।


धन्यवाद - वास्तव में इच्छा है कि यह इस तरह से काम न करे, लेकिन मुझे लगता है कि मैं यह समझ सकता हूं कि डेवलपर्स ने इस दृष्टिकोण को क्यों चुना।
प्रेरीहिप्पो

9

मैं अभी इसके पार आया और इसे संभालने के लिए कोड लिखना पड़ा।

यह theme_image_style()पेज अनुरोध के निष्पादन के दौरान छवि व्युत्पन्न बनाने के लिए प्रभावी रूप से क्लोन करता है। जनरेशन सुरक्षा के मुद्दों को दरकिनार कर देती है जो आमतौर पर एक 404 को ट्रिगर करते हैं, लेकिन इसका मतलब यह भी है कि पहली बार पृष्ठ पर जाने पर एक धीमा पृष्ठ।

मैं केवल सार्वजनिक फ़ाइल स्कीमा का उपयोग कर रहा हूं, लेकिन मैं निजी फ़ाइल स्कीमा आधारित शैलियों के साथ विफल होने की उम्मीद करूंगा।

    /**
     * Implements hook_theme().
     */
    function MODULE_theme() {
      return array(
        'remote_image_style' => array(
          'variables' => array(
            'style_name' => NULL,
            'path' => NULL,
            'width' => NULL,
            'height' => NULL,
            'alt' => '',
            'title' => NULL,
            'attributes' => array(),
          ),
        ),
      );
    }

    /**
     * Returns HTML for an image using a specific image style.
     *
     * Clones theme_image_style() with the additional step of forcing the creation
     * of the derivative to bypass any 404 issues.
     */
    function theme_remote_image_style($variables) {
      // Determine the dimensions of the styled image.
      $dimensions = array(
        'width' => $variables['width'],
        'height' => $variables['height'],
      );
      image_style_transform_dimensions($variables['style_name'], $dimensions);

      $variables['width'] = $dimensions['width'];
      $variables['height'] = $dimensions['height'];

      $image_style_dest_path = image_style_path($variables['style_name'], $variables['path']);
      if (!file_exists($image_style_dest_path)) {
        $style = image_style_load($variables['style_name']);
        image_style_create_derivative($style, $variables['path'], $image_style_dest_path);
      }
      $variables['path'] = file_create_url($image_style_dest_path);
      return theme('image', $variables);
    }

2

theme_image_style() PHP के स्ट्रीम रैपर और वास्तविक रास्तों का उपयोग करके URI स्वीकार नहीं करता है।

input://एक PHP की स्ट्रीम आवरण है, जबकि public://, private://और निजी और अस्थायी फ़ोल्डर का temporary://प्रतिनिधित्व करने के लिए Drupal की स्ट्रीम आवरण sites/default/filesहैं।

यदि आपको निश्चित रूप से एक मॉड्यूल में पाई गई छवि के साथ एक छवि शैली का उपयोग करने की आवश्यकता है, तो आप system_stream_wrapper मॉड्यूल को जांचना चाहते हैं module://, जो कि theme://, profile://और library://स्ट्रीम रैपर जोड़ता है ।

सूचना: यह वर्तमान प्रश्न के लिए अप्रासंगिक हो सकता है लेकिन चूंकि अन्य पदों में इसका उल्लेख किया गया था, इसलिए मैं रिमोट_स्ट्रीम_वॉपर मॉड्यूल को भी इंगित करना चाहूंगा जो http: //, https: //, या फ़ीड का उपयोग करके किसी भी URL के लिए समर्थन जोड़ता है: / / । जैसा कि उल्लेख किया गया है, ये स्ट्रीम रैपर केवल पढ़ने योग्य हैं और कोई लेखन कार्य नहीं कर सकते हैं, लेकिन मेरा मानना ​​है कि इसका उपयोग image_style_url()और संबंधित कार्यों जैसे किया जा सकता है theme_image_style()

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.