Ön sayfayı programlı olarak nasıl ayarlayabilirim?


22

Drupal ön sayfasını çalışma zamanında programlı olarak ayarlamak istiyorum.
Bunu nasıl yapabilirim? Mümkün mü?

Yanıtlar:


22

Bunun için kullanabilirsiniz variable_set().

variable_set('site_frontpage', $value);

18
Bu doğru, ancak çok sık yapılması gereken veya kullanım eylemine dayanan bir şey değil. Variable_set () çağrısı her zaman "cache_clear_all ('değişkenleri', 'cache_bootstrap');" bu yüzden bir sonraki isteğin değişkenleri ve önyükleme bilgisini veritabanından tekrar getirmesi gerekecek.
Berdir

1
@Berdir - bu bir şekilde site performansını etkiler mi?
Ek Kosmos

7
Evet, performansı etkileyecektir, cache_bootstrap, yalnızca zamanla yeniden oluşturulacak, örneğin kanca uygulamaları gibi birden fazla önbellek içerir. Alternatif çözümler, içeriği ön sayfada dinamik olarak görüntülemek için Görünümler, Paneller veya özel bir modül kullanıyor olabilir. Örneğin, bir içerik türünün en son düğümünü göstermek için bir görünüm oluşturabilir ve daha sonra site_frontpage'i gösterebilirsiniz.
Berdir

Bunu bir hook_installveya hook_update_Ndaha sonra kullanmak iyi olmalı.
leymannx

16

Bir modül (Orada Frontpage anonim kullanıcılar ve doğrulanmış kullanıcılar için farklı bir ön sayfasını ayarlamak için izin verir ben tutulan biridir). Modül, üçüncü taraf modüllerin, kullanıcıların yönlendirildiği sayfayı değiştirmesine veya sayfayı oluşturmak için kullanılan yapı dizisini değiştirmesine olanak tanır. Üçüncü taraf modülleri, yönlendirme URL’sini yalnızca Adsız veya kimliği doğrulanmış ön sayfa Ön Sayfa modülüne ayarlanmadığında veya düğüm yükleme sırasında bir hata olduğunda değiştirebilir; modül ileride üçüncü taraf modüllerin kullanıcıları seçtikleri belirli bir sayfaya yönlendirmelerine izin verecek şekilde değiştirilecektir.

Alternatif olarak, Ön Sayfa tarafından kullanılana benzer bir kod kullanarak, kullanıcıları belirli ölçütlere dayanarak belirli bir sayfaya yönlendiren özel bir modül oluşturabilirsiniz.

Modül hook_menu () işlevini yerine getirmeli ve örneğin http://example.com/frontpage ; Bu menü öğesinin sayfa geri çağrısı bir koşulun doğrulanmış olduğunu doğrulamalı ve ardından kullanıcıları belirli bir URL'ye yönlendirmelidir.

Kod iskeleti, aşağıdakine benzer bir şey olabilir:

/**
 * Implements hook_menu().
 */
function mymodule_menu() {
  $items = array();

  $items['frontpage'] = array(
    'page callback' => 'mymodule_frontpage_view',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK,
  );

  return $items;
}

function mymodule_frontpage_view() {
  // These variables can be useful to redirect the users
  // to specific pages, basing on the language currently set for
  // the content, or on the fact the user is logged in.
  $langcode = $GLOBALS['language_content']->language;
  $logged_in = user_is_logged_in();

  if ($condition) {
    drupal_goto($redirect);
  }
}

9

Panelleri kullanmak çok esnek bir çözüm olacaktır . Herhangi bir kriter temelinde farklı gösterimler sunulabilir ve bir UI ile kontrol edilir.


4

Böyle düzelttim:

/**
 * Implements hook_page_alter.
 * @param type $page
 */
function my_module_page_alter(&$page){
  global $user;

  $is_fron_page = drupal_is_front_page();
  if($is_fron_page && $user->uid){
    $redirect = 'users/'.$user->name.'/my-argument';
    drupal_goto($redirect);
  }
}

1
Merhaba. Kodunu paylaşman çok hoş. Kodunuzun tam olarak nasıl çözüldüğünü bize söylerseniz daha iyi olur. Biliyorsunuz, başkalarına akıl yürütmek, bir nedenden ötürü kopyala yapıştırılmış kodun onlar için işe yaramayacağını takip edebilir.
Mołot

@molot - özel modülünüze eklenmesi gereken bu yöntem, bazı koşullara bağlı olarak kullanıcıları yönlendirmek için uygular hook_page_alterve kullanır (bu durumda $ drupal_is_front_pagedrupal_goto
user-

@commonpike bunu anlamadığımdan değil. Benim yorumum, genel olarak cevabın kalitesi ve özellikle de yeni, deneyimsiz kullanıcılar için kullanılabilirliği hakkındaydı.
Moot

1

Kurallar modülü "programlama" frontpage ayarlamak için de kullanılabilir.

Aslında oluşturulacak kural, Redirect'te oturum açan (kimliği doğrulanmış) kullanıcıların, kuralları veya php kodunu kullanarak farklı bir ön sayfaya verdikleri cevabın bir çeşididir .

Ve isteğe bağlı olarak onu Bayrak modülüyle birleştirmek , kullanıcı deneyimini daha da artırabilir. Örneğin, giriş yapan kullanıcılar için hangilerinin “favorileri” olarak gördüklerini gösteren olası ön sayfalardan hangisi olduğunu belirtmelidir.


1

Bunu global olarak programlı olarak ayarlamayı düşünüyorsanız, değişkeni settings.php dosyasında ayarlayabilirsiniz:

$conf['site_frontpage'] = 'some/custom/path';

0

Hook_url_outbound_alter () değişkenini ayarlayarak ana sayfa düğümünü (alt etki alanlarında) değiştirdim

variable_set('site_frontpage', $value);

Ve sonra yönlendirme:

$_GET['q'] = 'node/' . $domain_homepage_node_id;
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.