D6 modul rewrite D7-re.

Wathfea képe

Sziasztok!

Van egy D6-ra készült modul, amit most átkéne alakítanom D7-re. Eddig még nem foglalkoztam ilyen jellegű fejlesztéssel ezért kérnék tőletek segítséget. Elkezdtem átolvasni az apikat és kiszűrni a különbségeket a D6 és D7 között, de vannak apróságok amiken még elcsúszik a dolog.
Van az alábbi kód:

function template_preprocess_forex(&$variables) {
  $header = array(
    array(
      'data' => t('Symbol'),
      'field' => 'symbol',
    ),
    array(
      'data' => t('Bid'),
      'field' => 'bid',
      'class' => 'rightcell',
    ),
    array(
      'data' => t('Ask'),
      'field' => 'ask',
      'class' => 'rightcell',
    ),
  );
  $result = db_query('SELECT * FROM {gft_cache} WHERE forexid IN (%s)' .
					tablesort_sql($header),
					variable_get('gft_api_forexids_page', '1,2,3,4'));
  $variables['header'] = variable_get('gft_api_header', '');
  $variables['content'] = theme('table', array('header' => $header, 'rows' => _fetch_quote_table($result), 'attributes' => array('class' => 'gft_page')));
}

Ebből amennyire apiből kiszűrtem a querys rész nem megfelelő. Alapból ez a tablesort_sql nem stimmel, de nem találok számomra átlátható példát, hogyan kéne. Megmutatná valaki, hogy hogyan kéne ez a lekérdezés kinézzen D7-ben? Ez alapján a többit már elvben megtudnám csinálni. :) Ha van még a kódban olyan dolog ami nem D7 kompatibilis akkor szóljatok.

A másik, hogy az install schema se akar jó lenni, de azt nem értem miért. Kivettem belőle a t() fvket a hook_install és a hook_uninstall részeket is manual alapján elvben azok már nem kellenek.
A db mezők létrehozásánál azonban elakad. Ezzel a részel mi a bibi?

/**
 * Implements hook_schema().
 */
function gft_api_schema() {
  $schema['gft_cache'] = array(
    'description' => 'Stores forex feed values in a data table',
    'fields' => array(
      'forexid' => array(
        'type' => 'int',
        'unsigned' => TRUE,
        'not_null' => TRUE,
        'default' => 0,
        'description' => 'Forex feed ID from xml',
      ),'symbol' => array(
        'type' => 'varchar',
        'length' => 32,
        'not null' => TRUE,
        'default' => '',
        'description' => 'Forex feed currency symbol',
      ),
 
...
return $schema;

Leírás alapján én nem látom, hol van benne hiba.
Kérnék valakit akinek van egy kis ideje és türelme segíteni egy picit a fenti kódrészletekkel az segítsen. Nagyon szépen köszönöm.

Dávid

Drupal verzió: 
aruna képe

a schema modul, amivel meglévő táblákról legenerálja a sémát. Gondolom léteznek a tábláid, ha d6-os modulod is használta őket. Szerintem próbáld ki ezt a modult, pont ilyesmire találták ki, lehet vele gyorsítani a fejlesztést.

...Schema structure generation: the module examines the live database and creates Schema API data structures for all tables that match the live database...

0
0
Wathfea képe

Köszönöm, ez tök jó modul. Leszedtem a develnek a code upgrade és review moduljait is és kijavítottam pár hibát, de ezekkel a lekérdezéssekel ő se tudott mit kezdeni.

db_query('DELETE FROM {gft_cache} WHERE forexid = %d', $currency['id']);
      db_query("INSERT INTO {gft_cache} (forexid, ask, bid, symbol, timestamp) VALUES
        ('%d', '%f', '%f', '%s', '%s')", $currency['id'], $currency['ask'], $currency['bid'],
              $currency['symbol'], date('o-m-d h:i:s'));
0
0
tatarbj képe

az adatbázisréteg eléggé megváltozott d7-ben, azoknak a függvényeit nézd át, valamint a számoknál nem tudom mennyire komálja a db_query, ha aposztrófok közé helyezed, bár lehet fals az infóm, én inkább így írnám:
"INSERT INTO .... VALUES (%d, %d, %d, '%s', '%s')", ... az ask és bid elemei a tömbnek megkövetelik a floatot? (akkor lehet %f, bár nem szoktam használni...)
üdv, tatarbj.

0
0

---
Tatár Balázs János

Sk8erPeter képe

Ezt az oldalt ajánlom a query-k Drupal 7-formára történő konvertálására:

http://upgrade.boombatower.com/tools/sql/inline

Ez alapján:

  1. Az első:
    db_query('DELETE FROM {gft_cache} WHERE forexid = %d', $currency['id']);

    átalakítva:

    db_delete('gft_cache')
      ->condition('forexid', $currency['id'])
      ->execute();
  2. A második:
    db_query("INSERT INTO {gft_cache} 
       (forexid, ask, bid, symbol, timestamp) VALUES
       (%d, %f, %f, '%s', '%s')", 
        $currency['id'], 
        $currency['ask'], 
        $currency['bid'],
        $currency['symbol'], 
        date('o-m-d h:i:s')
    );

    ÁTALAKÍTVA:

    $id = db_insert('gft_cache')
      ->fields(array(
        'forexid' => $currency['id'],
        'ask' => $currency['ask'],
        'bid' => $currency['bid'],
        'symbol' => $currency['symbol'],
        'timestamp' => date('o-m-d h:i:s'),
      ))
      ->execute();

    Hozzáteszem, itt a 'timestamp' elnevezés egy mezőnek nagyon rossz ötlet, mivel ez egy foglalt kulcsszó ([link], [link]).
    Így nem is tudom, ez a query megfelelően működik-e.
    A lefoglalt szavak közé tartoznak az olyanok is, mint a log, az ilyet többnyire query-ben érdemes így írni: `log`.

Remélem nem hibás a query-átalakítás, és valamennyivel közelebb vitt a megoldáshoz.

9
0
Wathfea képe

Köszönöm szépen a sok hozzászólást. Ezek alapján remélem, már nem lesz gondom az updatettel. :) Még egyszer köszönöm!

0
0