Modül yazmadan PHP kodunu nasıl çalıştırabilirim?


15

Bazı paketlere bir alan eklemem gerekiyor. Bir PHP snippet benim için işi yapacak, bu yüzden bir modüle ihtiyacım yok.Aşağıdaki snippet ne yürütülmelidir:

$field_name = 'field_custom_image';
// Create the field.
$field = array(
  'field_name' => $field_name,
  'type' => 'image',
);
field_create_field($field);

ve ardından bu alanı pakete eklemek için snippet'i ekleyin:

// Create the instance.
$instance = array(
  'field_name' => $field_name,
  'entity_type' => 'node',
  'bundle' => 'article',
  'label' => 'Image',
  'description' => 'An image for the article.',
  'required' => TRUE,
);
field_create_instance($instance);

PHP kodunu bir modül yazmanıza, kurmanıza, çalıştırmanıza ve kaldırmanıza gerek kalmadan doğrudan Drupal'da çalıştırmanın bir yolu var mı?


Soruma yapılan çalışma cevapları ve iyi baskılar için herkese teşekkürler. Tüm cevapları sorunuma çözüm olarak oyladım, şimdi tüm çalışmalara neden olan en iyi çözüm olarak bu cevaplardan birini seçmek benim için zor bir karar.
Alireza Tabatabaeian

1
Çalıştırmanız gereken kodu gösterseydiniz, cevaplar daha eksiksiz olurdu.
kiamlaluno

@kiamlaluno Tavsiye için teşekkürler, PHP snippet'i soruma ekleyeceğim.
Alireza Tabatabaeian

1
Yakından ilgili soru ve cevaplar: Nasıl drp kullanarak php komut dosyası yürütmek için ?
tanius

Yanıtlar:


6

Aynı düşüncede "Biraz PHP çalıştırmam gerekiyor" ve "Bir modüle ihtiyacım yok" derseniz, bu özel soruna yaklaşırken yanlış yola gittiğinizi öneririm veya genel olarak sitenin oluşturulmasına yönelik yaklaşım.

drush scrgerçekten gitmek istediğiniz yön ise size yardımcı olacaktır veya bağımsız bir PHP komut dosyası yazabilirsiniz (temel olarak her şeyi drupal_bootstrap()index.php'den çağrı yoluyla kopyalayıp yapıştırın ve sonra özel kodunuzu ekleyin), ancak birkaç tane daha var bakabileceğiniz şeyler:

  • Özellikler modülüyle içerik türünüzü (ve alan tabanlarını ve örneklerini) dışa aktarın. IMO, bunu zaten yapmalısın.
  • Basit bir "site değişiklikleri" modülü oluşturun ve güncelleme kancalarına böyle şeyler ekleyin. Bunu yapmak istiyorsanız, boş bir modül (güncelleme kancası olmadan) oluşturmalı, sitenizde etkinleştirmeli ve güncellemeyi görmek için Drupal'ı almak için güncelleme kancasını eklemelisiniz.

Üzerinde çalıştığım birçok site bu çözümlerin her ikisinin bir kombinasyonunu oluşturdu. Config çoğunlukla dışa aktarılan Özellikler modüllerine girmelidir ve yapamayan her şey ( gerçekten yapamayacağınızdan emin misiniz ?) Bir güncelleme kancasına girebilir.


Özellikle güncelleme kancalarının kullanımı hakkında bilgi verdiğiniz için tavsiyeler için teşekkürler. very yararlı
Alireza Tabatabaeian

Bu yaklaşım PHP kodlarının çalıştırılmasından kaynaklanabilecek bazı problemlerden bahsedebilir misiniz? Sadece PHP betikleri çalıştırarak bazı içerik türlerine alan eklemek demek?
Alireza Tabatabaeian


12

Kodu yalnızca bir kez çalıştırmanız gerekiyorsa, Devel modülü de dahil olmak üzere herhangi bir modül takmadan yapabilirsiniz.

Bir PHP dosyası yazın (örneğin, görevleri.php ), Drupal ile birlikte gelen cron.php dosyasının olduğu yere koyun ve aşağıdaki kodu ekleyin.

/**
 * Root directory of Drupal installation.
 */
define('DRUPAL_ROOT', getcwd());

include_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
drupal_set_time_limit(240);

// Your code here.

Sitenizi korumak / dağıtmak için Drush'ı zaten kullanıyorsanız, bir Drush komut dosyası oluşturabilirsiniz . Bu şekilde, CLI tarafından yürütülebilir ve herhangi bir argüman alabilir, bu da onu birçok kez yeniden kullanılabilir hale getirebilir.

#!/usr/bin/env drush

// Your code here.
// Access the options with drush_get_option(), or any argument with drush_shift().

Ayrıca drush php-eval(veya sadece drush ev) ile bir PHP komut dosyası yürütebilirsiniz , örneğin:

drush php-eval 'print time();'

Bir Drush komut dosyası oluştururdum, ancak Drush'ı yükleyemiyorsanız veya tarayıcıdan PHP kodu çalıştırmanız gerekiyorsa, ilk yöntem iyi çalışır.


10

Kod snippet'inizi bir dosyaya ekleyin ve dosyayı file_name.phpDrupal site kök klasörünüzdeki gibi kaydedin. Ardından, Drupal site kök klasöründen çalışma dizininiz olarak bir terminalde aşağıdaki komutu çalıştırın:

drush scr file_name.php

Bu komut PHP dosyanızı yürütür. (Yürütme hakkında bir fikir edinmek için, dosyanıza metin, değişken değerler vb.

Not: Bir önkoşul olarak, drushsisteminize yüklenmiş olmanız gerekir .


3

PhpInline Devel modülünü kullanabilirsiniz , ancak özel kodumu herhangi bir modül olmadan çalıştırmak için drupal'daki hilelerimden birini almanızı sağlar.

Önce bir oluşturmak menu itemiçindehook_menu

function yourmdoule_menu()
{

    $items['ytest'] = array(
        'title' => 'my debug and devel test tool ',
        'description' => 'create for debug and faster develop',
        'page callback' => 'my_function',
        'type' => MENU_CALLBACK,
        'access callback' => true,
    );
    return $items;
}

function my_function{

/// run every want you want
}

ardından önbelleği temizleyin (çünkü menü öğeleri drupal'da önbelleğe alınır) ve istediğiniz her şeyi koyun my_function ve sadece yazınyoursite.com/ytest

Umarım projelerde size yardımcı olacaktır "dada";)


@AlirezaTabatabaeian hoş geldiniz "dada", İranlı Drupalist'i burada gördüğünüzde sevinirim;;)
Yusef

2

Drupal modüllerinin amacı belirli bileşenlere ayrı bir mantık sağlamaktır, böylece bir şeyler ters giderse devre dışı bırakılabilirler.

hook_install/hook_update

Bir kerede yeni bir alan oluşturan durumunuzda, ideal senaryo hook_installveyahook_update .

Özel bir modülünüz yoksa (btw. Bunun için dışa aktarılan özellik modülünü de kullanabilirsiniz), yalnızca güncellemeler için yeni bir modül oluşturun (örn. site_updates). : Drupal 7, tek ihtiyacınız 3 dosyalarla klasör oluşturmaktır .info, .moduleve .installGözlerinde farklı yüklemek veya güncellemek kanca ve tanımlar .install. Yükleme / güncelleme kancasını kullanmak, özellikle birden fazla Drupal sunucunuz (dev, test ve prod gibi) olduğunda tutarlı ortamlara sahip olmak için uygundur, böylece değişiklik bir sonraki dağıtım sırasında çağrılabilir.

Hala modül oluşturmak istemiyorsanız, işte size başka yöntemler.

Bir defalık yürütme

Belirli PHP kodunu yalnızca bir kez yürütmeniz gerekirse, şunları yapabilirsiniz:

  • Devel modülünü etkinleştirin ve kodu şuraya yapıştırın /devel/php,
  • PHP kodunu yürütmek için CLI (ve / command) komutunu kullanın , örn.drush evalev

    drush ev 'field_create_field(["field_name"=>"foo", "type"=>"image"]);'
    drush ev 'print_r(field_info_field("foo"));'
  • drush scrPHP betiğini çalıştırmak için kullanın :

    drush scr my_file.php

    my_file.phpyürütmek için kodu ile düz PHP betiği nerede .

Belirli sayfa yürütme

Belirli sayfalarda veya bileşenlerde özel kod yürütmek için:

Tüm sayfa yürütme

Modül yazmadan her sayfaya PHP kodu eklemek ve çalıştırmak için şunları yapabilirsiniz:

  • Bunun settings.phpiçin bir dosya kullanın . Yalnızca yapılandırma geçersiz kılma gibi basit kodlar için önerilir. Aksi takdirde, bunu hook_initözel modülünüzün bir parçası olarak kullanmalısınız .
  • PHP metin filtresini etkinleştirin , ardından içinde özel PHP kodu olan bir blok oluşturun ve bloğu altbilgi bölgesine yerleştirin.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.