Explorar el Código

Ticket #4156 - Timeline: Use 'srcset' for images provided by content modules: Core changes.

AntonLV hace 3 años
padre
commit
b9562dae69

+ 28 - 17
modules/base/general/classes/BxBaseModGeneralModule.php

@@ -3384,29 +3384,40 @@ class BxBaseModGeneralModule extends BxDolModule
     protected function _getImagesForTimelinePost($aEvent, $aContentInfo, $sUrl, $aBrowseParams = array())
     {
         $CNF = &$this->_oConfig->CNF;
-
-        $sImage = $sImageOrig = '';
-        if(isset($CNF['FIELD_COVER']) && isset($aContentInfo[$CNF['FIELD_COVER']]) && $aContentInfo[$CNF['FIELD_COVER']]) {
-            $sImage = $this->_oConfig->getImageUrl($aContentInfo[$CNF['FIELD_COVER']], array('OBJECT_IMAGES_TRANSCODER_GALLERY', 'OBJECT_IMAGES_TRANSCODER_THUMB'));
-            $sImageOrig = $this->_oConfig->getImageUrl($aContentInfo[$CNF['FIELD_COVER']], array('OBJECT_IMAGES_TRANSCODER_COVER'));
+        
+        $iImageId = 0;
+        $sImageSm = $sImageMd = $sImageXl = '';
+        if(isset($CNF['FIELD_COVER']) && !empty($aContentInfo[$CNF['FIELD_COVER']])) {
+            $iImageId = (int)$aContentInfo[$CNF['FIELD_COVER']];
+            $sImageSm = $this->_oConfig->getImageUrl($iImageId, ['OBJECT_IMAGES_TRANSCODER_MINIATURE', 'OBJECT_IMAGES_TRANSCODER_THUMB']);
+            $sImageMd = $this->_oConfig->getImageUrl($iImageId, ['OBJECT_IMAGES_TRANSCODER_GALLERY', 'OBJECT_IMAGES_TRANSCODER_THUMB']);
+            $sImageXl = $this->_oConfig->getImageUrl($iImageId, ['OBJECT_IMAGES_TRANSCODER_COVER']);
         }
 
-        $bImageThumb = isset($CNF['FIELD_THUMB']) && isset($aContentInfo[$CNF['FIELD_THUMB']]) && $aContentInfo[$CNF['FIELD_THUMB']];
-        if($sImage == '' && $bImageThumb)
-            $sImage = $this->_oConfig->getImageUrl($aContentInfo[$CNF['FIELD_THUMB']], array('OBJECT_IMAGES_TRANSCODER_GALLERY', 'OBJECT_IMAGES_TRANSCODER_THUMB'));
+        if($sImageMd == '' && isset($CNF['FIELD_THUMB']) && !empty($aContentInfo[$CNF['FIELD_THUMB']])) {
+            $iImageId = (int)$aContentInfo[$CNF['FIELD_THUMB']];
+            $sImageSm = $this->_oConfig->getImageUrl($iImageId, ['OBJECT_IMAGES_TRANSCODER_MINIATURE', 'OBJECT_IMAGES_TRANSCODER_THUMB']);
+            $sImageMd = $this->_oConfig->getImageUrl($iImageId, ['OBJECT_IMAGES_TRANSCODER_GALLERY', 'OBJECT_IMAGES_TRANSCODER_THUMB']);
+            $sImageXl = $this->_oConfig->getImageUrl($iImageId, ['OBJECT_IMAGES_TRANSCODER_COVER']);
+        }
 
-        if($sImageOrig == '' && $bImageThumb)
-            $sImageOrig = $this->_oConfig->getImageUrl($aContentInfo[$CNF['FIELD_THUMB']], array('OBJECT_IMAGES_TRANSCODER_COVER'));
+        if(empty($sImageMd))
+            return [];
 
-        if(empty($sImage))
-            return array();
+        if($sImageSm == '')
+            $sImageSm = $sImageMd;
 
-        if($sImageOrig == '')
-            $sImageOrig = $sImage;
+        if($sImageXl == '')
+            $sImageXl = $sImageMd;
 
-        return array(
-            array('id' => $aContentInfo[$CNF['FIELD_THUMB']], 'url' => $sUrl, 'src' => $sImage, 'src_orig' => $sImageOrig),
-        );
+        return [[
+            'id' => $iImageId, 
+            'url' => $sUrl, 
+            'src' => $sImageMd, 
+            'src_small' => $sImageSm, 
+            'src_medium' => $sImageMd, 
+            'src_orig' => $sImageXl
+        ]];
     }
 
     protected function _getImagesForTimelinePostAttach($aEvent, $aContentInfo, $sUrl, $aBrowseParams = array())

+ 27 - 10
modules/base/text/classes/BxBaseModTextModule.php

@@ -909,21 +909,38 @@ class BxBaseModTextModule extends BxBaseModGeneralModule implements iBxDolConten
 
         $aGhostFiles = $oStorage->getGhosts($this->serviceGetContentOwnerProfileId($iContentId), $iContentId);
         if(!$aGhostFiles)
-            return array();
+            return [];
 
-        $oTranscoder = BxDolTranscoderImage::getObjectInstance($CNF['OBJECT_IMAGES_TRANSCODER_GALLERY_PHOTOS']);
+        $oTranscoderSm = false;
+        if(!empty($CNF['OBJECT_IMAGES_TRANSCODER_MINIATURE_PHOTOS']))
+            $oTranscoderSm = BxDolTranscoderImage::getObjectInstance($CNF['OBJECT_IMAGES_TRANSCODER_MINIATURE_PHOTOS']);
 
-        foreach ($aGhostFiles as $k => $a) {
-            $sPhotoSrc = $oTranscoder->getFileUrl($a['id']);
-            if(empty($sPhotoSrc))
+        $oTranscoderMd = BxDolTranscoderImage::getObjectInstance($CNF['OBJECT_IMAGES_TRANSCODER_GALLERY_PHOTOS']);
+
+        $oTranscoderXl = false;
+        if(!empty($CNF['OBJECT_IMAGES_TRANSCODER_VIEW_PHOTOS']))
+            $oTranscoderXl = BxDolTranscoderImage::getObjectInstance($CNF['OBJECT_IMAGES_TRANSCODER_VIEW_PHOTOS']);
+
+        foreach($aGhostFiles as $k => $a) {
+            $sPhotoSrcMd = $oTranscoderMd->getFileUrl($a['id']);
+            if(empty($sPhotoSrcMd))
                 continue;
 
-            $aResults[] = array(
+            $sPhotoSrcSm = $oTranscoderSm !== false ? $oTranscoderSm->getFileUrl($a['id']) : '';
+            if(!$sPhotoSrcSm)
+                $sPhotoSrcSm = $sPhotoSrcMd;
+
+            $sPhotoSrcXl = $oTranscoderXl !== false ? $oTranscoderXl->getFileUrl($a['id']) : $oStorage->getFileUrlById($a['id']);
+            if(!$sPhotoSrcXl)
+                $sPhotoSrcXl = $sPhotoSrcMd;
+
+            $aResults[] = [
                 'id' => $a['id'],
-                'src' => $sPhotoSrc,
-                'src_medium' => $sPhotoSrc,
-                'src_orig' => $oStorage->getFileUrlById($a['id']),
-            );
+                'src' => $sPhotoSrcMd,
+                'src_small' => $sPhotoSrcSm,
+                'src_medium' => $sPhotoSrcMd,
+                'src_orig' => $sPhotoSrcXl,
+            ];
         }
         return $aResults;
     }

+ 22 - 17
modules/boonex/timeline/classes/BxTimelineModule.php

@@ -4716,28 +4716,33 @@ class BxTimelineModule extends BxBaseModNotificationsModule implements iBxDolCon
 
         $aPhotos = $this->_oDb->getMedia($CNF['FIELD_PHOTO'], $iEventId);
         if(empty($aPhotos) || !is_array($aPhotos))
-            return array();
+            return [];
 
-        $oTranscoder = BxDolTranscoderImage::getObjectInstance($this->_oConfig->getObject('transcoder_photos_view'));
-        $oTranscoderMedium = BxDolTranscoderImage::getObjectInstance($this->_oConfig->getObject('transcoder_photos_medium'));
-        $oTranscoderBig = BxDolTranscoderImage::getObjectInstance($this->_oConfig->getObject('transcoder_photos_big'));
+        $oTranscoderSm = BxDolTranscoderImage::getObjectInstance($this->_oConfig->getObject('transcoder_photos_view'));
+        $oTranscoderMd = BxDolTranscoderImage::getObjectInstance($this->_oConfig->getObject('transcoder_photos_medium'));
+        $oTranscoderLg = BxDolTranscoderImage::getObjectInstance($this->_oConfig->getObject('transcoder_photos_big'));
 
-        $aResult = array();
+        $aResult = [];
         foreach($aPhotos as $iPhotoId) {
-            $sPhotoSrc = $oTranscoder->getFileUrl($iPhotoId);
-            $sPhotoSrcMedium = $oTranscoderMedium->getFileUrl($iPhotoId);
-            $sPhotoSrcBig = $oTranscoderBig->getFileUrl($iPhotoId);
-            if(empty($sPhotoSrcMedium) && !empty($sPhotoSrc))
-                $sPhotoSrcMedium = $sPhotoSrc;
-            if(empty($sPhotoSrcBig) && !empty($sPhotoSrcMedium))
-                $sPhotoSrcBig = $sPhotoSrcMedium;
+            $sPhotoSrcMd = $oTranscoderMd->getFileUrl($iPhotoId);
+            if(empty($sPhotoSrcMd))
+                continue;
 
-            $aResult[] = array(
+            $sPhotoSrcSm = $oTranscoderSm->getFileUrl($iPhotoId);
+            if(empty($sPhotoSrcSm))
+                $sPhotoSrcSm = $sPhotoSrcMd;
+
+            $sPhotoSrcLg = $oTranscoderLg->getFileUrl($iPhotoId);
+            if(empty($sPhotoSrcLg))
+                $sPhotoSrcLg = $sPhotoSrcMd;
+
+            $aResult[] = [
                 'id' => $iPhotoId,
-                'src' => $sPhotoSrc,
-                'src_medium' => $sPhotoSrcMedium,
-                'src_orig' => $sPhotoSrcBig,
-            );
+                'src' => $sPhotoSrcMd,
+                'src_small' => $sPhotoSrcSm,
+                'src_medium' => $sPhotoSrcMd,
+                'src_orig' => $sPhotoSrcLg,
+            ];
         }
 
         return $aResult;

+ 15 - 3
modules/boonex/timeline/classes/BxTimelineTemplate.php

@@ -2592,7 +2592,7 @@ class BxTimelineTemplate extends BxBaseModNotificationsTemplate
     protected function _getTmplVarsImages($aImages, $mixedLayout, &$aEvent, &$aBrowseParams)
     {
         if(empty($aImages) || !is_array($aImages))
-            return array();
+            return [];
 
         $iTotal = 0; //--- Total count of images related to the event.
         if(isset($aImages['total']) && isset($aImages['items'])) {
@@ -2608,7 +2608,7 @@ class BxTimelineTemplate extends BxBaseModNotificationsTemplate
         $bViewItem = isset($aBrowseParams['view']) && $aBrowseParams['view'] == BX_TIMELINE_VIEW_ITEM;
 
         $sDisplay = '';
-        $aTmplVarsImages = array();
+        $aTmplVarsImages = [];
 
         $sImageSrcKey = $sImageSrcKeyBig = '';
         $sImageSrcKeyDefault = 'src';
@@ -2634,6 +2634,11 @@ class BxTimelineTemplate extends BxBaseModNotificationsTemplate
         $aImageFirst = reset($aImages);
         $iImageFirst = isset($aImageFirst['id']) ? (int)$aImageFirst['id'] : 0;
 
+        $aImageSizes = [
+            'small' => '600w', 
+            'medium' => '1000w', 
+            'orig' => '2400w'
+        ];
         foreach($aImages as $aImage) {
             $sImageSrcKeyCur = $sImageSrcKey;
             if(($bAttachFirst && isset($aImage['id']) && (int)$aImage['id'] == $iImageFirst) || $iTotal == 2)
@@ -2643,8 +2648,15 @@ class BxTimelineTemplate extends BxBaseModNotificationsTemplate
             if(empty($sImageSrc))
                 continue;
 
+            $sImageAttrSrcset = '';
+            foreach($aImageSizes as $sSize => $sWidth)
+                if(isset($aImage['src_' . $sSize]))
+                    $sImageAttrSrcset .= $aImage['src_' . $sSize] . ' ' . $sWidth . ', ';
+
             $sImage = $this->parseImage($sImageSrc, array(
-                'class' => $sStylePrefix . '-item-image'
+                'class' => $sStylePrefix . '-item-image',
+                'srcset' => trim($sImageAttrSrcset, ", "),
+                'sizes' => '100%'
             ));
 
             $aAttrs = array();