Drupal: рдлреАрдб рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдкрд╛рд░реНрд╕рд░ рд▓рд┐рдЦрдирд╛

Drupal Developers рдХреЗ рдмреАрдЪ Feeds рдореЙрдбреНрдпреВрд▓ рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИред рд▓реЗрдХрд┐рди рд╕рд╡рд╛рд▓ рдпрд╣ рдЙрдарддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЕрдкрдиреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдереЛрдбрд╝рд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдХреНрдпрд╛ рдХрд░реЗрдВред рдлреАрдбреНрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдкреНрд▓рдЧрдЗрдиреНрд╕ рд╕рд┐рд╕реНрдЯрдо рд╣рдореЗрдВ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред
3 рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рд╣реИрдВ, рдЬрд┐рдирд╕реЗ рдЖрдкрдХреЛ рдирдП рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдкрд╛рд░реНрд╕рд░ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрдиреЗ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдХреНрд╕рд░ рдореБрдЭреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓реЗрдВ рдЖрдпрд╛рдд рдХрд░рдиреЗ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред

рдореЙрдбреНрдпреВрд▓ рдирд┐рд░реНрдорд╛рдг

рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдПрдХ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдЬрд╛рдирдХрд╛рд░реА рдлрд╝рд╛рдЗрд▓ рдФрд░ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

json_example_parser.info
name = Json example parser description = Simple json parser package = Feeds core = 7.x dependencies[] = feeds 


json_example_parser.module
 <?php /** * @file * Json example parser - simple parser plugin */ /** * Implementation of hook_feeds_plugins(). *    . */ function json_example_parser_feeds_plugins() { $info = array(); $info['JsonExampleParser'] = array( 'name' => 'JSON parser', 'description' => 'Parses custom JSON.', 'handler' => array( 'parent' => 'FeedsParser', //      ,   Feeds - FeedsFetcher, FeedsParser  FeedsProcessor 'class' => 'JsonExampleParser', //  ,       'file' => 'JsonExampleParser.inc', //    'path' => drupal_get_path('module', 'json_example_parser'), //     ), ); return $info; } //    Feeds    function json_example_parser_enable() { //clear the cache to display in Feeds as available plugin. cache_clear_all('plugins:feeds:plugins', 'cache'); } ?> 

рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╣реБрдХ рдХреЗ рдореБрдЦреНрдп рдЖрдХрд░реНрд╖рдг рдХрд╛ рд╡рд░реНрдгрди рд╣реИред

рд╕реНрд░реЛрдд рдбреЗрдЯрд╛

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдпрд╛рддрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде "рдХрдВрдкреНрдпреВрдЯрд░ рдЧреЗрдо" рдиреЛрдб рд▓реЗрдВ:

рдЬреЛ рдбреЗрдЯрд╛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╡рд╣ JSON рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рдЖрдПрдЧрд╛ред рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдпрд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рд╣реИ рдпрд╛ HTTP рд╕рдВрдЧреНрд░рд╛рд╣рдХ, Fetcher рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдФрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХрд▓реЗрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧ рдЗрди рдХреЗ рд╕реЗрдЯ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВред

рдЗрдирдкреБрдЯ JSON:

 [ { "name":"Team Fortress 2", "year":2007, "price":0 }, { "name":"Warcraft III: The Frozen Throne", "year":2003, "price":13.9 }, { "name":"Diablo III", "year":2012, "price":33 } ] 


рдкрд╛рд░реНрд╕рд░ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдирд╛

рдПрдХ рдкрд╛рд░реНрд╕рд░ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рдорд╛рдирдХ рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ рдлреАрдбрд░реНрд╕рдкреИрд░ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдкрд╛рд░реНрд╕ рдФрд░ рдЧреЗрдЯрдореИрдкреНрд╕реЙрд░реНрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдмрд╛рдХреА рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред

JsonExampleParser.inc
 <?php /** * A JSON example parser */ class JsonExampleParser extends FeedsParser { /** * Implements FeedsParser::parse(). */ public function parse(FeedsSource $source, FeedsFetcherResult $fetcher_result) { $result = new FeedsParserResult(); //    $source_config = $source->getConfigFor($this); //  JSON  $fetch_items = json_decode($fetcher_result->getRaw()); foreach ($fetch_items as $value) { $item = array('name' => $value->name); if ($value->year) { $item['year'] = intval($value->year); } if ($value->price) { $item['price'] = floatval($value->price); } //     if ( $source_config['type'] == 'all' || ($source_config['type'] == 'free' && $item['price'] == 0) || ($source_config['type'] == 'paid' && $item['price'] > 0)) { //     $result->items[] = $item; } } return $result; } /** * Implements FeedsParser::getMappingSources(). */ public function getMappingSources() { return array( 'name' => array( 'name' => t('Game name'), 'description' => t('The name of the computer game.'), ), 'year' => array( 'name' => t('Release year'), 'description' => t('Release year of the computer game.'), ), 'price' => array( 'name' => t('Game price'), 'description' => t('The cost of the computer game.'), ), ) + parent::getMappingSources(); } /** * Configuration form. *  ,       . */ public function configForm(&$form_state) { $form = array(); $form['type'] = array( '#type' => 'select', '#title' => t('Game type'), '#description' => t('Game filter by type.'), '#options' => array( 'all' => t('All game'), 'paid' => t('Paid'), 'free' => t('Free'), ), '#default_value' => $this->config['type'], ); return $form; } /** * Define default configuration values. *    ,       . */ public function configDefaults() { return array( 'type' => 'all', ); } /** * Define defaults. *     . */ public function sourceDefaults() { return array( 'type' => $this->config['type'], ); } /** * Show configuration form for users. *         . */ public function sourceForm($source_config) { $form = array(); $form['#weight'] = -10; $form['help']['#markup'] = '<div class="help"><p>' . t('Select the type of game you want to import') . ':</p></div>'; $form['type'] = array( '#type' => 'select', '#title' => t('Game type'), '#description' => t('Game filter by type.'), '#options' => array( 'all' => t('All game'), 'paid' => t('Paid'), 'free' => t('Free'), ), '#default_value' => isset($source_config['type']) ? $source_config['type'] : 'all', ); return $form; } } 


рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ред

рдкрд╛рд░реНрд╕ - рдПрдХ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╡рд┐рдзрд┐; рд╕реНрд░реЛрдд рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ рдлреАрдбрд╕реНрд╕реЛрд░реНрд╕ рдФрд░ рдХреНрд▓рд╛рд╕ рдлреАрдб рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдлреАрдбрд╕реЗрдЯрд░.рдХрд╛рдЙрдВрдЯрд░ рдЬрд┐рд╕рд╕реЗ рд░реАрдб рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рддреИрдпрд╛рд░ рдХреА рдЧрдИ рд╡рд╕реНрддреБ рдмрдирд╛рддреА рд╣реИ FeedsParserResult рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд╕рд╛рдеред

getMappingSources - рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛ рдлрд╝реАрд▓реНрдб рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рддреА рд╣реИ рдЬреЛ рд╕реНрд░реЛрдд рд╕реЗ рд▓рд┐рдЦрд┐рдд рд╡рд╕реНрддреБ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдкрд┐рдВрдЧ рдлрд╝реАрд▓реНрдб рдХрд╛ рдирд╛рдо рдиреЛрдб рд╣реЗрдбрд░ рдЖрджрд┐ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред

configForm - рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝реЙрд░реНрдо рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ рдЬреЛ рдЖрдпрд╛рддрдХ рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреГрд╖реНрда рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдбреЗрдЯрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред

configDefaults - рдорд╛рдирдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдкрд╛рд░реНрд╕рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

sourceDefaults рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝реЙрд░реНрдо рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдорд╛рдкрджрдВрдбреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдУрд╡рд░рд░рд╛рдЗрдб рд╡рд┐рдзрд┐ рд╣реИред

sourceForm - рдПрдХ рдРрд╕рд╛ рдлреЙрд░реНрдо рдЬреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛, рд╡рд╣ рдлрд╝реЙрдЪрд░ рдлреЙрд░реНрдо рдХрд╛ рдкреВрд░рдХ рд╣реЛрдЧрд╛ред

рдирд┐рд╖реНрдХрд░реНрд╖

рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдХрд┐рд╕реА рднреА рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЛ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЕрд╕реАрдорд┐рдд рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдлреАрдбреНрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдг рдкреНрд▓рдЧ-рдЗрди рдорд┐рд▓рд╛ред рдлрд╝реАрдб рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рд╡рд╛рд▓реЗ рдорд╛рдирдХ рдРрдб-рдСрди рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рджреЗрдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред

Source: https://habr.com/ru/post/In164707/


All Articles