saját modul
Saját modul kell, és bele két függvény. Az egyikkel elérjük, hogy a mi másik függvényünk fusson le a user/%user útvonalon:
/* * Implementation of hook_menu_alter(). */ function modulname_menu_alter(&$items) { $items['user/%user']['access callback'] = TRUE; $items['user/%user']['page callback'] = 'modulname_landingpage'; }
A másik pedig az adminnak megmutatja a user oldalt, a többieknek pedig kiír egy általunk megadott a szöveget.
/* * User landing page. * * If the account is blocked, show the user page to the admin, * and display a warning to others. */ function modulname_landingpage() { global $user; $account = user_load(1); return user_view_page($account); } else { drupal_set_title(t('Go away')); return t('Sorry, this is a blocked user.'); } }
Nem teszteltem, lehet benne hiba. A működésbe léptetéshez a gyorstárat üríteni kell, hogy a menü újraépüljön.
--
Csonka Gergely
http://cheppers.com
- A hozzászóláshoz regisztráció és bejelentkezés szükséges
Ez így nem is lesz jó
„1.) Létrehoztam egy teszt.js fájlt.
2.) Abba bemásoltam a fenti kódot.”
Kapásból nem jó, direkt mondtam, hogy a Drupalos konvencióknak megfelelően rakd be a kódot (lásd behaviors). :)
Így nem akkor fog lefutni a kód, amikor kell.
Ezt fusd át:
http://drupal.org/node/756722#using-jquery
meg ezt:
http://drupal.org/update/modules/6/7#javascript_compatibility
Valahogy így rakd be a modulod JS-fájljába:
(function ($) { Drupal.behaviors.MODULODNEVECSERELDLE = { attach: function (context, settings) { var $checkboxes = $('#devel-generate-content-form td input[type="checkbox"]'); $checkboxes.change(function () { var countCheckedCheckboxes = $checkboxes.filter(':checked') .length; $('#count-checked-checkboxes') .text(countCheckedCheckboxes); }); } }; })(jQuery);
„5.) A modulom.module -ban a
<?phpután beírtam:
drupal_add_js('/sites/all/modulom/js/teszt.js'”
Megint nem jó. Csak úgy a levegőben nem lóghat a kódod. Ehhez implementálni kell pl. a hook_init() hookot. Ezenkívül az sem jó, hogy ilyen módon adod meg az útvonalat, hogy perjellel kezdődik (mi van, ha alkönyvtárban van a Drupalod?), és erre való a drupal_get_path().
Tehát valahogy így csináld:
/** * Implements hook_init() */ function MODULODNEVECSERELDLE_init(){ }
Azt, hogy betöltődik-e a fájlod a megfelelő helyen, ne úgy csekkold, hogy átnevezed a fájlt, hogy kapsz-e file not found errort, hanem úgy, hogy megnézed a Source-t a böngészőben (általában Ctrl+U billentyűkombináció), hogy szerepel-e benne a fájl a tag src attribútumában.
A MODULODNEVECSERELDLE értelemszerűen mindenhol legyen lecserélve a saját modulod nevére.
- A hozzászóláshoz regisztráció és bejelentkezés szükséges
render() metódust kellene szerintem felhasználnod
egyeLőre
Ez alapján indultam el http://techblog.zabuchy.net/2010/non-database-field-in-custom-drupal-vie... de csak részleteiben értem.
Megnéztem az általad linkelt példát, itt sehol sem használja a get_value() metódust. Te miért azzal próbálkozol?
A render() metódust használja fel, szerintem neked is azzal kellene próbálkoznod!
Az pedig így néz ki:
http://api.drupal.org/api/views/handlers%21views_handler_field.inc/funct...
// ... /** * Render the field. * * @param $values * The values retrieved from the database. */ function render($values) { $value = $this->get_value($values); return $this->sanitize_value($value); } // ...
Tehát szerintem nálad is ezt a metódust kellene felhasználni. Elvileg itt is tudnál mit kezdeni a saját, adatbázisból jövő értékeiddel.
Nézd meg ezt a példát is (mondjuk ez már Views 3 API, de most itt nagy különbség nincs):
http://www.heididev.com/custom-field-handlers-views-3
a példa 3-as pontjában pont a render()-ben végzi el a saját adatainak tetszőleges kiíratását:
- A hozzászóláshoz regisztráció és bejelentkezés szükséges
Ígértem
Nah, hali megint mindenkinek
Sir_Csavar ígértem, elkészítettem ^^ használd egészséggel
Még annyi megjegyzés, hogy beletettem egy autocomplete-et is :)
<?php function om_kereso_menu() { $items = array(); $access = array('access content'); $items['om_kereso'] = array( 'title' => t("Keresés"), 'weight' => 0, 'page callback' => 'om_kereso_page', 'access arguments' => $access, 'type' => MENU_NORMAL_ITEM ); $items['custom/autocomplete'] = array( 'page callback' => 'om_kereso_data_autocomplete', 'access arguments' => $access, 'access callback' => TRUE, 'type' => MENU_CALLBACK, ); return $items; } function om_kereso_form(&$form_state) { $form['#redirect'] = FALSE; $form['om_kereso'] = array( '#type' => 'textfield', '#title' => 'Keresés az OM title-ben', '#autocomplete_path' => 'custom/autocomplete' ); $form['submit'] = array( '#type' => 'submit', '#value' => t('Mehet') ); return $form; } function om_kereso_page() { $output = drupal_get_form('om_kereso_form'); if(!empty($_POST['om_kereso'])) { $keresendo_szo = $_POST['om_kereso']; $result = db_query("SELECT n.title FROM node n WHERE n.title LIKE '%$keresendo_szo%' AND n.status = 1"); //ide jöjjön az sql lekérdezésed $items = array(); while($record = db_fetch_array($result)) { $items[] = $record['title']; //ide jön az adatok összegyűjtése; } if (!empty($items)) { $output .= theme('item_list', $items, 'A keresés eredménye', 'ul'); } else { $output .= drupal_set_message('Nem találtam a keresett szó alapján semmit se', 'status', TRUE); } } return $output; } function om_kereso_data_autocomplete($node = '') { $matches = array(); $result = db_query("SELECT n.title FROM node n WHERE n.title LIKE '$node%' AND n.status = 1"); while ($record = db_fetch_object($result)) { $matches[$record->title] = check_plain($record->title); } print drupal_to_js($matches); die; } ?>
*----*----*
$node ? 'alma' : 'bor'
*----*----*
- A hozzászóláshoz regisztráció és bejelentkezés szükséges
Végleges
Üdv megint,
Kijavítottam a hibákat, használjátok egészséggel
<?php function om_kereso_menu() { $items = array(); $access = array('access content'); $items['om_kereso'] = array( 'title' => t("Keresés"), 'weight' => 0, 'page callback' => 'om_kereso_page', 'access arguments' => $access, 'type' => MENU_NORMAL_ITEM ); $items['custom/autocomplete'] = array( 'page callback' => 'om_kereso_data_autocomplete', 'access arguments' => $access, 'access callback' => TRUE, 'type' => MENU_CALLBACK, ); return $items; } function om_kereso_form(&$form_state) { $form['#redirect'] = FALSE; $form['om_kereso'] = array( '#type' => 'textfield', '#title' => 'Keresés az OM title-ben', '#autocomplete_path' => 'custom/autocomplete' ); $form['submit'] = array( '#type' => 'submit', '#value' => t('Mehet') ); return $form; } function om_kereso_page() { $output = drupal_get_form('om_kereso_form'); if(!empty($_POST['om_kereso'])) { $keresendo_szo = $_POST['om_kereso']; $result = db_query("SELECT n.title FROM {node} n WHERE n.title LIKE '%%%s%%' AND n.status = 1, $keresendo_szo"); //ide jöjjön az sql lekérdezésed $items = array(); while($record = db_fetch_array($result)) { $items[] = $record['title']; //ide jön az adatok összegyűjtése; } if (!empty($items)) { $output .= theme('item_list', $items, 'A keresés eredménye', 'ul'); } else { $output .= drupal_set_message('Nem találtam a keresett szó alapján semmit se', 'status', TRUE); } } return $output; } function om_kereso_data_autocomplete($toredek= '') { $matches = array(); $result = db_query("SELECT n.title FROM {node} n WHERE n.title LIKE '%s%%' AND n.status = 1, $toredek"); while ($record = db_fetch_object($result)) { $matches[$record->title] = check_plain($record->title); } print drupal_to_js($matches); die; } ?>
Nyah, örvendtem
*----*----*
$node ? 'alma' : 'bor'
*----*----*
- A hozzászóláshoz regisztráció és bejelentkezés szükséges
form_alter vs template.php
Szerintem két irányból közelítheted meg a dolgot:
- a hook_form_alter()-t használod
- a template.php-t használod
A user.module-ban meg lehet nézni mi is állítja elő azt a form-ot:
function user_login_block() { $form = array( '#action' => url($_GET['q'], array('query' => drupal_get_destination())), '#id' => 'user-login-form', '#validate' => user_login_default_validators(), '#submit' => array('user_login_submit'), ); $form['name'] = array('#type' => 'textfield', '#title' => t('Username'), '#maxlength' => USERNAME_MAX_LENGTH, '#size' => 15, '#required' => TRUE, ); $form['pass'] = array('#type' => 'password', '#title' => t('Password'), '#maxlength' => 60, '#size' => 15, '#required' => TRUE, ); $form['submit'] = array('#type' => 'submit', '#value' => t('Log in'), ); $items = array(); if (variable_get('user_register', 1)) { $items[] = l(t('Create new account'), 'user/register', array('attributes' => array('title' => t('Create a new user account.')))); } $items[] = l(t('Request new password'), 'user/password', array('attributes' => array('title' => t('Request new password via e-mail.')))); $form['links'] = array('#value' => theme('item_list', $items)); return $form; }
Ha a hook_form_alter-t használod, akkor $form['links']-t kell felülírnod a megfelelőre.
Ha a template.php-t használod akkor valami ilyesmit kell majd csinálni
function SMINKEMNEVE_theme() { return array( 'user_login_block' => array( 'arguments' => array('form' => NULL), ), ); } function SMINKEMNEVE_user_login_block($form) { //meg tudod nézni mi minden van benne: print_r($form); $out = ''; // Módosítod a dolgokat a megfelelőre // A végén hozzáfűzöd ezt a sort, hogy benne legyenek a rejtett input mezők is $out .= drupal_render($form); return $out; }
Ugye az egyik modul, a másik smink kérdés. Ha valami funkcionális módosítás akkor azt inkább modullal szokás megcsinálni, ha pedig kinézet akkor sminkkel.
A baj az, hogy nem értem pontosan mit szeretnél:
- Azt akarod hogy ne listában legyen hanem más megjelenítésben
- Azt akarod hogy ne is látszódjon, ne jelenjen meg
Az első esetben szerintem inkább smink kérdés, a másodikban én már modult írnék rá.
- A hozzászóláshoz regisztráció és bejelentkezés szükséges





kódok/tábla
ez van egy node-ban php-ban: (előtte persze a kapcsolat felépítése)
Ez az ertekeles.php:
A táblák pedig:
id tinyint(4) auto_increment
lemezcim varchar(255) utf8_general_ci
pont tinyint(4)
ertekelo varchar(255) utf8_general_ci
ertekeles varchar(255) utf8_general_ci
Arra sem jöttem rá, hogy ha az ertekeles.php lefut, akkor miért kapok tök fehér képernyőt.
Ide kéne valami includes, vagy requred a theme-ből, de nem tudom mi. (Ez már egy következő probléma...)
köszönöm hogy segítesz
Hs.