Javascript Drupal-轻松地将自定义代码转换为Drupal模块?

Javascript Drupal-轻松地将自定义代码转换为Drupal模块?,javascript,php,sql,drupal,drupal-7,Javascript,Php,Sql,Drupal,Drupal 7,我有一个自定义的PHP文件,它使用javascript、PHP和SQL查询,但是我对drupal是全新的,并且很难实现它。我曾尝试过几次学习模块构建教程,但由于太多的细节而感到不知所措/压力重重,到目前为止还没有得到我的青睐。是否可以轻松地将在XAMPP环境中运行良好的文件制作成drupal模块,而不需要对代码进行太多修改?如果是这样,我需要在PHP文件中做哪些修改 下面是我的PHP文件中的代码: <?php $server = 'localhost';$user = 'root';$da

我有一个自定义的PHP文件,它使用javascript、PHP和SQL查询,但是我对drupal是全新的,并且很难实现它。我曾尝试过几次学习模块构建教程,但由于太多的细节而感到不知所措/压力重重,到目前为止还没有得到我的青睐。是否可以轻松地将在XAMPP环境中运行良好的文件制作成drupal模块,而不需要对代码进行太多修改?如果是这样,我需要在PHP文件中做哪些修改

下面是我的PHP文件中的代码:

<?php
$server = 'localhost';$user = 'root';$database = 'transportation';$password = null;
$db = mysqli_connect($server, $user, $password, $database);
?>

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">

var map = null;
var infowindow = new google.maps.InfoWindow();
var markers = [

  <?php
  if (isset($_GET['routeselected'])) 
  {
  $result = mysqli_query($db, "SELECT * FROM STOP INNER JOIN RouteStop ON Stop.Stop_ID = RouteStop.Stop_ID WHERE RouteStop.Route_ID = " . (int)$_GET['routeselected'] . " AND RouteStop.Company_ID = " . (int)$_GET['companyselected']);
  while ($row = mysqli_fetch_array($result))
      echo "{\"title\": '".$row['Stop_ID']."', \"lat\": '".$row['Latitude']."', \"lng\": '".$row['Longitude']."', \"description\": '".$row['StopName']."'},";
  }
  ?>

];

window.onload = function () {

var mapOptions = {
    center: new google.maps.LatLng(
        parseFloat(markers[0].lat),
        parseFloat(markers[0].lng)),
    zoom: 13,
    mapTypeId: google.maps.MapTypeId.ROADMAP
};
var path = new google.maps.MVCArray();
var service = new google.maps.DirectionsService();
var infoWindow = new google.maps.InfoWindow();
var map = new google.maps.Map(document.getElementById("map"), mapOptions);
var poly = new google.maps.Polyline({map: map, strokeColor: '#F3443C'});

var lat_lng = new Array();
           for (i = 0; i < markers.length; i++) {
           var data = markers[i]
           var myLatlng = new google.maps.LatLng(data.lat, data.lng);
           lat_lng.push(myLatlng);
           var marker = new google.maps.Marker({
               position: myLatlng,
               map: map,
               title: data.title
           });
           (function (marker, data) {
               google.maps.event.addListener(marker, "click", function (e) {
                   infoWindow.setContent(data.description);
                   infoWindow.open(map, marker);
               });
           })(marker, data);
       }
for (var i = 0; i < markers.length; i++) {
    if ((i + 1) < markers.length) {
        var src = new google.maps.LatLng(parseFloat(markers[i].lat), 
                                         parseFloat(markers[i].lng));
        var des = new google.maps.LatLng(parseFloat(markers[i+1].lat), 
                                         parseFloat(markers[i+1].lng));
        service.route({
            origin: src,
            destination: des,
            travelMode: google.maps.DirectionsTravelMode.DRIVING
        }, function (result, status) {
            if (status == google.maps.DirectionsStatus.OK) {
                for (var i = 0, len = result.routes[0].overview_path.length; i < len; i++){
                    path.push(result.routes[0].overview_path[i]);
                }
                poly.setPath(path);
            }
        });
    }
}
} 

</script>

<?php
if (isset($_GET['companyselected'])) 
  {
  if ($result = mysqli_query($db, "SELECT DISTINCT RouteNum, RouteName FROM Route WHERE Company_ID = " . (int)$_GET['companyselected']))
  {
    $fields = mysqli_fetch_fields($result);
      echo "<table style='width:900px'><tr>";
    foreach ($fields as $column) 
      echo "<th>" . $column->name . "</th>"; 
      echo "<th>Select Bus Company</th></tr>";
    while ($row = mysqli_fetch_assoc($result)) {
      echo "<tr>";
    foreach ($row as $field) echo "<td>" . $field . "</td>";
      echo "<td><a href=\"" . $_SERVER['PHP_SELF'] . "?routeselected=" 
       . $row['RouteNum'] . "&companyselected=" . $_GET['companyselected'] . "\" style=\"color: green;\">Display Route</a></td></tr>";
  }
    echo "</table>";
  } 
}

if (!(isset($_GET['companyselected']))) {
  $result = mysqli_query($db, "SELECT DISTINCT Company_ID, CompanyName " . "FROM Company");
  $fields = mysqli_fetch_fields($result);
    echo "<table style='width:900px'><tr>";
  foreach ($fields as $column) 
    echo "<th>" . $column->name . "</th>"; 
    echo "<th>Select Bus Company</th></tr>";
  while ($row = mysqli_fetch_assoc($result)) {
    echo "<tr>";
  foreach ($row as $field) echo "<td>" . $field . "</td>";
    echo "<td><a href=\"" . $_SERVER['PHP_SELF'] . "?companyselected=" 
       . $row['Company_ID'] . "\" style=\"color: green;\">Show Routes</a></td></tr>";
}
echo "</table>";
}

?>

var-map=null;
var infowindow=new google.maps.infowindow();
变量标记=[

脏方法1:您可以创建一个在主体中包含php内容的节点(php过滤模块),并在您的节点中使用上述所有代码,希望这些代码能够正常工作

脏方法2:如果你想在多个页面中包含一个块而不是一个节点,你可以使用上面的逻辑

模块方式:您必须提供更多关于您希望模块如何工作的信息(例如,覆盖用户的配置文件页面以包括地图或创建一个可包含在模板中的块,从管理后端获取变量或..等等),但是您的代码将不得不改变很多,并且您还应该使用drupal api(例如用于查询drupal数据库、访问变量等)。
Drupal模块利用(或至少应该利用)Drupal API,因此,例如,您可以简单(安全)地连接/查询数据库,而不是使用普通的php相反,使用

谢谢你的回复!我不知道你能做这样的事情!今天早些时候,我实际上只是在我的网站上使用了一个框架来显示我的代码(这只是一个简单但定制的谷歌地图).我想我现在就这样离开它,它工作得很好,但是我很可能在不久的将来遇到同样的问题,并将使用您的建议:)这是肮脏的方式#3;-)还有更多肮脏的方式,比如为您希望显示地图的主题/页面创建.tpl.php和其他..感谢投票:-)