taltos képe

Kimásoltam a commentedből a forrást (a template.php és a search_page.tpl.php), de a hiba ugyanaz volt, ami nálam is. teljesen fehér oldal. (ezt nem tudom hogy leírni most hirtelenjében. Nem a középső sidebarok mellett elhelyezkedő rész volt üres oldal, hanem az egész oldal üres. Egy www.valami.hu oldalra egy teljesen fehér oldalt ad) Dehát végülis én is ezt csináltam, a template.php-ban nekem teljesen ugyanez volt, amit te írtál, a search_page.tpl.php -ban pedig egy "valami" string a "OK, ez rendben." string helyett.

De persze nem ragaszkodok a külön file-os megoldáshoz, csupán a függvényfelülírás módját szeretném elsajátítani. Szóval megcsináltam azt, amit a kommented második felében írtál, aminek az lett az eredménye, hogy a drupal főoldalán ez jön be:

function phptemplate_search_item($item, $type) { 
??$output = ' <dt class="title"><a href="'. check_url($item['link']) .'">'. check_plain($item['title']) .'</a></dt>'; 
??$info = array(); 
??if ($item['type']) { 
????$info[] = $item['type']; 
??} 
??if ($item['user']) { 
????$info[] = $item['user']; 
??} 
??if ($item['date']) { 
????$info[] = format_date($item['date'], 'small'); 
??} 
??if (is_array($item['extra'])) { 
????$info = array_merge($info, $item['extra']); 
??} 
??$output .= ' <dd>'. ($item['snippet'] ? '<p>'. $item['snippet'] .'</p>' : '') .'<p class="search-info">'. implode(' - ', $info) .'</p></dd>'; 
??return $output; 
}
 
function phptemplate_search_page($results, $type) { 
??$output = '<dl class="search-results">'; 
 
??foreach ($results as $entry) { 
????$output .= theme('search_item', $entry, $type); 
??} 
??$output .= '</dl>'; 
??$output .= theme('pager', NULL, 10, 0); 
 
??return $output; 
}
...

és természetesen innen folytatódik a jó oldal a DOCTYPE-okkal és egyebekkel(ez most a forrás volt természetesen), valamint ha a keresőmezőbe írok valamit és entert nyomok, akkor:

function phptemplate_search_item($item, $type) { 
??$output = ' <dt class="title"><a href="'. check_url($item['link']) .'">'. check_plain($item['title']) .'</a></dt>'; 
??$info = array(); 
??if ($item['type']) { 
????$info[] = $item['type']; 
??} 
??if ($item['user']) { 
????$info[] = $item['user']; 
??} 
??if ($item['date']) { 
????$info[] = format_date($item['date'], 'small'); 
??} 
??if (is_array($item['extra'])) { 
????$info = array_merge($info, $item['extra']); 
??} 
??$output .= ' <dd>'. ($item['snippet'] ? '<p>'. $item['snippet'] .'</p>' : '') .'<p class="search-info">'. implode(' - ', $info) .'</p></dd>'; 
??return $output; 
}
 
function phptemplate_search_page($results, $type) { 
??$output = '<dl class="search-results">'; 
 
??foreach ($results as $entry) { 
????$output .= theme('search_item', $entry, $type); 
??} 
??$output .= '</dl>'; 
??$output .= theme('pager', NULL, 10, 0); 
 
??return $output; 
} 

Ez forrás is volt egyben, és a kimenet is. (mármint ami a böngészőben megjelenik.)

Nekem első látásra úgy tűnik, mintha nem futtatná le a függvényeket, hanem bemásolja csak simán a forrásba?

Lehet hogy ez buta kérdés, de kell valamit még ezeken a függvényeken kívül írni a template.php fileba? (márimnt a tetejére deklarációkat vagy akármit) Mert nekem csak ezek a függvények vannak benne, enélkül üres.

Ha kitöröltem a kódból azokat a fura kérdőjeleket (nem tudom mi lehet Alma+C / Alma+V -ztem), akkor sem javult meg. Bekapcsoltam a TextWrangler -ben a láthatatlan karakterek kijelzését, és sehol nincs benne már. Az eredmény ugyanaz furcsa kérdőjel szimbólumok nélkül.

0
0
mapdesign15 képe

Hello!

Nekifogtam egy modulnak, ami a fent leírtakat megtudná csinálni. Már csak egy problémám van: Nem tudom kompatibilisen kiszedni sehogy összehasonlítani a CCK mező értékét.

Íme a kód:

<?php
//$Id: ca_cck.module,v 1.4 2011/08/05 13:19:58 daniel Exp $
 
/**
 * Implements of hook_ca_condition()
 */
function ca_cck_ca_condition() {
    $conditions['ca_cck_check_field'] = array(
	'#category' => t("Order: Product"),
	'#title' => t("Megállapítás CCK mező alapján"),
	'#callback' => 'ca_cck_check_field',
	'#arguments' => array(
	    'order' => array(
		'#entity' => 'uc_order',
	    ),
	),
    );    
    return $conditions;
}
 
/**
 * Implements of hook_form()
 * @param $form_state (array)
 * @param $settings (array) settings from the ca condition
 */
function ca_cck_check_field_form($form_state, $settings = array()) {
    // Available fields
    $sql = db_query("SELECT * FROM {content_node_field_instance} WHERE `widget_active` = 1;");    
    while($row = db_fetch_object($sql)) {
	$options[$row->field_name] = $row->label . ' ['.$row->field_name.'] ('.$row->widget_type.')';
    }
 
    // Form
    $form['cck_field'] = array(
	'#type'          => 'select',
	'#title'         => t('CCK mező'),
	'#options'       => $options,
	'#default_value' => $settings['cck_field'],
	'#description'   => t('Válaszd ki azt a CCK mezőt, amelyet összeszeretnél hasonlítani.'),
	'#required'      => true,
    );
 
    $form['compare_action'] = array(
	'#type'		 => 'select',
	'#title'	 => t('Összehasonlítás módja'),
	'#options'	 => array(
				0 => '==', 1 => '!=',
				2 => '>',  3 => '<',
				4 => '=>', 5 => '=<',
	),
	'#default_value' => $settings['compare_action'],
	'#required'	 => true,
    );
 
    $form['needed_value'] = array(
	'#type'		 => 'textfield',
	'#title'	 => t('Szükséges érték'),
	'#default_value' => $settings['needed_value'],
    );
 
  return $form;
}
 
/**
 * Implements of hook_check_field()
 * @param $order (object) uc_order order object
 * @param $settings (array) settings from the ca condition
 */
function ca_cck_check_field($order, $settings) {
 
    $this	= $settings['needed_value'];
    $bythis	= ''; // ???  Ide kellene valahogy bejuttatni azt a drága CCK
		      // mező értékét. A szívás az, hogy az $order-ből nem
		      // tudok kiszedni semmit, a $settings pedig csak az
		      // alapértelmezett értékeket tartalmazza.
 
    switch($settings['compare_action']) {
	case 0: if ($this == $bythis) { return true; } break;
	case 1: if ($this != $bythis) { return true; } break;
	case 2: if ($this >  $bythis) { return true; } break;
	case 3: if ($this <  $bythis) { return true; } break;
	case 4: if ($this => $bythis) { return true; } break;
	case 5: if ($this =< $bythis) { return true; } break;	
    }
 
    return false;
}

Íme az info fájl:

; $Id: ca_cck.info,v 1.1 2011/08/05 13:19:34 daniel Exp $
 
name = UC CCK Conditional Actions
description = "Provides conditional actions conditions to cck fields"
package = "Ubercart - extra"
core = 6.0
dependencies[] = uc_catalog
version = "6.x-1.x-dev"
core = "6.x"

Remélem lesz valakinek valami jó ötlete. :-)

0
0
Sk8erPeter képe

Az előbb linkelt cikk, a hook_ds_fields_info() tanulmányozása, meg persze szantog sok tanácsa rengeteget segített abban, hogy ezek után mindössze 10 perc volt működésre bírni, amit szerettem volna, mindenféle csúnya textarea-kba behányt PHP-kódok nélkül, szépen fájlban tartva a kódot.

Nálam egy Get Locations field térképen bejelölt koordinátáinak kinyerése volt a cél egy adott bundle-nél (itt: mytestbundle), minden view mode-ra érvényesen (*), annak érdekében, hogy ezt egy külön GPS-mezőként is meg tudjam mutatni, és oda húzhassam a "Manage display" fülön, a Display Suite régiói között, ahol szükségem van rá. Természetesen ellenőrizni kellett, hogy egyáltalán ez a mező be van-e állítva, vagy nincs.
Figyelem, az alábbi kódban a mező nyelvsemlegessége "be van drótozva" (lásd 'und' kulcs), tehát amennyiben valakinél a mezőfordítás be van állítva az adott mezőre, akkor ez a kód pici átalakításra szorul, tehát csak szemléltető jelleggel mutatom meg, de talán másnak is hasznos lehet. A lényeg látható belőle: az entitás egyéb mezőinek értéke is elérhető.
Természetesen a MYMODULE helyettesítendő a saját modulunk nevével.

  1. /**
  2.  * @see http://previousnext.com.au/blog/creating-custom-display-suite-fields-or-how-i-learned-stop-worrying-and-use-hookdsfieldsinfo
  3.  */
  4.  
  5. /**
  6.  * Implements hook_ds_fields_info().
  7.  * @see http://drupalcontrib.org/api/drupal/contributions!ds!ds.api.php/function/hook_ds_fields_info/7
  8.  */
  9. function MYMODULE_ds_fields_info($entity_type) {
  10. $fields = array();
  11.  
  12. $fields['node']['mytestbundle_gps'] = array(
  13. // title: title of the field
  14. 'title' => t('GPS'),
  15. // type: type of field
  16. // - DS_FIELD_TYPE_FUNCTION : calls a custom function.
  17. 'field_type' => DS_FIELD_TYPE_FUNCTION,
  18. // ui_limit : only used for the manage display screen so
  19. // you can limit fields to show based on bundles or view modes
  20. // the values are always in the form of $bundle|$view_mode
  21. // You may use * to select all.
  22. // Make sure you use the machine name.
  23. 'ui_limit' => array('mytestbundle|*'),
  24. // function: only for DS_FIELD_TYPE_FUNCTION.
  25. 'function' => 'MYMODULE_mytestbundle_ds_field_gps',
  26. );
  27.  
  28. if (isset($fields[$entity_type])) {
  29. return array($entity_type => $fields[$entity_type]);
  30. }
  31. return array();
  32. }
  33.  
  34. /**
  35.  * Generate GPS coordinates as a DS field
  36.  * Example: 46° 2' 27.24" N 18° 40' 37.2" E
  37.  */
  38. function MYMODULE_mytestbundle_ds_field_gps($field, $title = NULL){
  39. $output = '';
  40.  
  41. if(isset($field['entity']->field_teststuff_on_the_map['und'][0])){
  42. $on_the_map_getlocations_field_data = $field['entity']->field_teststuff_on_the_map['und'][0];
  43.  
  44. if(isset($on_the_map_getlocations_field_data['latitude']) && isset($on_the_map_getlocations_field_data['latitude'])){
  45. $output .= theme('getlocations_latitude_dms', $on_the_map_getlocations_field_data);
  46. $output .= ' ';
  47. $output .= theme('getlocations_longitude_dms', $on_the_map_getlocations_field_data);
  48. }
  49. }
  50.  
  51. return $output;
  52. }
2
0

Származtatott smink nem működik IE-ben

Paal képe

Üdv,

A panels_960gs sminkből (az most lényegtelen, hogy dev) származtattam le egy sajátot "ropte" néven.

FF-ban, Chrome-ban teljesen jól működik, de IE(7)-ben a basic theme jelenik meg.
Már minden szóba jöhető dolgot kipróbáltam. Cache táblák ürítése, böngésző cache ürítése, stb. A vicc az, hogy a forrásban látszik a kérdéses ropte.css és tabs.css, amiben felül definiálom többek között a #body background-ot (és egyebet). De mintha ott sem lenne. Kipróbáltam egy másik gépen (IE8), és ott is rosszul - a basic smink - jelenik meg.

Fórum: 
Drupal verzió: 

Egy external javascript meghívása nem lehetséges, miért?

tiburi képe

Sziasztok,

az egyik oldalba egy önálló felületű és megjelenésű search block-ot készülök betenni: ezt: http://tympanus.net/codrops/2013/06/26/expanding-search-bar-deconstructed/
CSS injectorral a stílusok mennek, két pici script feltöltve, amelyek a block-ból html-el meghívva tökéletesen mennek.

Drupal verzió: 
Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
Webappz képe

A tegnapi konferencián bemutattam ennek a modulnak a megoldott verzióját, íme a kódok.
A jquery_teszt.module:

 <?php
/**
 *  @file jquery_teszt.module
 *  @desc Pelda modul 
 *  @author Webappz
 * /
 
 
/** hook_menu implementálása **/
function jquery_teszt_menu() {
  $items['jquery_teszt'] = array (
    'title' => 'Jquery teszt',
    'page callback' => 'jquery_teszt_page',
    'access arguments' => array('access content'),
  );
  return $items;
}
 
/** hook_menu implementálása **/
function jquery_teszt_page() {
 
  /** A JS fájl hozzáadása **/  
  drupal_add_js(drupal_get_path('module', 'jquery_teszt').'/jquery_teszt.js');
  /** Az űrlap generálása és megjeleníthetővé tétele  **/
  return drupal_get_form('jquery_teszt_form');
 
}
 
/** Űrlap beállítása **/
function jquery_teszt_form() {
   $form['jquery_teszt'] = array(
      '#type' => 'fieldset',
      '#title' => 'JQuery teszt mező',
      '#collapsible' => TRUE,
      '#collapsed' => FALSE,
   );
   $form['jquery_teszt']['teszt_radio'] = array(
      '#type' => 'radios',
      '#title' => 'teszt radio doboz',
      '#default_value' => 0, //az elso elem lesz az alapertelmezett
      '#options' => array('alma', 'banan', 'citrom'),
   );
   $form['jquery_teszt']['teszt_select'] = array(
      '#type' => 'select',
      '#title' => 'teszt select doboz',
      '#default_value' => 0,
      '#options' => array('0', '1', '2'),
   );
   return $form;
}
?>

A jquery_teszt.info

 ; $Id$
name = jQuery Teszt
description = jQuery példa modul.
core = 6.x
 
version = "6.x-0.1"
core = "6.x"
project = "jquery_teszt"

A jquery_teszt.js a jQuery kód

 $(document).ready(function(){  
 
    $(":radio").click(function(){      
      if ($("input:radio").attr("name") == 'teszt_radio') {
      var radioindex = $(this).val();
 
      $("option").filter(function (selectindex) {
                  return selectindex == radioindex;
                })
                 .attr('selected', 'selected');
 
    }});   
 
    $("select").change(function(){
      if ($("select").attr("name") == 'teszt_select') {
      var selectindex = $(this).val();	  
 
	  $("input:radio").filter(function (radioindex) {
                  return radioindex == selectindex;				  
                })
                .attr('checked', 'checked');	  			
    }});
 
  });
0
0

Páldi Zoltán

Pasqualle képe

nem irtal Drupal verziot, ugyhogy a valaszom csak Drupal 6-ra vonatkozik.

elso megjegyzesem az lenne, hogy az altalad felvazolt problemahoz szerintem nincs szukseg fejlesztesre mert views modullal megoldhato.

Sajat funkcio ami menupontokat jelenit meg, ahogy en akarom. Nem tul szep, de nekem ennyire volt szuksegem. Egy sajat menu elso szintjet (plusz a gyoker menu pontot) a $sidebar_links valtozoba, mig a masodik szintet a $tab_links valtozoba menti.

function render_my_menu(&$sidebar_links, &$tab_links) {
  // Get the whole menu tree.
  $tree = menu_tree_all_data('mymenu');
  $sidebar_links = array();
 
  // Tree root key.
  $key = key($tree);
  $item = $tree[$key];
  $l = $item['link']['localized_options'];
  $l['href'] = drupal_get_normal_path($item['link']['href']);
  $l['title'] = $item['link']['title'];
  $sidebar_links[$item['link']['href']] = $l;
 
  // Skip the top level.
  $tree = $tree[$key]['below'];
 
  // Read the first level.
  foreach ($tree as $key => $item) {
    if (!$item['link']['hidden']) {
      $l = $item['link']['localized_options'];
      $l['href'] = drupal_get_normal_path($item['link']['href']);
      $l['title'] = $item['link']['title'];
      if ($l['href'] == $_GET['q']) {
        $tree2 = $tree[$key]['below'];
      }
      $sidebar_links[$item['link']['href']] = $l;
    }
  }
 
  // Read the second level.
  $tab_links = array();
  if (!empty($tree2)) {
    foreach ($tree2 as $item) {
      if (!$item['link']['hidden']) {
        $l = $item['link']['localized_options'];
        $l['href'] = drupal_get_normal_path($item['link']['href']);
        $l['title'] = $item['link']['title'];
        $tab_links[$item['link']['href']] = $l;
      }
    }
  }
  $sidebar_links = theme('links', $sidebar_links, array('class' => 'sidebar-menu'));
  $tab_links = theme('links', $tab_links, array('class' => 'tabs'));
 
}

tehat ha a menud igy nez ki:
valami
--szezon 0708
----merkozes 080225
--szezon 0809
----merkozes 090126
----merkozes 090215

akkor ha azon az oldalon allsz ami a "szezon 0809" menupothoz kapcsolodik akkor a
$sidebar_links-ben a "valami", "szezon 0708", "szezon 0708"
$tab_links-ben "merkozes 090126", "merkozes 090126"
lesz.. Ezt aztan mar ugy jelenited meg ahogy akarod..

a kodban a mymenu-t le kell cserelned a sajat menud nevere. Ha a menut nem programkoddal hozod letre hanem a Drupal admin feluleten akkor "menu-valami" lesz a menu neve..

0
0
pp képe

Preprocess-t tipikusan akkor használunk, ha valami nincs, vagy nem úgy van ahogyan nekünk kell. Mégpedig ez azért van mert az adott modul nem úgy és azt pakolta a sminkbe amit, mert hát nem tudhatja a modul írója nekünk mire lesz majd szükségünk. De itt Te írod a modult, tehát nincs szükséged preprocessre. A másik ami engem zavar, hogy - véleményem szerinte - bonyolult adatszerkezetet adsz át a sablon fájlnak. Pedig ott csak szövegeket kéne kiíratni, nem pediglen ciklusokat futtatni meg ilyenek. Az tipikusan függvénybe való dolog. Ezzel kb jelezzük a smink készítőjének, hogy ebbe csak akkor nyúlj bele ha nagyon kell és értesz hozzá, mert itt nem egyszerű kopipésztről van szó. Prábáld ezt:

/*
    Implementation of hook_block().
*/
function hu_forex_block( $op = 'list', $delta = 0, $edit = array() ) {
  if ($op == 'list') {
    $block = array();
    $block[0]['info'] = t( 'Hungarian forex data of MNB' );
    return $block;
  }
  else if ( $op == 'view' ) {
    $block['subject'] = variable_get('hu_forex_block_title', t( 'Forex:' ) );
    $block['content'] = hu_forex_block_content();
    return $block;
  }
}
 
 
/*
    Implementation of hook_theme().
*/
function hu_forex_theme() {
 
  return array(
    'hu_forex_block' => array(
      'arguments' => array('content' => NULL),
    ) );
}
 
 
function _hu_forex_xml2assoc($xml) {
    $tree = null;
    while($xml->read())
        switch ($xml->nodeType) {
            case XMLReader::END_ELEMENT: return $tree;
            case XMLReader::ELEMENT:
                $node = array('tag' => $xml->name, 'value' => $xml->isEmptyElement ? '' : _hu_forex_xml2assoc($xml));
                if($xml->hasAttributes)
                    while($xml->moveToNextAttribute())
                        $node['attributes'][$xml->name] = $xml->value;
                $tree[] = $node;
            break;
            case XMLReader::TEXT:
            case XMLReader::CDATA:
                $tree .= $xml->value;
        }
    return $tree;
}
 
 
/*
    Implementation of template_preprocess().
*/
function hu_forex_block_content() {
 
      $sClient=new SoapClient("http://www.mnb.hu/arfolyamok.asmx?WSDL");
      $response=$sClient->GetCurrentExchangeRates();
      $xmlstr = '<'.'?xml version="1.0" standalone="yes"?'.'>'.$response->GetCurrentExchangeRatesResult ;
      $xml = new XMLReader();
      $xml->xml( $xmlstr );
      $assoc = _hu_forex_xml2assoc($xml);
      return theme('hu_forex_block', $assoc);
}
 
function theme_hu_forex_block($content) {
  //Ide persze valami normális megjelenítés kell majd
    return print_r($content, TRUE);
}

A megjelenítést még meg kell faragnod, meg nem ártana egy kis gyorstárazás, ha megdosolják a szervered, te ne dosold tovább az mnb-t. ;)
pl. percenként szerintem elég lenne ezt letölteni.

pp

0
0
szantog képe

No, én ezt csináltam:
sortörés

  1. function MODULE_node_presave($node) {
  2. $body_langcode = field_language('node', $node, 'body', $node->language);
  3. $image_langcode = field_language('node', $node, 'field_images', $node->language);
  4. // Save the summary value to the database. Drupal doesn't do it default,
  5. // therefore [node:summary] token is always empty, if summary is not set
  6. // directly in node edit form.
  7. if (isset($node->body[$body_langcode])) {
  8. //$node->body[$body_langcode][0]['summary'] = text_summary($node->body[$body_langcode][0]['value']);
  9. }
  10.  
  11. // Make some metatag defaults:
  12. // @todo Change all of these to custom tokens!!
  13. $summary = '';
  14. $image_url = '';
  15. if (isset($node->body[$body_langcode])) {
  16. // Make a default 120 char length summary, without any html.
  17. $summary = text_summary(strip_tags($node->body[$body_langcode][0]['value']), NULL, 120);
  18. }
  19. if (isset($node->field_images[$image_langcode])) {
  20. $image = file_load($node->field_images[$image_langcode][0]['fid']);
  21. $image_url = file_create_url($image->uri);
  22. }
  23. if (isset($node->metatags)) {
  24. $node->metatags['description']['value'] = $summary;
  25. $node->metatags['og:description']['value'] = $summary;
  26. $node->metatags['og:image']['value'] = $image_url;
  27. }
  28. }

Az elején van egy kikommentezett rész, aminek az lett volna a lényege, hogy mekkora truváj már, hogy megcsinálom előre a tokeneknek a summary értéket. Ezzel nem volt gond addig, amíg újra nem szerkesztettem a nodeot, és akkor ott volt külön a summary mező, a node formot meg nem akartam emiatt szétgányolni.

Amúgy ez sem a legszebb megoldás, szépen kinyírjuk vele a metatag ui bizonyos beállításait + űt kell hajtani node_saveen az érintett tartalmakat.
Inkább saját tokent kéne alá varázsolni, amibe már azt rakunk, ami csak kell - erről a summary dologról van ám egy gumiissue a dorgon.

1
0

----
Rájöttem, miért kérdezek olyan ritkán a drupal.hu-n. Amíg szedem össze az infokat a kérdéshez, mindig rájövök a megoldásra.

ahah probléma

quick képe

Csináltam egy formot ahah-val

function lista(&$form_state = NULL) {
  $lista_adat = array();
  $temp = explode("/", $_GET['q']);
  for($i = 2; $i < count($temp); $i++){
    $tmp = explode('+', $temp[$i]);
    $lista_adat[$tmp[0]] = $tmp[1];
  }
  if(user_access('access content')){
    $ret = drupal_get_form('hivasok_kivalasztasa');
  }
  return $ret;
}
 
function kivalasztas(&$form_state = NULL) {
 $form = array();
  $form['#attributes']['enctype'] = 'multipart/form-data';
  $form['adatok']  = array(
    '#type'        =>'fieldset',
Drupal verzió: