簡體   English   中英

Drupal-輕松將自定義代碼轉換為Drupal模塊嗎?

[英]Drupal - Easily convert custom code to drupal module?

我有一個自定義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>";
}

?>

骯臟的方式1:您可以在主體(PHP過濾器模塊)中創建一個包含php內容的節點,並在您的節點中使用以上所有代碼,希望它們能正常工作

骯臟的方式2:如果您想將其包含在多個頁面中,則可以將上述邏輯與塊而不是節點一起使用

模塊方式:您必須提供有關模塊工作方式的更多信息(例如,覆蓋用戶的個人資料頁面以包含地圖或創建可包含在模板中的塊,並從管理后端或從中獲取變量。等),但是您的代碼將不得不更改很多,並且您還應該利用drupal api(例如,用於查詢drupal數據庫,訪問變量等)。 Drupal模塊利用(或至少應該利用)Drupal API的優勢,因此例如,您可以簡單地(安全地)使用[db_query函數]來代替普通的php連接/查詢數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM