| ... | ... |
@@ -99,7 +99,7 @@ $GLOBALS['TL_DCA']['tl_vr_real_estate_assets'] = array |
| 99 | 99 |
'palettes' => array |
| 100 | 100 |
( |
| 101 | 101 |
'__selector__' => array('availability','managedPropertyId'),
|
| 102 |
- 'default' => '{title_legend},title,assetNo,floor,managedPropertyId;{availability_legend},availability;{misc_legend},description;{basic_data_legend},livingSpace,numberOfRooms,rent,coldRent,advanceOperatingCosts,constructionYear,deposit,entitlementCertificate;{features_legend},features,parking,heatingType,energyPassType,energyConsumption;{images_legend},gallerySRC,floorPlansSRC;{publish_legend},published,start,stop',
|
|
| 102 |
+ 'default' => '{title_legend},title,alias,assetNo,floor,managedPropertyId;{availability_legend},availability;{misc_legend},description;{basic_data_legend},livingSpace,numberOfRooms,rent,coldRent,advanceOperatingCosts,constructionYear,deposit,entitlementCertificate;{features_legend},features,parking,heatingType,energyPassType,energyConsumption;{images_legend},gallerySRC,floorPlansSRC;{publish_legend},published,start,stop',
|
|
| 103 | 103 |
), |
| 104 | 104 |
|
| 105 | 105 |
// Subpalettes |
| ... | ... |
@@ -135,6 +135,13 @@ $GLOBALS['TL_DCA']['tl_vr_real_estate_assets'] = array |
| 135 | 135 |
'eval' => array('mandatory' => true, 'maxlength' => 255, 'tl_class' => 'w50'),
|
| 136 | 136 |
'sql' => "varchar(255) NOT NULL default ''" |
| 137 | 137 |
), |
| 138 |
+ 'alias' => array |
|
| 139 |
+ ( |
|
| 140 |
+ 'search' => true, |
|
| 141 |
+ 'inputType' => 'text', |
|
| 142 |
+ 'eval' => array('rgxp'=>'alias', 'doNotCopy'=>true, 'unique'=>true, 'maxlength'=>255, 'tl_class'=>'w50'),
|
|
| 143 |
+ 'sql' => "varchar(255) BINARY NOT NULL default ''" |
|
| 144 |
+ ), |
|
| 138 | 145 |
'postal' => array |
| 139 | 146 |
( |
| 140 | 147 |
'exclude' => true, |
| ... | ... |
@@ -95,7 +95,7 @@ class RealEstateAssetsListController extends RealEstateAssetsModuleController |
| 95 | 95 |
|
| 96 | 96 |
foreach ($assets as $asset) |
| 97 | 97 |
{
|
| 98 |
- $strUrl = $jumpTo !== null ? $urlGenerator->generate($jumpTo, ['parameters'=>'/items/'.$asset->id]) : null; |
|
| 98 |
+ $strUrl = $jumpTo !== null ? $urlGenerator->generate($jumpTo, ['parameters'=>$asset->alias]) : null; |
|
| 99 | 99 |
$figureBuilder->setLinkHref($strUrl); |
| 100 | 100 |
$arrItem = array_merge($asset->row(), [ |
| 101 | 101 |
'teaserFigure' => $this->getImageFigures($asset->gallerySRC, $figureBuilder, $asset->orderSRC, 1), |
| ... | ... |
@@ -11,9 +11,13 @@ |
| 11 | 11 |
namespace vonRotenberg\RealEstateListingBundle\EventListener; |
| 12 | 12 |
|
| 13 | 13 |
use Contao\CoreBundle\ServiceAnnotation\Callback; |
| 14 |
+use Contao\Database; |
|
| 14 | 15 |
use Contao\DataContainer; |
| 16 |
+use Contao\System; |
|
| 15 | 17 |
use Doctrine\DBAL\Connection; |
| 18 |
+use Exception; |
|
| 16 | 19 |
use vonRotenberg\RealEstateListingBundle\Model\ManagedPropertyModel; |
| 20 |
+use vonRotenberg\RealEstateListingBundle\Model\RealEstateCategoriesModel; |
|
| 17 | 21 |
|
| 18 | 22 |
class RealEstateAssetsContainerListener |
| 19 | 23 |
{
|
| ... | ... |
@@ -52,4 +56,34 @@ class RealEstateAssetsContainerListener |
| 52 | 56 |
|
| 53 | 57 |
$this->db->update('tl_vr_real_estate_assets', ['geox' => $Property->geox, 'geoy' => $Property->geoy],['id' => $dc->id]);
|
| 54 | 58 |
} |
| 59 |
+ |
|
| 60 |
+ /** |
|
| 61 |
+ * @Callback(table="tl_vr_real_estate_assets", target="fields.alias.save") |
|
| 62 |
+ */ |
|
| 63 |
+ public function generateAlias($varValue, DataContainer $dc) |
|
| 64 |
+ {
|
|
| 65 |
+ $aliasExists = static function (string $alias) use ($dc): bool {
|
|
| 66 |
+ $result = Database::getInstance() |
|
| 67 |
+ ->prepare("SELECT id FROM tl_vr_real_estate_assets WHERE alias=? AND id!=?")
|
|
| 68 |
+ ->execute($alias, $dc->id); |
|
| 69 |
+ |
|
| 70 |
+ return $result->numRows > 0; |
|
| 71 |
+ }; |
|
| 72 |
+ |
|
| 73 |
+ // Generate alias if there is none |
|
| 74 |
+ if (!$varValue) |
|
| 75 |
+ {
|
|
| 76 |
+ $varValue = System::getContainer()->get('contao.slug')->generate($dc->activeRecord->title, [], $aliasExists);
|
|
| 77 |
+ } |
|
| 78 |
+ elseif (preg_match('/^[1-9]\d*$/', $varValue))
|
|
| 79 |
+ {
|
|
| 80 |
+ throw new Exception(sprintf($GLOBALS['TL_LANG']['ERR']['aliasNumeric'], $varValue)); |
|
| 81 |
+ } |
|
| 82 |
+ elseif ($aliasExists($varValue)) |
|
| 83 |
+ {
|
|
| 84 |
+ throw new Exception(sprintf($GLOBALS['TL_LANG']['ERR']['aliasExists'], $varValue)); |
|
| 85 |
+ } |
|
| 86 |
+ |
|
| 87 |
+ return $varValue; |
|
| 88 |
+ } |
|
| 55 | 89 |
} |