Webform oldal beszúrása másik helyről

kalmarr képe

Sziasztok,

Szeretnék segítséget kérni a következőben.

Van egy Drupal oldal xxx.hu/webform oldalon, ahova be szeretném szúrni az yyy.hu/webform oldalon szereplő webform adatlapját, úgy mintha része lenne az oldalnak (csak az adatlap látszódjon az yyy.hu oldal ne).

A legszebb megoldás pedig az lenne, ha ezt az oldalt pl: lightbox-os megoldásban tudnám beszúrni.

Kérdésem, hogy hogyan lehetne, mit kell keresnem a beszúrandó oldalon?

Segítségeteket előre is köszönöm!

KALMI

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

IFRAME-mel az egész oldalt be tudod szúrni, egy részét sajnos a hagyományos eszközökkel nem lehetséges. És az sem biztos, hogy az oldal üzemeltetője örülne ennek. :)

0
0
kalmarr képe

:)

A másik oldalnak is én lennék az üzemeltetője, csak így látnám egyszerűbbnek a közös adatbázist.
Az Iframe-es megoldást ismerem, pont az a bajom, hogy a teljes oldalt szúrja bele és nem csak azt amit szeretnék.
Ha nagyon akarnám, akkor ezt hogyan lehetne megoldani?

Üdv.

KALMI

0
0
aboros képe

mondjuk node/42 az űrlapod, de te úgy ágyazod iframebe, hogy node/42/iframe. aztán a forrás oldal sminkjében template_preprocess_page -ben figyeled, hogy van e arg(2) es az iframe e és ha igen, adsz neki egy uj template suggestion teszem azt page-iframe.tpl.php ott meg kiszeded a nem kello markupt.

0
0

-
clear: both;

kalmarr képe

Ezt egy kódban is megkaphatnám, hogy jobban megértsem :-)

0
0
aboros képe

elég vaskos mennyiségű dokumentáció lelhető fel a témában, de legyen. sose csináltam konkrétan ilyet, úgyhogy ezt most csak a te kedvedért írtam meg.

template.php

function SMINKNEVE_preprocess_page(&$vars, $hook) {
  if (arg(0) == 'node' && is_numeric(arg(1)) && arg(2) == 'iframe') {
    $vars['template_files'][] = 'page-iframe';
  }
}

page-iframe.tpl.php:

<?php
// $Id: page.tpl.php,v 1.4 2009/07/13 23:52:58 andregriffin Exp $
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php print $language->language ?>" >
  <head>
    <title><?php print $head_title ?></title>
    <?php print $head ?>
    <?php print $styles ?>
    <?php print $scripts ?>
  </head>
  <body>
 
    <!-- Layout -->
    <div class="container"> <!-- add "showgrid" class to display grid -->
      <div id="main">
        <?php print $content ?>
      </div> <!-- /#main -->
    </div> <!-- /.container -->
    <!-- /layout -->
 
  <?php print $closure ?>
 
  </body>
</html>

ez _minden_ nodeot elérhetővé tesz node/%nid/iframe útvonalon. nincs header, logo, sidebarok, footer, semmi nincs, csak maga a page content van. viszont kommentestül. kiindulásnak jó lesz talán, legalábbis az elvet szépen mutatja szerintem.

kódírással, kipróbálással, posztmegírással együtt 17 perc volt. :)

0
0

-
clear: both;

kalmarr képe

Nagyon köszönöm! Hálás vagyok érte, de ....:-)

Még nagyon egyszerű szinten vagyok, ezért értelmezem :)

A logikát így értem, ha "node/*/iframe" iframe címet kap, akkor betölti a "page-iframe.tpl.php" oldalt ahol csak  <?php print $content ?> az oldal tartalma található.

Gondolom, ha van egy letöltött sminkem, akkor beleszúrhatom a function végére szabályosan a Te általad küldött sorokat, ahol van a "function SMINKNEVE_preprocess_page" (kiegészítve a ", $hook"-al)

  if (arg(0) == 'node' && is_numeric(arg(1)) && arg(2) == 'iframe') {
    $vars['template_files'][] = 'page-iframe';
  }

Tesztekésnél, sajnos az eredményem amit kapok (hiba nélkül) az ugyan az, mintha nem tenném oda a "iframe", azaz az oldal tartalma nem változik :(. Nem érzékeli az iframe -et. Nem akarja a betölteni a "page-iframe.tpl.php" oldalt.

Kérdésem, hogy ez Drupal 7-es hiba, vagy valami mást nem jól csinálok-e?

Válaszodat előre is köszönöm!

U.I.
Nem tudom, hogy a teszthez értelmezhető, de ha kicserélem a page--front.tpl.php tartalmát, az általad küldöttre, akkor csak a háttér textura jelenik meg. Ezért gondolok a D6 és D7 re.

0
0
kalmarr képe

Ha ezt a kis segítséget, ha megkaphatnám, akkor nagyon megköszönném. ;-)

0
0
aboros képe

a nyitó témában 6.x coret jelöltél ám meg :)
és mikor új .tpl filet hozol létre, mindenképp törölnöd kell a "theme registry" -t, hogy "észrevegye" a drupal, hogy van az új fileod.

0
0

-
clear: both;

kalmarr képe

Igen valóban :) Az ellenség megtévesztését csináltam. Bocsi.

Menetközben mindent kicseréltem a Drupal 7-re, mert nagyon megtetszett. Mondjuk a Drupal 6.x kód se eset rosszul, mert azzal is sokat segítettél a megértésben. Továbbá, ha megmutatod D7-ben, akkor látni is fogom a különbségeket, ami megint sokat segít :)

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

KALMI

U.I.

Ez hol található -> "theme registry" ;-)

Ki nyomoztam! -> http://drupal.hu/forum/theme-registry

0
0
kalmarr képe

Próbálgatom a dolgot megérteni, de kellene egy kis segítség a függvények leírásában és működésében. Sajnos nem találtam megoldást az api.drupal.org -on sem :(. Nem igazán értem, hogy miért kapok vissza hibaüzeneteket, ha beleszúrom helyesen a "template.php"-ba. Pedig logikailag jónak kellene lennie.

Köszi!

KALMI

0
0
aboros képe

vagy használjam a gondolatolvasó appomat? :) pastebinezzed a kódokat, template.phpt, ilyesmit. milyen saját filejaid vannak hova miket írkáltál be, azt látnom kéne, hogy tudjam miért nem megy.

0
0

-
clear: both;

kalmarr képe

Igazad van :). Bár nem értem, hogy mi befolyásolja még egy Funkció függvény beszúrását. Mi mivel ugorhat össze :). Kíváncsi vagyok a megoldásra nagyon!

Ez a kódja a template.php-nak. Amúgy ez a http://drupal.org/project/bluemasters sablonját toldozgatom foltozgatom.

 
 
/**
 * Override or insert variables into the page template.
 */
function bluemasters_preprocess_page(&$vars, $hook) {
 
  // Prepare header.
  $site_fields = array();
  if (!empty($vars['site_name'])) {
    $site_fields[] = $vars['site_name'];
  }
  if (!empty($vars['site_slogan'])) {
    $site_fields[] = $vars['site_slogan'];
  }
  $vars['site_title'] = implode(' ', $site_fields);
  if (!empty($site_fields)) {
    $site_fields[0] = '<span>' . $site_fields[0] . '</span>';
  }
  $vars['site_html'] = implode(' ', $site_fields);
 
  // Set a variable for the site name title and logo alt attributes text.
  $slogan_text = $vars['site_slogan'];
  $site_name_text = $vars['site_name'];
  $vars['site_name_and_slogan'] = $site_name_text . ' ' . $slogan_text;
 
  if (arg(0) == 'node' && is_numeric(arg(1)) && arg(2) == 'iframe') {
    $vars['template_files'][] = 'page-iframe';
  }
}

Segítségedet, segítségeteket előre is köszönöm! :)

KALMI

0
0
kalmarr képe

Kaphatok egy kis segítséget benne. :-)

Köszönöm!

KALMI

0
0
kalmarr képe

:( sajnos nem jövök rá az egyszerű megoldásra kaphatnék egy plusszos húsvéti segítséget :)

0
0
szantog képe

És te mit tettél két hét alatt, ami közelebb vitt a megoldáshoz? Miknek néztél utána, miket olvastál el? Ha a probléma annyira kritikus, hogy nem lehet tőle haladni, akkor rengeteg idő van szakirodalom böngészésre, két hét alatt pedig alapszintű php tudást fel lehet nyalni.

0
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.

kalmarr képe

Kedves Szantog!

Teljesen igazad van csak, aki kezdő az nem látja a fától az erdőt. Próbáltam több sminkbe is helyettesíteni, de nem jött el a várt eredmény. Gondolom egy vesző vagy egy pont hiányzik a dologból ezért nem látom át.

0
0
vajdasági képe

Lightboxba meg valahogy igy kell tenend ...
<a href="http://www.google.com" rel="lightframe[][Search Google]">Search google</a>

0
0
kalmarr képe

Még az előző lépésnél járok :). Olyan oldal készítése, amin csak a webform van rajta :-)

0
0
Boobaa képe

…hanem egy tartalom törlésének űrlapja, de a következőt csináltam (ráadásul modulban, tehát sminkfüggetlenül):

/**
 * Implements hook_preprocess_page().
 *
 * Removes unneeded cruft from 'mycontenttype' node deletion form's page.
 */
function mymodule_preprocess_page(&$vars) {
  if ((arg(0) == 'node') && (arg(2) == 'delete') && ($vars['node']->type == 'mycontenttype') && (arg(3) == 'iframe')) {
    $vars['page']['sidebar_first'] = '';
    $vars['tabs']['#primary'] = array();
    drupal_add_css(drupal_get_path('module', 'mymodule') . '/mymodule.css');
  }
}

Aboros tanácsára az eredeti oldalkép megmaradt a node/%/delete útvonalon, és a módosított (eltávolított első oldalsávú, eltávolított fülek sorú, tehát – nálam – effektíve csak az űrlapot tartalmazó) oldal a node/%/delete/iframe útvonalon érhető el. Itt természetesen kihasználom a Menu API azon tulajdonságát, miszerint az útvonal végére (majdnem mindig, majdnem) tetszőleges további elemeket fűzhetek, attól még az eredeti page builder (és esetleg form builder, stb.) fut le – a „lényegi” változtatást már maga az előfeldolgozó végzi. Amit meg lusta voltam eltüntetni az előfeldolgozóban a HTML-ből, azt elrejtem a hozzácsapott CSS segítségével. (Ami ugye megintcsak gurányolás, valljuk be, viszont néha sokkal hamarabb adja azt a vizuális eredményt, amit a megrendelő elvár.)

0
0
kalmarr képe

Nagyon köszönöm a segítségedet!

Ha jól értettem, Te egy modult készítettél nekem :). Végül is ez a legtökéletesebb dolog, mert ezt bárhol fel lehet használni és szerintem nem csak nekem lesz erre szükségem :).

Javaslom tedd fel a drupal.org -ra is a modulok közé!

Hiba:

Továbbra sem történik semmi :(. Továbbá az node/%/delete/iframe utvonal a "delete" miatt nem azt jelenti, hogy ki akarom törölni adott oldalt?. Tőlem mindig ezt kérdezi.

Kezdjük az elejéről, hogy biztos egy dologra gondoljunk :).

A modul nekem rendben meg is jelenik a modul hozzáadásnál és hozzá is tudom adni. Tehát amit készítettem elvileg jó.

Ha modul, akkor a következő kötelező file okat kell létre hozni.

A module könyvtáron belül "mymodule" és ebbe tettem a következő fileokat a melléket tartalommal:

mymodule.info

name = mymodule
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"
datestamp = ""

mymodule.module (1:1 ben amit küldtél)

<?php
/**
* Implements hook_preprocess_page().
*
* Removes unneeded cruft from 'mycontenttype' node deletion form's page.
*/
function mymodule_preprocess_page(&$vars) {
  if ((arg(0) == 'node') && (arg(2) == 'delete') && ($vars['node']->type == 'mycontenttype') && (arg(3) == 'iframe')) {
    $vars['page']['sidebar_first'] = '';
    $vars['tabs']['#primary'] = array();
    drupal_add_css(drupal_get_path('module', 'mymodule') . '/mymodule.css');
  }
}
?>

mymodule.css

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

Elvileg, ha most "node/%/delete/iframe" v. "node/%/iframe" útvonalra hivatkozok, akkor a háttérnek kék színűnek kellene hogy legyen? Ha jól értettem....

Ezzel szemben semmi nem történik egyik variációban sem.

Segítségedet előre is köszönöm!

KALMI

0
0
aries képe

Meg tudnád írni, hogy milyen doksikat olvastál a template_preprocess_page() és társaival kapcsolatban?

Az arg(0) == 'node' minek kell, ha egyszer van $node objektum?
A html.tpl.php-t is bütykölni kellene, ha modal ablakba kellene betölteni a tartalmat.

0
0
kalmarr képe

Megmondom őszintén abból indulok ki, amilyen válaszokat kapok. Teljesen sötétben tapogatózok :(. Sajnos még a modul írásoknak az alapjait próbálom megismerni, ezért ha kapok egy választ, akkor elkezdem próbálgatni megérteni, de a teljes összefüggést nem látom át. Tudom, hogy hihetetlen egyszerű dolgok ezek, akkor ha már valaki egyszer megcsinálta. Pl: a smink készítésnél is egyre jobban átlátom a dolgokat, de a modul még távolvannak tőlem. Ezért akaorok ezen is változtatni :)

Nagyon köszönöm a segítségeket amiket küldtök nekem :)

Várom a megoldást a kérdésemre :-)

Üdv.

KALMI

0
0
kalmarr képe

Szia,

Nézegettem a "html.tpl.php" valóban van benne egyedi oldal készítése, de kérdésem, hogy hogyan lehet meghívni? Mi lenne a logikája?

Előre is köszi!

KALMI

0
0
kalmarr képe

Próbálgatom össze rakni magamba a dolgot és a modul használatát és a két javaslatból szeretnék össze rakni egy megoldást.

Minden képen modult szeretnék készíteni, mert valóban ez minden hova jó lesz. Csak az a gondom, hogy nem akar működni.

Modul működése:
Ha /node/%/iframe linkre hivatkozok, akkor arra az oldalra töltsön be egy CSS filet.

Így az jelenhet meg amit szeretnék.

function mymodule_preprocess_page(&$vars) {
if (arg(0) == 'node' && is_numeric(arg(1)) && arg(2) == 'iframe') {
drupal_add_css(drupal_get_path('module', 'mymodule') . '/mymodule.css');
}
}

Kérdésem miért nem müködik a modul, mit hibáztam el?

KALMI

0
0
kalmarr képe

Próbálgatom össze rakni magamba a dolgot és megérteni a modul használatát. Két javaslatból szeretnék össze rakni egy megoldást.

Minden képen modult szeretnék készíteni, mert valóban ez minden hova jó lesz. Csak az a gondom, hogy nem akar működni.

Modul működésének lényege:
Ha /node/%/iframe linkre hivatkozok, akkor arra az oldalra töltsön be egy CSS filet.

Így az jelenhet meg amit szeretnék.

function mymodule_preprocess_page(&$vars) {
if (arg(0) == 'node' && is_numeric(arg(1)) && arg(2) == 'iframe') {
drupal_add_css(drupal_get_path('module', 'mymodule') . '/mymodule.css');
}
}

Hiba: nem történik semmi :( (nincs hiba üzenet semmi és nem tölti be amymodule.css-filet)

Kérdésem miért nem müködik a modul, mit hibáztam el?

KALMI

0
0
Boobaa képe

Az .info és .css fájlokkal, mindennel együtt.

0
0
kalmarr képe

Sikerült megoldást találnom rá - kis segítséggel ;):

function mymodule_init() {
  if (arg(0) == 'node' && is_numeric(arg(1)) && arg(2) == 'iframe') {
    drupal_add_css(drupal_get_path('module', 'mymodule') . '/mymodule.css');
  }
}

Viszont az eredeti a forum létrehozási problémával nem sikerült megküzdeni. Bár szerintem az alap smink felül írja a CSS tartalmat, mivel ha megváltoztatom pl a hátteret, akkor nem változik semmi.

Csak ha olyan stílust tudok formázni ami nem szerepel az alap CSS-ben (ez elvileg most nekem nem számít).

Kérdésem, hogy ebbe a kódba, hogyan lehetne behívni az "iframe.tpl.php", hogy be tudjam szurni másik oldalba a webform tartalmát, amit eredetileg is szeretnék csinálni?

Üdv.

KALMI

0
0
Paal képe

Ha nem, akkor miért nem tudod megmutatni úgy, ahogy Boobaa kérte? Minek itt felesleges köröket futni?

0
0

--
Palócz Paal Pál, a drupal.hu admin csoportjának tagja
Ajánlott olvasmány: Eric Steven Raymond - Hogyan kérdezzünk okosan

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