edgarpe képe

Több megoldás is van, mint általában a Drupalban :)

Egy csúnya hekk megoldás, valahogy így:

function converter_all() {
  $form = drupal_get_form('converter_form');
 
  $output = '';
  $output .= '<div class="converer_outer">'
  // ... építgeted az output-ot ...
  $output .= drupal_render($form['egy_mezo']);
  $output .= drupal_render($form['masik_mezo']);
  // ... építgeted az output-ot ...
  $output .= drupal_render($form); // a form maradék részét is hozzáadod és lezárod.
 
  return $output;
}

Ennél szebb, ha az $output építgető függvényt egy theme hook-ként regisztrálod és függvényben vagy tpl.php template fájlban valósítod meg.
Ez valahogy így nézne ki:

function converter_all() {
  $form = drupal_get_form('converter_form');
 
  return theme('converter_form_render', $form);
}
function converter_theme() {
  $hooks['converter_form_render'] = array(
    'template' => 'converter-form-render', 'arguments' => array('form' => NULL)
  );
  return $hooks;
}

És a converter-form-render.tpl.php-ben valósítod meg a form-ot HTML-jét, benne ilyenekkel:
 print drupal_render($form['egy_mezo'])

Valami ilyensmi, bíztos van elgépelés a fentiekben, de elvi síkon jó :)
A theme neve azért lett convereter_form_render mert converter_form nevű függvényed már van és zavaró lenne.

0
0
hosszu.kalman képe

Azt, hogy modulból hozod létre a blokkokat az szerintem jó dolog, viszont a különböző funkciót ellátó blokkoknak érdemes külön blokkot készíteni (modulból). Tehát ha van mondjuk egy blokkod amiben egy kategória hírei vannak, akkor jó lehet ha a kategóriától függ hogy mi jelenik meg benne, de az eseményeket már ne rakd bele. Én a helyedbe létrehoznék külön egy események blokkot is.

A tartalmát érdemes sminkelhetővé tenni és tpl fájlba kirakni (kevesebb memóriát eszik, jobban elkülönül), de szerintem ezért nem érdemes a theme_block() fgv-t felülvágnod a hook_theme_registry_alter-rel, elég szerintem kb ennyi:

/**
 * Implementation of hook_theme().
 * 
 * Define the following templates:
 *  - mymodule_news_block
 *  - mymodule_events_block
 *
 * @return Array of defined theme functions
 *
 * @see mymodule-news-block.tpl.php
 * @see mymodule-events-block.tpl.php
 */
function mymodule_theme($existing, $type, $theme, $path) {
  return array(
    'mymodule_news_block' => array(
      'arguments' => array(
        'title' => NULL,
        'body' => NULL,
        'link' => NULL,
      ),
      'template' => 'mymodule-news-block',
      'path' => drupal_get_path('module', 'mymodule') . '/theme',
    ),
    'mymodule_events_block' => array(
      'arguments' => array(
        'title' => NULL,
        'body' => NULL,
        'link' => NULL,
      ),
      'template' => 'mymodule-events-block',
      'path' => drupal_get_path('module', 'mymodule') . '/theme',
    ),
  );
}

Két template fájlod lesz így, külön lehet formázni a híreket és az eseményeket is.

0
0
kalmarr képe

NEEEM csak működöt :)

küldöm amim van.

mymodule.info

;$Id$
name = Iframe CSS
description = "Iframe a CSS-t node/%/delete/iframe útvonalon lehet törölni."
package = mymodule
files[] = mymodule.module
core = 7.x
version = "7.x-0.1"
core = "7.x"
project = "mymodule"
;dependencies[] = autoload
;php = 5.2

mymodule.css

@charset "utf-8";
/* CSS Document */
 
body {
    background: #17293D;
	color: red;
}
 
#teszt {
color: red;
 
}

mymodule.module

<?php
// $Id$
/**
* Implements hook_preprocess_page().
*
* Removes unneeded cruft from 'mycontenttype' node deletion form's page.
*/
/**/
 
 
function mymodule_init() {
  if (arg(0) == 'node' && is_numeric(arg(1)) && arg(2) == 'iframe') {
    drupal_add_css(drupal_get_path('module', 'mymodule') . '/mymodule.css');
	include('/page--iframe.tpl.php');
  }
}
?>

Amit szeretnék, hogy a már fentebb leírt page--iframe.tpl.php nak adja át az adott oldal tartalmát, pl: webform nál (tartalom és kérdőív tartalom) az oldal sminkje (menük, stb.) nélkül. Így be tudom szúrni csak azt az egy oldalt egy másik site tartalmába. Annak érdekében, hogy ha klónozok oldalakat, akkor egy adatbázisba tudjak adatokat be küldeni és ne kelljen mindenhova ugyan azt a webform-ot elkészítenem. Enny... :)

Remélem most már 100%-san sikerült átadnom a problémámat.

Előre is köszönöm!

KALMI

0
0
Sk8erPeter képe

most látom, hogy az eredeti hozzászólásodban éppen a theme_ds_regions() függvényt említed, amit most akartam javasolni... akkor viszont nem értem, mi a probléma!
Azt írod, hogy minden frissítésnél felülíródik... dehát mióta módosítjuk a theme_ függvényeket VAGY BÁRMI MÁST a modul kódjában?? Ahogy core-t sem hekkelünk, úgy contrib modulokat sem, csakis végszükség esetén, de most a legrosszabb esetet említetted, mert a theme_ függvényeknek épp az a lényege, hogy saját sminkből felüldefiniálhatók!

kimásolva az eredeti hozzászólásodból:

  1. function SAJATSMINKEDNEVE_ds_regions($object_display, $module) {
  2. $output = '';
  3.  
  4. foreach ($object_display->themed_regions as $region_name => $region_data) {
  5. if ($region_name == "left") {
  6. $output .= '<div class="left-right-region-container">';
  7. }
  8. // ... sok-sok sor - a függvény eredeti kódja
  9. if ($region_name == "right") {
  10. $output .= '</div>'; // end of div class="left-rigth-region-container
  11. }
  12. }
  13.  
  14. return $output;
  15. }

Nyilván SAJATSMINKEDNEVE helyettesítendő a saját sminked nevével... és a saját sminked template.php fájljába pakold!

Alapszabály, hogy ha már regexppel kell legenerált outputot módosítani, akkor valamit rosszul csinálsz... :)

1
0
aboros képe

lörnin' báj duin, esz déj széj. ;)

még mindig nem világos, hogy mi okod volt arra, hogy olyan modult írj, ami saját maga definiál egy tartalom típust, mikor ezt cckval is megteheted és még akkor is fennál annak a lehetősége, hogy a típust a saját modulod babrálja. (plusz minden cck jóságot is használhatsz. semmi értelme saját modulban node typeot csinálni szerintem)

mindegy is.
sminkben is meg lehet ezt csinálni, de most az is mindegy, te modulban akarod. maradjak fókuszált ;)

nem volt energiám csinálni egy modult, ami saját típust állít elő és a hook_view() -t használja, úgyhogy a hook_nodeapi() -t használom és azt figyelem, hogy van e upload modullal feltöltött adat, ha igen, akkor adok egy linket, ami a $node->content elején fog megjelenni. ez egy teljesen egyszerű html anchor lesz, egy id -re fogok hivatkozni, hogy melyikre, azt könnyű kideríteni: http://img.skitch.com/20091123-ewhtx3ci6inx4wiufqg3j7fx4f.jpg
ugyan ezt kell csinálnod a hook_view() -ban is.
a modulom neve anchor_to_attachments_example

.info file:

name = 'Anchor to attachments'
description = 'Example module to show how to provide an anchor to attachments table of upload.module.'
core = 6.x
version = 6.x-example
package = drupal.hu examples
dependencies[] = upload

.module file:

<?php
function anchor_to_attachments_example_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
	if ($op == 'view') {
		if (!empty($node->files) && $a4) {
			$node->content['files-anchor'] = array(
				'#value' => l(t('Jump to attachments'), '', array('fragment' => 'attachments', 'external' => TRUE, 'attributes' => array('id' => 'files-anchor'))),
				'#weight' => -10,
			);
		}
	}
}
?>

ennek eredménye emitt: http://img.skitch.com/20091123-my95x7yruppfu781w3in4yjb3h.jpg

nincs hook_theme, nincs saját sminkfüggvény, minek az? szépen ezt a kis tömböt amit most a node->content -be varrunk majd a render odaintézi a helyére. -10 a súlya. ez azt jelenti, hogy fixen -10 -re van égetve, úgyhogy amikor a display fields fülön variálod a sorrendeket, akkor ez oda lesz égetve a -10 -re. lehetne mondjuk kombinálni, hogy ahova az upload.module attachments részét súlyozod, oda súlyozzuk a linket, az attachmentset meg átsúlyozzuk 999 -re. :) vagy lehet még lesni más modulokból, hogy hogyan teszik guin súlyozhatóvá a dolgaikat.

ja és persze lehetne még a végtelenbe és tovább ;)
remélem sikerült inspirációt adni.

0
0

-
clear: both;

familyxx képe

Az adatok felvitelét és a lekérdezést is egy általam írt php kód működteti. Ezek szerint ha jól értelmezem, más megoldást kell keresnem.
Írtam php-ban egy kódot, ami a lapozást valósítaná meg, de nem működik. Nem vagyok tapasztalt php programozó, légyszi ha tudtak segítsetek.

#################################################################################
### Ha nincs feltétel ami alapján lekérdezhetne, megjeleníti a kereső-űrlapot ###
#################################################################################
if ((gettype($_POST['megyeszerint'])=="NULL" || $_POST['megyeszerint']=="semmi") && gettype($aktualisOldal=="NULL")){   
 
echo"<table width='400' border='0' align='center'>
	<tr>
		<td><h3 align='center'>SZÁLLÁSHELY KERESÉS</h3>
		</td>
		<td><img src='/karbantart/nagyito.jpg' align='right'>
		</td>
	</tr>
</table><br>";
include("./karbantart/urlap_keres.php");}
#################################################################################
#################################################################################

###################################
### Ha van keresési feltétel... ###
###################################

//Úgy oldom meg, hogy továbblépésnél ne lépjen vissza az első részbe, hogy az url címben újra átadom a feltételeket
 
if (($_POST['megyeszerint']!="" && $_POST['megyeszerint']!="semmi")|| $result!=""){
 
//kapcsolódik a db-hoz
  $kapcsolat = mysql_connect("localhost", "videki_peter", "Koroknai");
  if (!kapcsolat)
    die("Nem lehet csatlakozni a MYSQL kiszolgalohoz");
 
  $adatbazis="videki_proba";
  mysql_select_db($adatbazis) or die ("Nem lehet megnyitni a következö adatbázist: $adatbazis");
 
 
 
//beállítja, hogy milyen feltételek szerint történjen a lekérdezés
 
  if($_POST['megyeszerint']!="semmi") 
  {
    $result.=" and megye='".$_POST['megyeszerint']. "' "; 
  }  
  if($result!="")
  {
    $result=" where ". substr($result,4) ."and stat!='Uj ugyfel'";
  }
 
 
 
//lapozás
 
  //találatok és oldalak száma
  function hanyTalalat($feltetel){
    $lekerdez = "SELECT count(*) FROM szallashely $where";
		$meghiv = mysql_query($lekerdez);
		$row = mysql_fetch_row($meghiv);
		return $row[0];
	}
 
  $lapPerOldal=10;
  $osszesTalalat=hanyTalalat($result);
 
  $oldalakSzama = ceil($osszesTalalat/$lapPerOldal);
 
 
  //aktuális oldal
  if (!isset($aktualisOldal)){
    $aktualisOldal=1;
  }
 
 
  //számok kiíratása
    //ha nincs találat
    if ($oldalakSzama==0){
      echo "Nincs találat<br>";
    }
    //ha csak egy oldal van
    else if ($oldalakSzama==1){
      echo "Találatok száma: 1 találat 1 oldalon<br>";
      echo 1;
    }
    //ha több találat van
    else{
      echo "Találatok száma: $osszesTalalat találat $oldalakSzama oldalon";
      for($i=0; $i<$oldalakSzama; $i++){
          if($i==$aktualisOldal-1){ //így nem lehet az aktuális oldal számára kattintani
            echo $aktualisOldal;
          }
          else{
            echo "<a href=\"6?aktualisOldal=".($i+1)."?result=$result\"><font color=#19528b size=1>".($i+1)."</font></a><font color=#19528b size=1>&nbsp;</font>";
          }
      }
    }
 
    echo "Az aktuális oldal: $aktualisOldal";
 
}
###################################
###################################  

Ez annyit csinálna, hogy kiírja az oldalszámokat és ha pl rákattintok a kettes számra, akkor kíírja, hogy "az aktuális oldal: 2". Az első oldalnál még működik is, de amint a 2-esre kattintok, visszajön a kereső űrlap.
Nem tudom mi lehet a baja, biztos valami olyan dolog amihez nincs megfelelő tudásom. Ezért folyamatosan olvasgatok, tanulgatok, de még nem találtam megoldást.

0
0

Túl hosszú szavak problémája...

simi képe

Sziasztok!

Gondolom sokan találkoztatok már azzal a problémával, hogy a fórumban valaki szándékosan túl hosszú szót ír be, s emiatt szétesik az oldal, kilóg a szó stb....
Talán a következő kis kód meoldást nyújt erre:

//comment.module comment_save függvényében
...
if ($edit['uid'] == $user->uid) {
$edit['name'] = $user->name;
}
...
...//ezt kell beilleszteni

function too_long_word($words){
    $maximumLength = 51;
    $comment=explode(' ',$words);
        foreach($comment as $word){
            if(strlen($word)<$maximumLength) {

Nem értem : Hiba lép fel egy form generálása közben

zsepi képe

Elakadtam egy modul írása közben, mert nem generálódik le normálisan egy form az alábbi tömbből:

Array
(
    [mytinymce2__visibility] => Array
        (
            [#type] => fieldset
            [#title] => Visibility
            [#weight] => 0
            [#collapsible] => 1
            [#collapsed] => 
            [mytinymce2__visibility_rule] => Array
                (
                    [#type] => radios
                    [#title] => Convert elements to TinyMCE editor instances
                    [#weight] => 0
                    [#options] => Array
                        (
                            [0] => on every page except the below listed pages.
                            [1] => on only the below listed pages.
                        )
 
                    [#default_value] => 1
                )
 
            [mytinymce2__visibility_pages] => Array
                (
                    [#type] => textarea
                    [#title] => Pages
                    [#weight] => 1
                    [#default_value] => node/*
user/*
comment/*
                    [#description] => Enter one page per line as Drupal paths. The '*' character is a wildcard. Example paths are '<em>blog</em>' for the blog page and <em>blog/*</em> for every personal blog. <em>&lt;front&gt;</em> is the front page. If the PHP-mode is chosen, enter PHP code between . Note that executing incorrect PHP-code can break your Drupal site.
                )
 
            [mytinymce2__visibility_elements] => Array
                (
                    [#type] => textarea
                    [#title] => Elements to be convert
                    [#weight] => 2
                    [#description] => Enables you to specify a comma seperated list of element's ids which will be rendered using this profile. These elements can be any kind for example textareas or divs.
                    [#default_value] => edit-log,
edit-body
                )
 
        )
 
    [mytinymce2__submit1] => Array
        (
            [#type] => submit
            [#value] => Save the profile's modifications...
            [#weight] => 10001
        )
 
)

az alábbi kóddal (ahol a $form változóban van a fenti tömb):

Tartalmanként különböző háttérkép, sminkfüggetlenül - hogyan?

Boobaa képe

Adott egy reklam tartalomtípus, benne egy field_hatter kötelező, single-value imagefielddel. Feladat: a tartalom hátterének beállítani ezt a képet anélkül, hogy sminkhez nyúlnánk (azaz sminkváltás után is ugyanúgy működjön a dolog). IRC-n kaptam vagy öt embertől segítséget, aminek a lényege a következő:

  1. A modulomban mondjam meg a theme registrynek, hogy a node modul node.tpl.php-ja helyett a saját node-foo.tpl.php-mat szeretném használni:
    /**
     * Implementation of hook_theme().
     */
Drupal verzió: 
Melyik modulhoz, modulokhoz kapcsolódik a téma?: 

%nid megszerzése taxonomy/term/%tid oldalon

aranyozottpatkoszeg képe

Hogyan szerezhetem meg a node id-t a saját filter modulomban?
(Ha a node/* oldalon vagyok, akkor az arg(1) remekül kiadja, de ha pl. a taxonomy/term/%tid oldalon akkor nem.)

A kis mese, hogy miért is kell ez az egész:
Cél: a tartalom törzsébe beszúrni egy-egy kiemelt/kapcsolódó gondolatot/verset/idézetet. (Mint a van. -> Igen, kb. sikerült.)

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