рдпрд╣рд╛рдВ рдХреМрди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдбреНрд░реБрдкрд▓ рдореЗрдиреВ рдХреЗ рдХреЙрд▓рдмреИрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ

рд╣рд╛рдп рд╣рдмрд╕рд░!

рдореИрдВ рдПрдХ WEB рдбреЗрд╡рд▓рдкрд░ рд╣реВрдВ, рдореИрдВ PHP рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рддрд╛ рд╣реВрдВред рдореЗрд░рд╛ рдореБрдЦреНрдп рдзреНрдпрд╛рди CMS / CMF Drupal рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╡рд┐рдХрд╛рд╕ рд╣реИред рдореИрдВ рдПрдХ рдЫреЛрдЯреЗ рдЖрдИрдЯреА рд╕рдВрдЧрдарди рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╣реИрдВ (рдмрдбрд╝реА, рдЫреЛрдЯреА, рдирдИ, рдирдИ рдЖрдЧрдорди рдЖрджрд┐)ред рд╣рд╛рд▓ рд╣реА рдореЗрдВ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╡рд░реНрд╖ рд╣реИ) рдореИрдВ рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдЖрдпрд╛ рд╣реВрдВ, рдЬрд┐рдирдореЗрдВ рдХреБрдЫ рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛, рдлрд┐рд░ рдЕрдиреНрдп, рдЕрдиреНрдп ... рдФрд░ рдореВрд▓ рд░реВрдк рд╕реЗ, рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░, рдЧреНрд░рд╛рд╣рдХ рд╕рд╣реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдХреБрдЫ рдЫреЛрдЯреА рдЪреАрдЬреЗрдВ (рд╡рд╣рд╛рдВ, рдПрдХ рддрддреНрд╡ рдХреЛ рдлреЙрд░реНрдо рдореЗрдВ рдбрд╛рд▓реЗрдВ, рд╡рд╣рд╛рдВ) рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЖрджрд┐) рд▓реЗрдХрд┐рди рдмрдбрд╝реЗ рдкреНрд░реЛрдЬреЗрдЯреНрд╕ рдХреЗ рдмрд╛рдж рд╕реЗ рдХрднреА-рдХрднреА рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рдпрд╣рд╛рдВ рдХрд╛рдо рдХрд░рдирд╛" рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ? " рдХреМрди рд╕рд╛ рдореЙрдбреНрдпреВрд▓? тАЭ рд▓рдЧрднрдЧ 2 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╕реЗ рдореБрдЭреЗ рдбреНрд░рд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛, рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ, рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкреЗрдЬреЛрдВ рдкрд░ рд╕рдордп рдмрд░реНрдмрд╛рдж рдХрд░рдирд╛ рдирд╣реАрдВ рд╣реИ (рдкреЗрдЬ рдмрдирд╛рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ)ред рдФрд░ рддрдм рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреА рдкреЗрдЯреАрдПрдо рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдХрдВрд╕реЛрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдпрд╣ рдмрд╣реБрдд рдЬрд▓реНрджреА рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред

рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреЗ рд░реЗрдбреА-рдореЗрдб рдореЙрдбреНрдпреВрд▓рд░ рдмреЗрд╕ (рдЬреИрд╕реЗ рдбреНрд░реБрдкрд▓) рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╣рдореЗрд╢рд╛ рдЕрдкрдиреА рд╣реЛрддреА рд╣реИрдВ, рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рдпреЛрдЬрдирд╛, рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИрдВред рдЦреИрд░, рдпрд╣ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдбреНрд░рд╢ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╣реИред рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕реЗрдореА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред Drupal 6 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж рдореИрдВ рдлрд╛рдЗрд▓ cm.drush.inc рд╕реЗ рдХреЛрдб рджреВрдВрдЧрд╛

рдбреНрд░рд╢ рдХрдорд╛рдВрдб рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рд╣реБрдХ:
/** * Implementation of hook_drush_help(). */ function cm_drush_help($section) { switch ($section) { case 'drush:browse-url': return dt('Show URL\'s info'); case 'drush:browse-theme': return dt('Show theme function info'); } } /** * Implements hook_drush_command(). */ function cm_drush_command() { $items = array(); $items['browse-url'] = array( 'description' => dt('Show URL\'s info.'), 'arguments' => array( 'url' => dt('URL from browser'), ), 'aliases' => array('burl'), ); $items['browse-theme'] = array( 'description' => dt('Show theme function info.'), 'arguments' => array( 'theme_item' => dt('theme function'), ), 'aliases' => array('btheme'), ); return $items; } 


рдЕрдм рд╕реАрдзреЗ рдЯреАрдореЛрдВ рдкрд░


рдмреНрд░рд╛рдЙрдЬрд╝- url (рдмрд░реНрд▓)

рдХреЙрд▓рдмреИрдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдХрдорд╛рдВрдб рдореЗрдВ рджреА рдЧрдИ рдереА
 function drush_cm_browse_url($url) { $url = drupal_get_normal_path($url); drush_print(dt('Original path is: "!path"', array('!path' => $url))); $router_item = menu_get_item($url); if($router_item['file']) { require_once($router_item['file']); } $data = array(); $data['path'] = $router_item['path']; $data['access_callback'] = $router_item['access_callback']; $data['access_arguments'] = implode(", ", unserialize($router_item['access_arguments'])); $data['page_callback'] = $router_item['page_callback']; $data['page_arguments'] = implode(", ", unserialize($router_item['page_arguments'])); $data['tab_root'] = $router_item['tab_root']; $data['title'] = $router_item['title']; $data['title_callback'] = $router_item['title_callback']; drush_print(_cm_getting_function_info($router_item['page_callback'])); drush_print_table(drush_key_value_to_array_table($data)); } function _cm_getting_function_info($function_name) { include_once './includes/install.inc'; drupal_load_updates(); if (strpos($function_name, '::') === FALSE) { if (!function_exists($function_name)) { return drush_set_error(dt('Function not found')); } $reflect = new ReflectionFunction($function_name); } else { list($class, $method) = explode('::', $function_name); if (!method_exists($class, $method)) { return drush_set_error(dt('Method not found')); } $reflect = new ReflectionMethod($class, $method); } $func_info = array('!file' => $reflect->getFileName(), '!startline' => $reflect->getStartLine(), '!endline' => $reflect->getEndLine()); //drush_print_pipe(dt("!file -line !startline", $func_info)); return dt("Execute in : !file, lines !startline-!endline", $func_info); } 

рдЯреАрдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдмрд╣реБрдд рд╕реБрдВрджрд░ рд╣реИ
 $ drush burl admin Original path is: "admin" Execute in : /var/www/d6/modules/system/system.admin.inc, lines 11-59 path : admin access_callback : user_access access_arguments : access administration pages page_callback : system_main_admin_page page_arguments : tab_root : admin title : Administer title_callback : t 

рд╣рдо рдореВрд▓ рдкрде рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ (рдпрд╣ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ рдЕрдЧрд░ рдЕрдЪрд╛рдирдХ рдЙрдкрдирд╛рдо рдкреНрд░рдгрд╛рд▓реА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЛрд╢рд┐рд╢ рдХрд░ рдЪреБрдХреА рд╣реИ), рдХрд┐рд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдХреМрди рд╕реА рд▓рд╛рдЗрдиреЗрдВ рдФрд░ рдореЗрдиреВ рдХрд╛ рдЙрдЪрд┐рдд рд╡рд┐рд╡рд░рдгред рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рд╣реИ рдирд╛? рд▓реЗрдХрд┐рди рд╕рдЪреНрдЪрд╛рдИ рдпрд╣ рд╣реИ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдБ рдХреЙрд▓рдмреИрдХ-рдЖрдИ-рдлреЙрд░реНрдо рд╣реИрдВ:
 drush burl admin/settings/file-system Original path is: "admin/settings/file-system" Execute in : /var/www/d6/includes/form.inc, lines 70-149 path : admin/settings/file-system access_callback : user_access access_arguments : administer site configuration page_callback : drupal_get_form page_arguments : system_file_system_settings tab_root : admin/settings/file-system title : File system title_callback : t 

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреА рдХрд┐ рдпрд╣ рдкреНрд░рдкрддреНрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рджрд┐рдЦрд╛рдПрдЧрд╛ред

рд╣реБрдХ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдПрдХ рдФрд░ рдХрдорд╛рдВрдб рд╣реИред
рдмреНрд░рд╛рдЙрдЬрд╝-рдереАрдо (btheme)

 function drush_cm_browse_theme($theme_item) { init_theme(); $hooks = theme_get_registry(); var_dump($hooks[$theme_item]); } 

рдпрд╣ рдереАрдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╕рдЪреНрдЪрд╛рдИ рдпрд╣ рд╣реИ рдХрд┐ рдЖрд░рдХреНрд╖рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдбреНрд░рд╛рдлреНрдЯ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╣реИред
 $ drush btheme item_list array(7) { ["arguments"]=> array(4) { ["items"]=> array(0) { } ["title"]=> NULL ["type"]=> string(2) "ul" ["attributes"]=> NULL } ["type"]=> string(6) "module" ["theme path"]=> string(14) "modules/system" ["function"]=> string(15) "theme_item_list" ["include files"]=> array(0) { } ["theme paths"]=> array(1) { [0]=> string(14) "modules/system" } ["preprocess functions"]=> array(1) { [0]=> string(19) "template_preprocess" } } 

рдпрд╣ рдереАрдорд┐рдВрдЧ рдЖрдЗрдЯрдо item_list рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ


Drupal 7 рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдм рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╣реБрдд рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА (рдпрд╛ рд╢рд╛рдпрдж рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ), рдореИрдВ рдЕрднреА рд╕рдВрд╕реНрдХрд░рдг 6 рдХреЗ рд▓рд┐рдП рдЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЖрдпрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдерд╛ред

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


All Articles