Как мне избежать редактирования ядра Drupal?

Я создавал обмен с XML-сервисом партнеров, и я не мог получить XML правильно, но, как и со всеми вещами Drupal, ошибка xmlrpc и ведение событий меньше надежных.

Итак, я сделал это в include /xmlrpc.inc.

function xmlrpc_request($method, $args) {
  $xmlrpc_request = new stdClass();
  $xmlrpc_request->method = $method;
  $xmlrpc_request->args = $args;
  $xmlrpc_request->xml = <<<EOD
<?xml version="1.0"?>
<methodCall>
<methodName>{$xmlrpc_request->method}</methodName>
<params>
EOD;
  foreach ($xmlrpc_request->args as $arg) {
    $xmlrpc_request->xml .= '<param><value>';
    $v = xmlrpc_value($arg);
    $xmlrpc_request->xml .= xmlrpc_value_get_xml($v);
    $xmlrpc_request->xml .= "</value></param>\n";
  }
  $xmlrpc_request->xml .= '</params></methodCall>';

  /* This part here */
  watchdog('xmlrpc',$xmlrpc_request->xml);
  /* End ridiculously tiny hack */

  return $xmlrpc_request;
}

Я получил нужные мне данные, и через 10 минут партнерский интерфейс соответствовал моему запросу, потому что (шокирующий, я знаю) журналы хороши.

Мне нравится дополнительный журнал, и я хочу его сохранить. Что такое чистый, простой и, самое главное, одобренный Drupal способ сделать это?

7
21 голос | спросил OhkaBaka 9 MarpmFri, 09 Mar 2012 17:42:47 +04002012-03-09T17:42:47+04:0005 2012, 17:42:47

2 ответа


11

Ядро хакера сильно обескуражено для непосвященных, потому что оно эффективно уменьшает сообщество поддержки тысяч до сообщества поддержки одного (или независимо от размера вашей команды). Без этой лучшей практики, помогать тем новым для Drupal было бы почти невозможно. Это также мешает модульности и, в некоторых случаях, безопасности.

Говоря об этом, хакерское ядро ​​не всегда так злобно, как нам нравится. Без изменения ядра у нас не было бы таких дистрибутивов, как Pressflow и т. П., Которые интересны для ядра. Очень важно, чтобы вы точно знали, что делаете, что вы распространяете свои патчи с вашим дистрибутивом (предпочтительно таким образом, чтобы вы могли автоматически применять их после автоматического обновления) и что вы храните подробную документацию из того, что вы изменили и почему вы его изменили.

В зависимости от того, как у вас есть структурированные вещи, вы можете сделать указанное выше изменение xmlrpc_request(), создать патч и затем использовать что-то вроде Drush Make , чтобы автоматизировать его применение (обратите внимание, что Drush Make переходит в сам проект Drush для выпуска 5.x), при этом поставляя дополнительную документацию в make-файле и в другом месте, изменение делает и почему это необходимо /желательно.

Другим распространенным шаблоном для улучшения основных функций является создание оболочки, которая добавляет крошечную функциональность к основной функции и вызывает оболочку вместо реализации ядра. Когда это возможно, это делает вещи намного более модульными. Рассмотрим следующее:

/**
 * Wrapper function for xmlrpc_request() to provide logging.
 */
function mymodule_xmlrpc_request($method, $args) {
  $xrr = xmlrpc_request($method, $args);
  watchdog('xmlrpc', $xrr->xml);
  return $xrr;
}

Опять же, в зависимости от того, что вы делаете, это может быть или не быть осуществимым, но когда это вы спасли себе несколько головных болей, пытаясь убедиться, что ядро ​​остается исправленным и документированным. Хотя в этом случае одноразовая функция, подобная этой, кажется идеальным кандидатом на такую ​​оболочку. Если ваша реализация захвачена в модуле, вы можете даже расширить ее, чтобы контролировать уровень журнала всего вашего решения, отключив эту функциональность на производственных сайтах:

/**
 * Wrapper function for xmlrpc_request() to provide logging (if enabled).
 */
function mymodule_xmlrpc_request($method, $args) {
  $xrr = xmlrpc_request($method, $args);
  if (variable_get('mymodule_log_level', 0) > 0) {
    watchdog('xmlrpc', $xrr->xml);
  }
}

Короче говоря, вы хотите максимизировать то, что вы можете делать с модулями (и вы можете многое сделать), но есть законные причины изменения ядра. Это должно быть сделано с осторожностью, вот и все.

ответил David Watson 9 MarpmFri, 09 Mar 2012 20:53:48 +04002012-03-09T20:53:48+04:0008 2012, 20:53:48
9

Если вам нужно изменить модули core или contrib .

  
  1. Создайте патч с изменениями.
  2.   
  3. Используйте систему развертывания, такую ​​как drush make, которая автоматически будет повторно применять исправления при обновлении ядра или модулей.
  4.   
  5. Документ документа документа.
  6.   
ответил googletorp 9 MarpmFri, 09 Mar 2012 17:51:14 +04002012-03-09T17:51:14+04:0005 2012, 17:51:14

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132