Ile sorun benim Drupal sayılabilir

2 Cevap php

I have a problem with 3rd-party-system integration in my drupal site. Sorry for my english, i'm from russia, but i will try to explain my problem well.

Integration idea:

  • 2 .php dosya
  • 2 php-script lines (include function's)

The problem is:

  • this scripts call to outside perl (.pl) script. Perl script read the parameters (parameters transfers by url) ve generate content.

  • I can't see this perl script, but i know - hes working, but not in my page :)

2 php files:

spectrum_view.php

<?php    
$url = "http://young.spectrum.ru/cgi-bin/programs_view.pl";    
$param = $_GET;     
if (!empty($param))
    {
    $url .= "?";
    foreach ($param as $keys=>$value)
                   {
                   $url .= "&".$keys."=".urlencode($value);
                   }
    }    echo $content = file_get_contents($url);    
?>

spectrum_form.php

<?php 
$url ="http://young.spectrum.ru/cgi-bin/programs_form.pl"; 
$params = $_GET; 
if (!empty($params))
        {
        $url .= "?";
        foreach ($params as $keys=>$value)
              {
               $url .= "&".$keys."=".urlencode($value);
              }
        }    echo iconv("windows-1251","utf-8",(file_get_contents($url))); 
    ?>

ve the 2 php-lines, wich i insert in my drupal pages (the first i insert in page http://new.velo-travel.ru/view ve the second in the right block)

include("http://new.velo-travel.ru/themes/themex/spectrum_view.php?$QUERY_STRING");

include("http://new.velo-travel.ru/themes/themex/spectrum_form.php?act=/view$QUERY_STRING");

Yani, ben bu sorunu çözmüş, ama drupal değil - yalnızca my Localohost, ben sadece bir 2 sayfa oluşturmak:

form.php:

<?php
$url ="http://young.spectrum.ru/cgi-bin/programs_form.pl";
$params = $_GET;
if (!empty($params)){
    $url .= "?";
    foreach ($params as $keys=>$value) $url .= "&".$keys."=".urlencode($value);
}
$content = file_get_contents($url);
print $content;

**require_once 'view.php';**
?>

view.php:

<?php
$url = "http://young.spectrum.ru/cgi-bin/programs_view.pl";
$param = $_GET;
if (!empty($param))
 {
 $url .= "?";
 foreach ($param as $keys=>$value)
                {
                $url .= "&".$keys."=".urlencode($value);
                }
 }

$content = file_get_contents($url);
print $content;
?>

= (

2 Cevap

Ne yapmaya çalışıyorsunuz ne kadar, tamamen emin değilim. Ama bu perl bu içerik üretmek istedikleri gibi görünüyor. Bu onun kendi şablonu ile özel bir sayfa ise, template.php içine tüm bu kodu hareket etmelidir. Bu dosya sizin sayfası için içerik oluşturmak isteyen bazı mantık tutmak için yapılır.

Şahsen ben tüm bu işlemek için bir modül yapmak için tercih ediyorum, ama şimdi ne var, tema yapmak için muhtemelen daha kolay. Eğer bir form yaratmak ve biçimine dayalı bazı içerik gibi görünüyor. Bu, bir modül içinde yapılabilir. Bir Drupal form oluşturmak, ve sonra Drupal ile doğrulama işlemek, ve banyo geniş Perl veri göndermek olabilir. Ama tema ile gidiyor, perl onu almak isterim eğer muhtemelen en iyisidir. Peki bunu nasıl yaparsınız?

  1. Kullandığınız tpl.php dosyası için bir preprocess fonksiyonunu uygulamak.
  2. Burada tüm mantığı oluşturmak, size üzerinde kullanabilir veya sadece bunları içeren php dosyalarını kopyalamak olabilir. Ithalat, şablon dosyasında erişilebilir olacak bir değişkene sonucu atamak.
  3. Şablonunuzda değişkeni yazdırın.

Kodunda bu gibi bir şey olacaktır:

//template.php file
function mytheme_preprocess_somename(&$vars) {
    include('php');
    // Do some logic.
    $vars['form'] = $result_a;
    $vars['my_content'] = $result_b;
}

// your .tpl.php
// Some markup here
<div><?php print $my_content; ?></div>
<div><?php print $form; ?></div>

Şimdi, ben size sonra ne tam olarak emin değilim, ama böyle bir şey size boyunca yardımcı olacaktır. Eğer bazı hatalar neden olabilir $content gibi bazı Drupal değişkenleri, üzerine yazabilirsiniz gibi, şablon dosyası içinde sizin değişkenler diyoruz önemlidir unutmayın.

Muhtemelen bir güvenlik sorunu haline yayınlanıyor. Lütfen dikkat allow_url_fopen ve allow_url_include - bu ayarlar php.ini accordant ayarlarına sahip olmalıdır. Aksi takdirde yerleştirilmek olamaz güvenlik nedenleriyle uzak bir dosya içerir.