[РЕШЕНО] Вывод массива изображений нод SELECT запрос!

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

Аватар пользователя a.venni a.venni 19 декабря 2013 в 17:29

Всем привет! Нужно вывести массив картинок из полученного результата от запроса:

$result = "SELECT node.nid AS nid,'node' AS field_data_field_recomended_mail_img__node_entity_type
FROM
{node} node
WHERE (( (node.status = '1') ))
ORDER BY node_created DESC
LIMIT 10 OFFSET 0"
---------

Если использовать:
foreach($result as $row){
print($row->field_data_field_recomended_mail_img__node_entity_type);
}
то выводится на экран слово: "node"

---

Запрос взят с views - но вьюха выводит все как положено.

---
Вопрос: Как вывести все картинки как это делает 'views' - но только программно и самостоятельно?

ВложениеРазмер
Иконка изображения snimok.jpg25.07 КБ
Иконка изображения snimok.jpg41.88 КБ

Комментарии

Аватар пользователя q2_faith q2_faith 19 декабря 2013 в 18:17

"a.venni" wrote:
Иииии не врубился(( Можете объяснить своими словами раз знаете?

сорри)
вам это нужно https://api.drupal.org/api/drupal/includes%21database%21database.inc/fun...
список функций
https://api.drupal.org/api/drupal/includes%21database%21select.inc/class...
мануал
https://drupal.org/node/310075

Аватар пользователя a.venni a.venni 19 декабря 2013 в 18:33

"q2_faith" wrote:
сорри)
вам это нужно https://api.drupal.org/api/drupal/includes%21database%21database.inc/fun...
список функций
https://api.drupal.org/api/drupal/includes%21database%21select.inc/class...
мануал
https://drupal.org/node/310075[/quote]
Я не продвинутый, еще зеленый разработчик - поэтому если смотреть на решения сверху, то ничего не разгляжу. Не понял ничего, в тех примерах везде используются PDO запросы - кажись это не то. Буду ждать когда конкретно ответят

Аватар пользователя q2_faith q2_faith 19 декабря 2013 в 19:47

"a.venni" wrote:
еще зеленый разработчик

ленивый разработчик)

<?php
$query 
db_select('node''n');
$query->join('field_data_field_recomended_mail_img__node_entity_type''wtf''n.nid = wtf.entity_id');
$query->addField('wtf''field_recomended_mail_img__node_entity_type_fid');
$query->condition('n.status'1);
$query->execute();
?>

не факт, что все работает. но смысл должен быть понятен.

Аватар пользователя sg85 sg85 19 декабря 2013 в 19:53

Причем тут PDO? Хорошо хоть не контроллер жесткого диска. Впрочем, динамические запросы Вам тут тоже даром не нужны.
Для начала не помешало бы хотя бы немного почитать про какую-нибудь СУБД. У Вас в запросе идет получение только nid`ов, а field_data_field_recomended_mail_img__node_entity_type - это всего лишь костыль, как Вы могли догадаться из названия этой... фигни(думаю слово алиас в данном контексте будет пустым звуком), в нем содержится тип сущности, при этом этот тип сущности не дергается из БД, а передается сразу в запросе(эдакий вопрос-ответ, аналогично - как задать человеку вопрос "какого цвета синий шарик?"), собственно, знание зачем там этот костыль Вам тоже не сильно поможет.
Кроме того, "список картинок" в друпале может иметь множество значений, что именно Вам нужно?(во вьювс, например, "список картинок" не получают не просто так)

Аватар пользователя a.venni a.venni 19 декабря 2013 в 20:29

"sg85" wrote:
Причем тут PDO? Хорошо хоть не контроллер жесткого диска. Впрочем, динамические запросы Вам тут тоже даром не нужны.
Для начала не помешало бы хотя бы немного почитать про какую-нибудь СУБД. У Вас в запросе идет получение только nid`ов, а field_data_field_recomended_mail_img__node_entity_type - это всего лишь костыль, как Вы могли догадаться из названия этой... фигни(думаю слово алиас в данном контексте будет пустым звуком), в нем содержится тип сущности, при этом этот тип сущности не дергается из БД, а передается сразу в запросе(эдакий вопрос-ответ, аналогично - как задать человеку вопрос "какого цвета синий шарик?"), собственно, знание зачем там этот костыль Вам тоже не сильно поможет.
Кроме того, "список картинок" в друпале может иметь множество значений, что именно Вам нужно?(во вьювс, например, "список картинок" не получают не просто так)

Вместо чтобы писать это все - объяснил нормально, как вывести или как это делает Views. Если непонял вопроса перечитай - я написал массив картинок, есть такая штука!

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

Аватар пользователя drupby drupby 19 декабря 2013 в 20:40

"a.venni" wrote:
Картинки загружаются в запись в неограниченном колличестве! Да и вообще не важно сколько этих картинок и какие они, главный вопрос как их выводит views, потому что любую текстовую информацию выводит нормально, но где картинки выводит 'node'... - это в программном методе который в начале описал!

тебе надо запросом получить массив id нужных нод-материалов , а потом используя api друпала и функции темизации выводить как тебе нужно и какие поля нужно

"a.venni" wrote:
'node' AS field_data_field_recomended_mail_img__node_entity_type

и откуда ты это взял?

Аватар пользователя a.venni a.venni 10 ноября 2015 в 11:49

"drupby" wrote:
'node' AS field_data_field_recomended_mail_img__node_entity_type
и откуда ты это взял?

Посмотри запрос во 2 скриншоте - его создал views я скопировал, так как мне структура базы данных неизвестна и я плохо разбираюсь в SQL почти незнаю.

Готов заплатить за помощь!

field_recomended_mail_img_ - Это такое поле (машинное имя) В нее грузятся картинки, в моем случае рекомендательные письма. Smile

Аватар пользователя sg85 sg85 19 декабря 2013 в 21:22

"a.venni" wrote:
главный вопрос как их выводит views

тремя SQL запросами + темизацией

"a.venni" wrote:
потому что любую текстовую информацию выводит нормально, но где картинки выводи 'node'... - это в программном методе!

омфг видимо, вы меня даже не читали... Напишите запрос "SELECT 'brain' lost_limb;" и вы будете удивлены результатом работы этого замечательного программного метода Wink

вообще, вот Вам список Ваших картинок

$results = db_query_range("SELECT * FROM {node} n LEFT JOIN {field_data_field_recomended_mail_img_} i ON i.entity_id = n.nid LEFT JOIN {file_managed} f ON f.fid = i.field_recomended_mail_img__fid WHERE n.status = '1' ORDER BY n.node_created DESC",0,10)->fetchAll();

только что Вы с "таким" делать будете?

Аватар пользователя drupby drupby 19 декабря 2013 в 21:48

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

Аватар пользователя a.venni a.venni 19 декабря 2013 в 23:08

"drupby" wrote:
все равно судя по всему сам не сможешь вывести

Не вывести просто для меня самоубийство!
"drupby" wrote:
выводи вьюхой

Выводил но это не подходит и не в долгих запросах проблема.!!!
"drupby" wrote:
я вот тут представил , если бы человек с улицы решил попробывать себя в качестве пластического хирурга , ну так просто потому что хочется . чтобы интересно получилось , хотя бы на промежуточном этапе

С воображением у тебя хорошо! Даже очень - начни писать книги, или иди в КВН шутки придумывать, думаю там будут над ними смеяться.
------

Не нужна мне ваша помощь короче! Как сделаю - сюда решение выложу во благо тех кто попадет в такую же ситуацию как и я! Найдет эту статью и не будет так долго париться...

Всем спасибо, думаю за 6 часов управлюсь

Аватар пользователя drupby drupby 20 декабря 2013 в 0:31

"a.venni" wrote:
Не нужна мне ваша помощь короче! Как сделаю - сюда решение выложу во благо тех кто попадет в такую же ситуацию как и я! Найдет эту статью и не будет так долго париться...
Всем спасибо, думаю за 6 часов управлюсь

слышали мы уже такие угрозы-обещания , как думаешь чем они закончились?
ты ни sql ,ни собственно структуру базы данных друпала , ни api друпала для дальнейшей обработки результатов выборки даже и близко не знаешь - а это все далеко не шесть часов , да и через шесть часов пройдут все твои детские обиды на весь окружающий жестокий мир , который тебя не понимает и не помогает

Аватар пользователя a.venni a.venni 10 ноября 2015 в 11:49

Все таки разобрался! Нашел структуру базы данных друпал и начал искать нужные мне таблицы а по ним поля. В оконцовке замутил простой запрос который вытащил путь к картинке логотипа. Получился он такой:

SELECT n.title, fm.filename
FROM `node` n
INNER JOIN (
SELECT field_logotype_fid as ifid, entity_id as nid
FROM `field_data_field_logotype`
)
as subq
ON subq.nid = n.nid
INNER JOIN `file_managed` fm
ON subq.ifid = fm.fid
WHERE n.type = 'company'

SELECT n.title, fm.filename - Сперва я выбрал нужные мне поля Название ноды и название нужной картинки.
INNER JOIN (
SELECT field_logotype_fid as ifid, entity_id as nid
FROM `field_data_field_logotype`
) as subq
ON subq.nid = n.nid
- Следующим делом я подключил таблицу с информацией о логотипах. Кстате field_data_field_logotype - это точно такая же таблица по структуре как и field_data_field_images которую везде в примерах используют, вот и я пихал в свой код её, а как оказалась она пустая. В друпале когда создаёшь новое поле в типе материала то создается отдельная таблица схожая по типу равному-типу-этого-поля, в моем случае Изображение. Название таблицы строится следующим образом field_data_field_+<машинное имя вашего нового поля>.
Но в самой таблице нету информации о расположении картинки на диске, а она лежит в специальной таблице под названием file_managed, связь таблиц происходит через поле: fid. Я нашел поле в таблице с логотипом field_logotype_fid (сдесь тоже происходит подмена машинного имени нового поля) и в file_managed есть поле fid. Вот по ним нужно связывать. Сделал это так:
LEFT OUTER JOIN `file_managed` fm
ON subq.ifid = fm.fid

Условие поставил по типу материала 'Company' - WHERE n.type = 'company'
----
я заменил таблицы для себя, чтобы меньше писать было и не путаться.
fm - file_managed
subq - field_data_field_logotype
n - node
------
Вот собственно и разобрался. И сразу понятны стали первые 2 комментария.
Основной запрос получился такой:

SELECT
node.nid AS nid,
fm.filename,
field_data_field_service.delta AS field_data_field_service_delta,
field_data_field_service.language AS field_data_field_service_language,
field_data_field_service.bundle AS field_data_field_service_bundle,
field_data_field_service.field_service_value AS field_data_field_service_field_service_value,
field_data_field_service.field_service_format AS field_data_field_service_field_service_format,
node.created AS node_created,
'node' AS field_data_field_logotype_node_entity_type,
'node' AS field_data_field_service_node_entity_type,
'node' AS field_data_field_recomended_mail_img__node_entity_type
FROM
{node} node
INNER JOIN {field_data_field_status} field_data_field_status ON node.nid = field_data_field_status.entity_id AND (field_data_field_status.entity_type = 'node' AND field_data_field_status.deleted = '0')
INNER JOIN {field_data_field_archive} field_data_field_archive ON node.nid = field_data_field_archive.entity_id AND (field_data_field_archive.entity_type = 'node' AND field_data_field_archive.deleted = '0')
INNER JOIN (SELECT field_logotype_fid as ifid, entity_id as en_nid FROM `field_data_field_logotype`) as subq ON subq.en_nid = node.nid
INNER JOIN `file_managed` fm ON subq.ifid = fm.fid
LEFT JOIN {field_data_field_service} field_data_field_service ON node.nid = field_data_field_service.entity_id AND (field_data_field_service.entity_type = 'node' AND field_data_field_service.deleted = '0')
WHERE (( (node.status = '1') AND (node.type IN ('company')) AND (field_data_field_status.field_status_value = '1') AND (field_data_field_archive.field_archive_tid = '1') ))
ORDER BY node_created DESC"

А результат вывода как раз что нужно!)

    foreach($result as $row){
    echo('
  • nid.'">');
    echo('
    filename.'"/>');
    echo(''.$row->field_data_field_service_field_service_value.'');
    echo('
  • ');
    }
    ?>

Вот результат вывода:

Конец отчету. Прям как блог получился.

Аватар пользователя Grayw0lf Grayw0lf 20 декабря 2013 в 3:17

"a.venni" wrote:

foreach($result as $row){
echo('

  • nid.'">');
    echo('
    filename.'"/>');
    echo(''.$row->field_data_field_service_field_service_value.'');
    echo('
  • ');
    }
    ?>


    что будет когда домен поменяется? фигня какая то... если честно вообще хуйня.. а есть еще в друпе функция l. Ну перепиши темплейт rows по нормальному.

    Аватар пользователя sg85 sg85 20 декабря 2013 в 3:42

    "a.venni" wrote:
    Не нужна мне ваша помощь короче! Как сделаю - сюда решение выложу во благо тех кто попадет в такую же ситуацию как и я! Найдет эту статью и не будет так долго париться...

    лучше бы Вы этого не делали, ибо то, что Вы выложили, это яркий пример того, как делать не стоит...
    И, если не секрет, чем вьювс не угодил? Ведь в итоге вариант с вьювс и Ваш делают примерно одно и тоже, только Ваш несколько через одно место

    Аватар пользователя drupby drupby 20 декабря 2013 в 9:29

    "a.venni" wrote:
    Основной запрос получился такой:

    ну предположим ты запрос сам не писал ,а взял сформированный вьюсом
    только там много лишнего и ненужного
    "a.venni" wrote:
    А результат вывода как раз что нужно!)
      foreach($result as $row){
      echo('

  • nid.'">');
      echo('
    filename.'"/>');
      echo(''.$row->field_data_field_service_field_service_value.'');
      echo('
  • ');
      }
    ?>


    а это уже говнокод называется
    "a.venni" wrote:
    Вот результат вывода:

    это результат вьюса , а не твой

    ps совсем забыл , что у школьников зимние каникулы