Как извлечь из нескольких нод определенного типа cck-поля, подробности внутри

Главные вкладки

Аватар пользователя Jean-Claude Jean-Claude 9 мая 2012 в 21:56

интересует шестерка

к примеру есть тип материала клиника, в каждой клинике cck-поле адрес
допустим есть у меня 10 клиник, хочу вывести на 1 карту, пример тут http://api.yandex.ru/maps/doc/jsapi/2.x/examples/collections.html

то есть надо из каждой ноды определенного типа (клиника) извлечь адрес и кинуть в массив, ну или в цикле сразу присвоить куда надо

код карты

   <script type="text/javascript">
        // Как только будет загружен API и готов DOM, выполняем инициализацию
        ymaps.ready(init);

        function init () {
            var myMap = new ymaps.Map("map", {
                    center: [55.76, 37.67],
                    zoom: 10
                }),
                // Определяем границы карты: координаты левого верхнего и правого нижнего ее углов.
                bounds = myMap.getBounds(),
                myPlacemark,

                //  Создаем экземпляр класса коллекции геообъектов.
                myCollection = new ymaps.GeoObjectCollection();

            //  Создаем 10 меток с произвольными координатами (в области просмотра карты).
            for (var i = 0; i < 10; i++) {
               // Задаем произвольные координаты.
               var point = getRandomCoordinates(bounds[0][0], bounds[1][0], bounds[0][1], bounds[1][1]);
               // Создаем метку с заданными координатами.
               myPlacemark = new ymaps.Placemark(point);
               // Добавляем метку в коллекцию.
               myCollection.add(myPlacemark);
           }

           // Теперь добавим коллекцию геообъектов на карту.
           myMap.geoObjects.add(myCollection);
       }

       // Функция, генерирующая координаты метки случайным образом
       function getRandomCoordinates (maxLatitude, minLatitude, maxLongitude, minLongitude) {
           return [Math.random() * (maxLatitude - minLatitude) + minLatitude, Math.random() * (maxLongitude - minLongitude) + minLongitude];
       }
   </script>

то есть чуток изменить цикл for и каждый раз за ход цикла присвоить var point адрес из cck-поля, предположительно тут несколько строк php кода, не поможет ли кто?

Комментарии

Аватар пользователя Jean-Claude Jean-Claude 9 мая 2012 в 21:58

пардон, или хотя бы просто цикл извлечения адресов, забыл тут же еще геокодер придется прилепить, адреса же будут типа: Москва, ул. Нахимова, 37

Аватар пользователя Jean-Claude Jean-Claude 9 мая 2012 в 23:05

пока что набросал по этим инструкциям http://xandeadx.ru/blog/drupal/88

<?php

$result = db_query("SELECT nid FROM {content_type_firm}");
$nids = array();
while ($row = db_fetch_object($result)) {
$nids[] = $row->nid;
$title = db_result(db_query("SELECT field_firm_adr_value FROM {content_type_firm} WHERE nid = %d", $row->nid));
print $title.'
';
}

print '


';
print_r($nids);

?>

Аватар пользователя Jean-Claude Jean-Claude 10 мая 2012 в 15:48

итак, имеется результат, клиника, в нодах адрес

все клиники выводятся геокодером на одну карту

<?php<!-- Контейнер под карту -->
<div id="test-map" style="width:600px;height:400px"></div>    

<!-- Подключение библиотеки карты -->
<script type="text/javascript" src="http://api-maps.yandex.ru/1.1/index.xml?key=AJCkq08BAAAAjXQzCwIA1yCl4lBkZVg_hnNss3U8_wp0s_UAAAAAAAAAAADQz_VHLnRyT9mOcQCxqLJi8rYCyA==&amp;modules=plainstyle"></script>
<script type="text/javascript">
    var map = new YMaps.Map(document.getElementById("test-map")); // создаем объект карты в элементе с айди 'test-map'
    map.setCenter(new YMaps.GeoPoint(37.609218,55.753559), 10); // центр карты (широта, долгота) и текущий уровень увеличения
    
    // кнопки и шкала масштаба располагаем как хотим
    map.addControl(new YMaps.Zoom(), 
        new YMaps.ControlPosition(
            YMaps.ControlPosition.TOP_LEFT, // в какой угол поставить
            new YMaps.Size (5, 5) // сколько от него отступ в пикселах (x, y)
        )
    );
    
    // Включаем масштабирование скроллингом мыши
    map.enableScrollZoom();
    
    
    // выбор типа карты
    map.addControl(new YMaps.TypeControl());
    
    // линейка с расстоянием
    map.addControl(new YMaps.ScaleLine(),
        new YMaps.ControlPosition(
            YMaps.ControlPosition.BOTTOM_LEFT,
            new YMaps.Size (5, 20)
        )
    );
    
    // Тулбар
    map.addControl(new YMaps.ToolBar(),
        new YMaps.ControlPosition(
            YMaps.ControlPosition.TOP_LEFT,
            new YMaps.Size (250, 5)
        )
    );
    
    // Добавляем метку в координаты, полученные по указанному адресу
    var geocoder = new YMaps.Geocoder("Москва, ул. Тверская, д. 43"); 
    YMaps.Events.observe(geocoder, geocoder.Events.Load, function (geocoder) {
        var geoCoords = geocoder.get(0).getGeoPoint(),
            geoPlacemark = new YMaps.Placemark(geoCoords);
                geoPlacemark.name = "Гео метка имя";
    geoPlacemark.description = "Гео метка описание";
        map.addOverlay(geoPlacemark); 
    });

    
<?php
    $result 
db_query("SELECT nid FROM {content_type_clinic}");
    
$nids = array();
    while (
$row db_fetch_object($result)) {
        
$nids[] = $row->nid;
        
$title db_result(db_query("SELECT field_clinic_address_value FROM {content_type_clinic} WHERE nid = %d"$row->nid)); 
        
        
//извлекаем ноды
        
$title2 db_result(db_query("SELECT title FROM {node} WHERE nid = %d"$row->nid)); 
                
        
?>
        
        var geocoder = new YMaps.Geocoder("Москва, <?php print $title ?>"); 
        YMaps.Events.observe(geocoder, geocoder.Events.Load, function (geocoder) {
            var geoCoords = geocoder.get(0).getGeoPoint(),
                geoPlacemark = new YMaps.Placemark(geoCoords);
                geoPlacemark.name = '<?php print $title2 ?>';
                geoPlacemark.description = '<b>Адрес:</b> Москва, <?php print $title ?> <?php print l("подробнее..""node/$row->nid"?>';
            map.addOverlay(geoPlacemark); 
        });
    
    <?php ?>    
    
    
</script>
?>